Mercurial > pub > bltoolkit
comparison Source/Data/Linq/Builder/ScalarSelectBuilder.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Linq.Expressions; | |
3 | |
4 namespace BLToolkit.Data.Linq.Builder | |
5 { | |
6 using BLToolkit.Linq; | |
7 using Data.Sql; | |
8 | |
9 class ScalarSelectBuilder : ISequenceBuilder | |
10 { | |
11 public int BuildCounter { get; set; } | |
12 | |
13 public bool CanBuild(ExpressionBuilder builder, BuildInfo buildInfo) | |
14 { | |
15 return | |
16 buildInfo.Expression.NodeType == ExpressionType.Lambda && | |
17 ((LambdaExpression)buildInfo.Expression).Parameters.Count == 0; | |
18 } | |
19 | |
20 public IBuildContext BuildSequence(ExpressionBuilder builder, BuildInfo buildInfo) | |
21 { | |
22 return new ScalarSelectContext(builder) | |
23 { | |
24 Parent = buildInfo.Parent, | |
25 Expression = buildInfo.Expression, | |
26 SqlQuery = buildInfo.SqlQuery | |
27 }; | |
28 } | |
29 | |
30 public SequenceConvertInfo Convert(ExpressionBuilder builder, BuildInfo buildInfo, ParameterExpression param) | |
31 { | |
32 return null; | |
33 } | |
34 | |
35 public bool IsSequence(ExpressionBuilder builder, BuildInfo buildInfo) | |
36 { | |
37 return true; | |
38 } | |
39 | |
40 class ScalarSelectContext : IBuildContext | |
41 { | |
42 public ScalarSelectContext(ExpressionBuilder builder) | |
43 { | |
44 Builder = builder; | |
45 | |
46 builder.Contexts.Add(this); | |
47 } | |
48 | |
49 #if DEBUG | |
50 public string _sqlQueryText { get { return SqlQuery == null ? "" : SqlQuery.SqlText; } } | |
51 #endif | |
52 | |
53 public ExpressionBuilder Builder { get; set; } | |
54 public Expression Expression { get; set; } | |
55 public SqlQuery SqlQuery { get; set; } | |
56 public IBuildContext Parent { get; set; } | |
57 | |
58 public void BuildQuery<T>(Query<T> query, ParameterExpression queryParameter) | |
59 { | |
60 var expr = BuildExpression(null, 0); | |
61 var mapper = Builder.BuildMapper<T>(expr); | |
62 | |
63 query.SetQuery(mapper.Compile()); | |
64 } | |
65 | |
66 public Expression BuildExpression(Expression expression, int level) | |
67 { | |
68 if (expression == null) | |
69 expression = ((LambdaExpression)Expression).Body.Unwrap(); | |
70 | |
71 switch (expression.NodeType) | |
72 { | |
73 case ExpressionType.New: | |
74 case ExpressionType.MemberInit: | |
75 { | |
76 var expr = Builder.BuildExpression(this, expression); | |
77 | |
78 if (SqlQuery.Select.Columns.Count == 0) | |
79 SqlQuery.Select.Expr(new SqlValue(1)); | |
80 | |
81 return expr; | |
82 } | |
83 | |
84 default : | |
85 { | |
86 var expr = Builder.ConvertToSql(this, expression, false); | |
87 var idx = SqlQuery.Select.Add(expr); | |
88 | |
89 return Builder.BuildSql(expression.Type, idx); | |
90 } | |
91 } | |
92 | |
93 } | |
94 | |
95 public SqlInfo[] ConvertToSql(Expression expression, int level, ConvertFlags flags) | |
96 { | |
97 throw new NotImplementedException(); | |
98 } | |
99 | |
100 public SqlInfo[] ConvertToIndex(Expression expression, int level, ConvertFlags flags) | |
101 { | |
102 throw new NotImplementedException(); | |
103 } | |
104 | |
105 public IsExpressionResult IsExpression(Expression expression, int level, RequestFor requestFlag) | |
106 { | |
107 switch (requestFlag) | |
108 { | |
109 case RequestFor.Expression : return IsExpressionResult.True; | |
110 default : return IsExpressionResult.False; | |
111 } | |
112 } | |
113 | |
114 public IBuildContext GetContext(Expression expression, int level, BuildInfo buildInfo) | |
115 { | |
116 throw new NotImplementedException(); | |
117 } | |
118 | |
119 public int ConvertToParentIndex(int index, IBuildContext context) | |
120 { | |
121 throw new NotImplementedException(); | |
122 } | |
123 | |
124 public void SetAlias(string alias) | |
125 { | |
126 } | |
127 | |
128 public ISqlExpression GetSubQuery(IBuildContext context) | |
129 { | |
130 return null; | |
131 } | |
132 } | |
133 } | |
134 } |