annotate Source/Data/Sql/SqlProvider/MsSql2000SqlProvider.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
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.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 Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public class MsSql2000SqlProvider : MsSqlSqlProvider
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 protected override string FirstFormat { get { return "TOP {0}"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public override bool IsSkipSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public override bool IsApplyJoinSupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public override bool TakeAcceptsParameter { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public override bool IsCountSubQuerySupported { get { return false; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public override ISqlExpression ConvertExpression(ISqlExpression expr)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 expr = base.ConvertExpression(expr);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 if (expr is SqlFunction)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 var func = (SqlFunction)expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 switch (Type.GetTypeCode(TypeHelper.GetUnderlyingType(func.SystemType)))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 case TypeCode.DateTime :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 if (func.Name == "Convert")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 var type1 = TypeHelper.GetUnderlyingType(func.Parameters[1].SystemType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 if (IsTimeDataType(func.Parameters[0]))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 func.SystemType, "Cast(Convert(Char, {0}, 114) as DateTime)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 if (func.Parameters[1].SystemType == typeof(string))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 return func.Parameters[1];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 func.SystemType, "Convert(Char, {0}, 114)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 if (IsDateDataType(func.Parameters[0], "Datetime"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 return new SqlExpression(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 func.SystemType, "Cast(Floor(Cast({0} as Float)) as DateTime)", Precedence.Primary, func.Parameters[1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 if (func.Parameters.Length == 2 && func.Parameters[0] is SqlDataType && func.Parameters[0] == SqlDataType.DateTime)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 return new SqlFunction(func.SystemType, func.Name, func.Precedence, func.Parameters[0], func.Parameters[1], new SqlValue(120));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 return expr;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 protected override void BuildFunction(StringBuilder sb, SqlFunction func)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 func = ConvertFunctionParameters(func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 base.BuildFunction(sb, func);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 protected override ISqlProvider CreateSqlProvider()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 return new MsSql2000SqlProvider();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 protected override void BuildDataType(System.Text.StringBuilder sb, SqlDataType type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 switch (type.SqlDbType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 #if !MONO
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 case SqlDbType.DateTimeOffset :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 case SqlDbType.DateTime2 :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 #endif
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 case SqlDbType.Time :
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 case SqlDbType.Date : sb.Append("DateTime"); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 default : base.BuildDataType(sb, type); break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }