annotate Source/Data/Linq/Builder/SequenceContextBase.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq.Expressions;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 namespace BLToolkit.Data.Linq.Builder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using Data.Sql;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public abstract class SequenceContextBase : IBuildContext
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 protected SequenceContextBase(IBuildContext parent, IBuildContext sequence, LambdaExpression lambda)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 Parent = parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 Sequence = sequence;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 Builder = sequence.Builder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 Lambda = lambda;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 SqlQuery = sequence.SqlQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 Sequence.Parent = this;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 Builder.Contexts.Add(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 #if DEBUG
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 [CLSCompliant(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public string _sqlQueryText { get { return SqlQuery == null ? "" : SqlQuery.SqlText; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public IBuildContext Parent { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public IBuildContext Sequence { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public ExpressionBuilder Builder { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public LambdaExpression Lambda { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public SqlQuery SqlQuery { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 Expression IBuildContext.Expression { get { return Lambda; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public virtual void BuildQuery<T>(Query<T> query, ParameterExpression queryParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 var expr = BuildExpression(null, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 var mapper = Builder.BuildMapper<T>(expr);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 query.SetQuery(mapper.Compile());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 public abstract Expression BuildExpression(Expression expression, int level);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 public abstract SqlInfo[] ConvertToSql (Expression expression, int level, ConvertFlags flags);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 public abstract SqlInfo[] ConvertToIndex (Expression expression, int level, ConvertFlags flags);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 public abstract IsExpressionResult IsExpression (Expression expression, int level, RequestFor requestFlag);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public abstract IBuildContext GetContext (Expression expression, int level, BuildInfo buildInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public virtual int ConvertToParentIndex(int index, IBuildContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 return Parent == null ? index : Parent.ConvertToParentIndex(index, context);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public virtual void SetAlias(string alias)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 public virtual ISqlExpression GetSubQuery(IBuildContext context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 return null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 protected bool IsSubQuery()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 for (var p = Parent; p != null; p = p.Parent)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 if (p.IsExpression(null, 0, RequestFor.SubQuery).Result)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 }