comparison Source/Data/Linq/Builder/SequenceContextBase.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.Data;
3 using System.Linq.Expressions;
4
5 namespace BLToolkit.Data.Linq.Builder
6 {
7 using Data.Sql;
8
9 public abstract class SequenceContextBase : IBuildContext
10 {
11 protected SequenceContextBase(IBuildContext parent, IBuildContext sequence, LambdaExpression lambda)
12 {
13 Parent = parent;
14 Sequence = sequence;
15 Builder = sequence.Builder;
16 Lambda = lambda;
17 SqlQuery = sequence.SqlQuery;
18
19 Sequence.Parent = this;
20
21 Builder.Contexts.Add(this);
22 }
23
24 #if DEBUG
25 [CLSCompliant(false)]
26 public string _sqlQueryText { get { return SqlQuery == null ? "" : SqlQuery.SqlText; } }
27 #endif
28
29 public IBuildContext Parent { get; set; }
30 public IBuildContext Sequence { get; set; }
31 public ExpressionBuilder Builder { get; set; }
32 public LambdaExpression Lambda { get; set; }
33 public SqlQuery SqlQuery { get; set; }
34
35 Expression IBuildContext.Expression { get { return Lambda; } }
36
37 public virtual void BuildQuery<T>(Query<T> query, ParameterExpression queryParameter)
38 {
39 var expr = BuildExpression(null, 0);
40 var mapper = Builder.BuildMapper<T>(expr);
41
42 query.SetQuery(mapper.Compile());
43 }
44
45 public abstract Expression BuildExpression(Expression expression, int level);
46 public abstract SqlInfo[] ConvertToSql (Expression expression, int level, ConvertFlags flags);
47 public abstract SqlInfo[] ConvertToIndex (Expression expression, int level, ConvertFlags flags);
48 public abstract IsExpressionResult IsExpression (Expression expression, int level, RequestFor requestFlag);
49 public abstract IBuildContext GetContext (Expression expression, int level, BuildInfo buildInfo);
50
51 public virtual int ConvertToParentIndex(int index, IBuildContext context)
52 {
53 return Parent == null ? index : Parent.ConvertToParentIndex(index, context);
54 }
55
56 public virtual void SetAlias(string alias)
57 {
58 }
59
60 public virtual ISqlExpression GetSubQuery(IBuildContext context)
61 {
62 return null;
63 }
64
65 protected bool IsSubQuery()
66 {
67 for (var p = Parent; p != null; p = p.Parent)
68 if (p.IsExpression(null, 0, RequestFor.SubQuery).Result)
69 return true;
70 return false;
71 }
72 }
73 }