0
|
1 using System;
|
|
2 using System.Data;
|
|
3 using System.Text;
|
|
4
|
|
5 namespace BLToolkit.Data.Sql.SqlProvider
|
|
6 {
|
|
7 using Reflection;
|
|
8
|
|
9 public class MsSql2000SqlProvider : MsSqlSqlProvider
|
|
10 {
|
|
11 protected override string FirstFormat { get { return "TOP {0}"; } }
|
|
12
|
|
13 public override bool IsSkipSupported { get { return false; } }
|
|
14 public override bool IsApplyJoinSupported { get { return false; } }
|
|
15 public override bool TakeAcceptsParameter { get { return false; } }
|
|
16 public override bool IsCountSubQuerySupported { get { return false; } }
|
|
17
|
|
18 public override ISqlExpression ConvertExpression(ISqlExpression expr)
|
|
19 {
|
|
20 expr = base.ConvertExpression(expr);
|
|
21
|
|
22 if (expr is SqlFunction)
|
|
23 {
|
|
24 var func = (SqlFunction)expr;
|
|
25
|
|
26 switch (Type.GetTypeCode(TypeHelper.GetUnderlyingType(func.SystemType)))
|
|
27 {
|
|
28 case TypeCode.DateTime :
|
|
29
|
|
30 if (func.Name == "Convert")
|
|
31 {
|
|
32 var type1 = TypeHelper.GetUnderlyingType(func.Parameters[1].SystemType);
|
|
33
|
|
34 if (IsTimeDataType(func.Parameters[0]))
|
|
35 {
|
|
36 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
|
|
37 return new SqlExpression(
|
|
38 func.SystemType, "Cast(Convert(Char, {0}, 114) as DateTime)", Precedence.Primary, func.Parameters[1]);
|
|
39
|
|
40 if (func.Parameters[1].SystemType == typeof(string))
|
|
41 return func.Parameters[1];
|
|
42
|
|
43 return new SqlExpression(
|
|
44 func.SystemType, "Convert(Char, {0}, 114)", Precedence.Primary, func.Parameters[1]);
|
|
45 }
|
|
46
|
|
47 if (type1 == typeof(DateTime) || type1 == typeof(DateTimeOffset))
|
|
48 {
|
|
49 if (IsDateDataType(func.Parameters[0], "Datetime"))
|
|
50 return new SqlExpression(
|
|
51 func.SystemType, "Cast(Floor(Cast({0} as Float)) as DateTime)", Precedence.Primary, func.Parameters[1]);
|
|
52 }
|
|
53
|
|
54 if (func.Parameters.Length == 2 && func.Parameters[0] is SqlDataType && func.Parameters[0] == SqlDataType.DateTime)
|
|
55 return new SqlFunction(func.SystemType, func.Name, func.Precedence, func.Parameters[0], func.Parameters[1], new SqlValue(120));
|
|
56 }
|
|
57
|
|
58 break;
|
|
59 }
|
|
60 }
|
|
61
|
|
62 return expr;
|
|
63 }
|
|
64
|
|
65 protected override void BuildFunction(StringBuilder sb, SqlFunction func)
|
|
66 {
|
|
67 func = ConvertFunctionParameters(func);
|
|
68 base.BuildFunction(sb, func);
|
|
69 }
|
|
70
|
|
71 protected override ISqlProvider CreateSqlProvider()
|
|
72 {
|
|
73 return new MsSql2000SqlProvider();
|
|
74 }
|
|
75
|
|
76 protected override void BuildDataType(System.Text.StringBuilder sb, SqlDataType type)
|
|
77 {
|
|
78 switch (type.SqlDbType)
|
|
79 {
|
|
80 #if !MONO
|
|
81 case SqlDbType.DateTimeOffset :
|
|
82 case SqlDbType.DateTime2 :
|
|
83 #endif
|
|
84 case SqlDbType.Time :
|
|
85 case SqlDbType.Date : sb.Append("DateTime"); break;
|
|
86 default : base.BuildDataType(sb, type); break;
|
|
87 }
|
|
88 }
|
|
89 }
|
|
90 }
|