annotate Source/Data/Sql/SqlProvider/InformixSqlProvider.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
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.Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 namespace BLToolkit.Data.Sql.SqlProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 public class InformixSqlProvider : BasicSqlProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 public override int CommandCount(SqlQuery sqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 return sqlQuery.IsInsert && sqlQuery.Insert.WithIdentity ? 2 : 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 protected override void BuildCommand(int commandNumber, StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 sb.AppendLine("SELECT DBINFO('sqlca.sqlerrd1') FROM systables where tabid = 1");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 protected override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 return new InformixSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public override int BuildSql(int commandNumber, SqlQuery sqlQuery, StringBuilder sb, int indent, int nesting, bool skipAlias)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 var n = base.BuildSql(commandNumber, sqlQuery, sb, indent, nesting, skipAlias);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 .Replace("NULL IS NOT NULL", "1=0")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 .Replace("NULL IS NULL", "1=1");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 return n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 protected override void BuildSelectClause(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 if (SqlQuery.From.Tables.Count == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 AppendIndent(sb).Append("SELECT FIRST 1").AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 BuildColumns(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 AppendIndent(sb).Append("FROM SYSTABLES").AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 base.BuildSelectClause(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public override bool IsSubQueryTakeSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public override bool IsInsertOrUpdateSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 public override bool IsGroupByExpressionSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 protected override string FirstFormat { get { return "FIRST {0}"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 protected override string SkipFormat { get { return "SKIP {0}"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 protected override void BuildLikePredicate(StringBuilder sb, SqlQuery.Predicate.Like predicate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 if (predicate.IsNot)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 sb.Append("NOT ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 var precedence = GetPrecedence(predicate);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 BuildExpression(sb, precedence, predicate.Expr1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 sb.Append(" LIKE ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 BuildExpression(sb, precedence, predicate.Expr2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 if (predicate.Escape != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 sb.Append(" ESCAPE ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 BuildExpression(sb, precedence, predicate.Escape);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public override ISqlExpression ConvertExpression(ISqlExpression expr)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 expr = base.ConvertExpression(expr);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 if (expr is SqlBinaryExpression)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 var be = (SqlBinaryExpression)expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 switch (be.Operation)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 case "%": return new SqlFunction(be.SystemType, "Mod", be.Expr1, be.Expr2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 case "&": return new SqlFunction(be.SystemType, "BitAnd", be.Expr1, be.Expr2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 case "|": return new SqlFunction(be.SystemType, "BitOr", be.Expr1, be.Expr2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 case "^": return new SqlFunction(be.SystemType, "BitXor", be.Expr1, be.Expr2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 case "+": return be.SystemType == typeof(string)? new SqlBinaryExpression(be.SystemType, be.Expr1, "||", be.Expr2, be.Precedence): expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 else if (expr is SqlFunction)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 var func = (SqlFunction)expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 switch (func.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 case "Coalesce" : return new SqlFunction(func.SystemType, "Nvl", func.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 case "Convert" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 var par0 = func.Parameters[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 var par1 = func.Parameters[1];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 switch (Type.GetTypeCode(TypeHelper.GetUnderlyingType(func.SystemType)))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 case TypeCode.String : return new SqlFunction(func.SystemType, "To_Char", func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 case TypeCode.Boolean :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 var ex = AlternativeConvertToBoolean(func, 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 if (ex != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 return ex;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 case TypeCode.UInt64:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 if (TypeHelper.IsFloatType(func.Parameters[1].SystemType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 par1 = new SqlFunction(func.SystemType, "Floor", func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 case TypeCode.DateTime :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 if (IsDateDataType(func.Parameters[0], "Date"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 if (func.Parameters[1].SystemType == typeof(string))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 return new SqlFunction(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 func.SystemType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 "Date",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 new SqlFunction(func.SystemType, "To_Date", func.Parameters[1], new SqlValue("%Y-%m-%d")));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 return new SqlFunction(func.SystemType, "Date", func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 if (IsTimeDataType(func.Parameters[0]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 return new SqlExpression(func.SystemType, "Cast(Extend({0}, hour to second) as Char(8))", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 return new SqlFunction(func.SystemType, "To_Date", func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 if (TypeHelper.GetUnderlyingType(func.SystemType) == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 goto case TypeCode.DateTime;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 return new SqlExpression(func.SystemType, "Cast({0} as {1})", Precedence.Primary, par1, par0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 case "Quarter" : return Inc(Div(Dec(new SqlFunction(func.SystemType, "Month", func.Parameters)), 3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 case "WeekDay" : return Inc(new SqlFunction(func.SystemType, "weekDay", func.Parameters));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 case "DayOfYear":
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 Inc(Sub<int>(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 new SqlFunction(null, "Mdy",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 new SqlFunction(null, "Month", func.Parameters),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 new SqlFunction(null, "Day", func.Parameters),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 new SqlFunction(null, "Year", func.Parameters)),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 new SqlFunction(null, "Mdy",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 new SqlValue(1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 new SqlValue(1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 new SqlFunction(null, "Year", func.Parameters))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 case "Week" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 func.SystemType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 "((Extend({0}, year to day) - (Mdy(12, 31 - WeekDay(Mdy(1, 1, year({0}))), Year({0}) - 1) + Interval(1) day to day)) / 7 + Interval(1) day to day)::char(10)::int",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 func.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 case "Hour" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 case "Minute" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 case "Second" : return new SqlExpression(func.SystemType, string.Format("({{0}}::datetime {0} to {0})::char(3)::int", func.Name), func.Parameters);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 return expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 protected override void BuildFunction(StringBuilder sb, SqlFunction func)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 func = ConvertFunctionParameters(func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 base.BuildFunction(sb, func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 public virtual object ConvertBooleanValue(bool value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 return value ? 't' : 'f';
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 public override void BuildValue(StringBuilder sb, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 if (value is bool || value is bool?)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 sb.Append("'").Append(ConvertBooleanValue((bool)value)).Append("'");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 base.BuildValue(sb, value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 protected override void BuildDataType(StringBuilder sb, SqlDataType type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 switch (type.SqlDbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 case SqlDbType.TinyInt : sb.Append("SmallInt"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 case SqlDbType.SmallMoney : sb.Append("Decimal(10,4)"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 default : base.BuildDataType(sb, type); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 static void SetQueryParameter(IQueryElement element)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 if (element.ElementType == QueryElementType.SqlParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 ((SqlParameter)element).IsQueryParameter = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 public override SqlQuery Finalize(SqlQuery sqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 CheckAliases(sqlQuery, int.MaxValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 new QueryVisitor().Visit(sqlQuery.Select, SetQueryParameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 //if (sqlQuery.QueryType == QueryType.InsertOrUpdate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 //{
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 // foreach (var key in sqlQuery.Insert.Items)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 // new QueryVisitor().Visit(key.Expression, SetQueryParameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 // foreach (var key in sqlQuery.Update.Items)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 // new QueryVisitor().Visit(key.Expression, SetQueryParameter);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 //}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 sqlQuery = base.Finalize(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 switch (sqlQuery.QueryType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 case QueryType.Delete :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 sqlQuery = GetAlternativeDelete(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 sqlQuery.From.Tables[0].Alias = "$";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 case QueryType.Update :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 sqlQuery = GetAlternativeUpdate(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 return sqlQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 protected override void BuildFromClause(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 if (!SqlQuery.IsUpdate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 base.BuildFromClause(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 case ConvertType.NameToQueryParameter : return "?";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 case ConvertType.NameToCommandParameter :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 case ConvertType.NameToSprocParameter : return ":" + value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 case ConvertType.SprocParameterToName :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 var str = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 return (str.Length > 0 && str[0] == ':')? str.Substring(1): str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 //protected override void BuildInsertOrUpdateQuery(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 //{
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 // BuildInsertOrUpdateQueryAsMerge(sb, "FROM SYSTABLES");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 //}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 }