annotate Source/Data/Sql/SqlProvider/SqlCeSqlProvider.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 SqlCeSqlProvider : BasicSqlProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 const int Version = 4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public override bool IsSkipSupported { get { return Version == 4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public override bool IsTakeSupported { get { return Version == 4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public override bool IsSubQueryTakeSupported { get { return Version == 4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public override bool IsSubQueryColumnSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public override bool IsCountSubQuerySupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public override bool IsApplyJoinSupported { get { return true; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public override bool IsInsertOrUpdateSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 protected override string FirstFormat { get { return SqlQuery.Select.SkipValue == null ? "TOP ({0})" : null; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 protected override string LimitFormat { get { return SqlQuery.Select.SkipValue != null ? "FETCH NEXT {0} ROWS ONLY" : null; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 protected override string OffsetFormat { get { return "OFFSET {0} ROWS"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 protected override bool OffsetFirst { get { return true; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public override int CommandCount(SqlQuery sqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 return sqlQuery.IsInsert && sqlQuery.Insert.WithIdentity ? 2 : 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 protected override void BuildCommand(int commandNumber, StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 sb.AppendLine("SELECT @@IDENTITY");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 protected override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 return new SqlCeSqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public override ISqlExpression ConvertExpression(ISqlExpression expr)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 expr = base.ConvertExpression(expr);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 if (expr is SqlBinaryExpression)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 var be = (SqlBinaryExpression)expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 switch (be.Operation)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 case "%":
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 return TypeHelper.IsIntegerType(be.Expr1.SystemType)?
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 be :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 new SqlBinaryExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 typeof(int),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 new SqlFunction(typeof(int), "Convert", SqlDataType.Int32, be.Expr1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 be.Operation,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 be.Expr2,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 be.Precedence);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 else if (expr is SqlFunction)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 var func = (SqlFunction)expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 switch (func.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 case "Convert" :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 switch (Type.GetTypeCode(TypeHelper.GetUnderlyingType(func.SystemType)))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 case TypeCode.UInt64 :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 if (TypeHelper.IsFloatType(func.Parameters[1].SystemType))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 return new SqlFunction(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 func.SystemType,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 func.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 func.Precedence,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 func.Parameters[0],
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 new SqlFunction(func.SystemType, "Floor", func.Parameters[1]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 case TypeCode.DateTime :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 var type1 = TypeHelper.GetUnderlyingType(func.Parameters[1].SystemType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 if (IsTimeDataType(func.Parameters[0]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 func.SystemType, "Cast(Convert(NChar, {0}, 114) as DateTime)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 if (func.Parameters[1].SystemType == typeof(string))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 return func.Parameters[1];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 func.SystemType, "Convert(NChar, {0}, 114)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 if (IsDateDataType(func.Parameters[0], "Datetime"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 func.SystemType, "Cast(Floor(Cast({0} as Float)) as DateTime)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 return expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 protected override void BuildFunction(StringBuilder sb, SqlFunction func)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 func = ConvertFunctionParameters(func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 base.BuildFunction(sb, func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 public override SqlQuery Finalize(SqlQuery sqlQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 sqlQuery = base.Finalize(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 new QueryVisitor().Visit(sqlQuery.Select, element =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 if (element.ElementType == QueryElementType.SqlParameter)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 ((SqlParameter)element).IsQueryParameter = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 sqlQuery.IsParameterDependent = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 switch (sqlQuery.QueryType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 case QueryType.Delete :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 sqlQuery = GetAlternativeDelete(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 sqlQuery.From.Tables[0].Alias = "$";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 case QueryType.Update :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 sqlQuery = GetAlternativeUpdate(sqlQuery);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 return sqlQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 protected override void BuildDataType(StringBuilder sb, SqlDataType type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 switch (type.SqlDbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 case SqlDbType.Char : base.BuildDataType(sb, new SqlDataType(SqlDbType.NChar, type.Length)); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 case SqlDbType.VarChar : base.BuildDataType(sb, new SqlDataType(SqlDbType.NVarChar, type.Length)); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 case SqlDbType.SmallMoney : sb.Append("Decimal(10,4)"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 #if !MONO
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 case SqlDbType.DateTime2 :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 case SqlDbType.Time :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 case SqlDbType.Date :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 case SqlDbType.SmallDateTime : sb.Append("DateTime"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 default : base.BuildDataType(sb, type); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 protected override void BuildFromClause(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 if (!SqlQuery.IsUpdate)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 base.BuildFromClause(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 protected override void BuildOrderByClause(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 if (SqlQuery.OrderBy.Items.Count == 0 && SqlQuery.Select.SkipValue != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 AppendIndent(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 sb.Append("ORDER BY").AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 Indent++;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 AppendIndent(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 BuildExpression(sb, SqlQuery.Select.Columns[0].Expression);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 sb.AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 Indent--;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 base.BuildOrderByClause(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 protected override void BuildColumnExpression(StringBuilder sb, ISqlExpression expr, string alias, ref bool addAlias)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 var wrap = false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 if (expr.SystemType == typeof(bool))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 if (expr is SqlQuery.SearchCondition)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 wrap = true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 var ex = expr as SqlExpression;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 wrap = ex != null && ex.Expr == "{0}" && ex.Parameters.Length == 1 && ex.Parameters[0] is SqlQuery.SearchCondition;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 if (wrap) sb.Append("CASE WHEN ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 base.BuildColumnExpression(sb, expr, alias, ref addAlias);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 if (wrap) sb.Append(" THEN 1 ELSE 0 END");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 public override object Convert(object value, ConvertType convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 switch (convertType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 case ConvertType.NameToQueryParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 case ConvertType.NameToCommandParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 case ConvertType.NameToSprocParameter:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 return "@" + value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 case ConvertType.NameToQueryField:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 case ConvertType.NameToQueryFieldAlias:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 case ConvertType.NameToQueryTableAlias:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 var name = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 if (name.Length > 0 && name[0] == '[')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 return "[" + value + "]";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 case ConvertType.NameToDatabase:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 case ConvertType.NameToOwner:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 case ConvertType.NameToQueryTable:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 var name = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 if (name.Length > 0 && name[0] == '[')
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 if (name.IndexOf('.') > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 value = string.Join("].[", name.Split('.'));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 return "[" + value + "]";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 case ConvertType.SprocParameterToName:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 var str = value.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 return str.Length > 0 && str[0] == '@'? str.Substring(1): str;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }