Mercurial > pub > bltoolkit
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 } |