Mercurial > pub > bltoolkit
comparison Source/Data/Sql/SqlBinaryExpression.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 using System.Collections.Generic; | |
| 3 using System.Diagnostics; | |
| 4 using System.Text; | |
| 5 | |
| 6 namespace BLToolkit.Data.Sql | |
| 7 { | |
| 8 [Serializable, DebuggerDisplay("SQL = {SqlText}")] | |
| 9 public class SqlBinaryExpression : ISqlExpression | |
| 10 { | |
| 11 public SqlBinaryExpression(Type systemType, ISqlExpression expr1, string operation, ISqlExpression expr2, int precedence) | |
| 12 { | |
| 13 if (expr1 == null) throw new ArgumentNullException("expr1"); | |
| 14 if (operation == null) throw new ArgumentNullException("operation"); | |
| 15 if (expr2 == null) throw new ArgumentNullException("expr2"); | |
| 16 | |
| 17 Expr1 = expr1; | |
| 18 Operation = operation; | |
| 19 Expr2 = expr2; | |
| 20 SystemType = systemType; | |
| 21 Precedence = precedence; | |
| 22 } | |
| 23 | |
| 24 public SqlBinaryExpression(Type systemType, ISqlExpression expr1, string operation, ISqlExpression expr2) | |
| 25 : this(systemType, expr1, operation, expr2, Sql.Precedence.Unknown) | |
| 26 { | |
| 27 } | |
| 28 | |
| 29 public ISqlExpression Expr1 { get; internal set; } | |
| 30 public string Operation { get; private set; } | |
| 31 public ISqlExpression Expr2 { get; internal set; } | |
| 32 public Type SystemType { get; private set; } | |
| 33 | |
| 34 public int Precedence { get; private set; } | |
| 35 | |
| 36 #region Overrides | |
| 37 | |
| 38 public string SqlText { get { return ToString(); } } | |
| 39 | |
| 40 #if OVERRIDETOSTRING | |
| 41 | |
| 42 public override string ToString() | |
| 43 { | |
| 44 return ((IQueryElement)this).ToString(new StringBuilder(), new Dictionary<IQueryElement,IQueryElement>()).ToString(); | |
| 45 } | |
| 46 | |
| 47 #endif | |
| 48 | |
| 49 #endregion | |
| 50 | |
| 51 #region ISqlExpressionWalkable Members | |
| 52 | |
| 53 [Obsolete] | |
| 54 ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func<ISqlExpression,ISqlExpression> func) | |
| 55 { | |
| 56 Expr1 = Expr1.Walk(skipColumns, func); | |
| 57 Expr2 = Expr2.Walk(skipColumns, func); | |
| 58 | |
| 59 return func(this); | |
| 60 } | |
| 61 | |
| 62 #endregion | |
| 63 | |
| 64 #region IEquatable<ISqlExpression> Members | |
| 65 | |
| 66 bool IEquatable<ISqlExpression>.Equals(ISqlExpression other) | |
| 67 { | |
| 68 return Equals(other, SqlExpression.DefaultComparer); | |
| 69 } | |
| 70 | |
| 71 #endregion | |
| 72 | |
| 73 #region ISqlExpression Members | |
| 74 | |
| 75 public bool CanBeNull() | |
| 76 { | |
| 77 return Expr1.CanBeNull() || Expr2.CanBeNull(); | |
| 78 } | |
| 79 | |
| 80 public bool Equals(ISqlExpression other, Func<ISqlExpression,ISqlExpression,bool> comparer) | |
| 81 { | |
| 82 if (this == other) | |
| 83 return true; | |
| 84 | |
| 85 var expr = other as SqlBinaryExpression; | |
| 86 | |
| 87 return | |
| 88 expr != null && | |
| 89 Operation == expr.Operation && | |
| 90 SystemType == expr.SystemType && | |
| 91 Expr1.Equals(expr.Expr1, comparer) && | |
| 92 Expr2.Equals(expr.Expr2, comparer) && | |
| 93 comparer(this, other); | |
| 94 } | |
| 95 | |
| 96 #endregion | |
| 97 | |
| 98 #region ICloneableElement Members | |
| 99 | |
| 100 public ICloneableElement Clone(Dictionary<ICloneableElement, ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) | |
| 101 { | |
| 102 if (!doClone(this)) | |
| 103 return this; | |
| 104 | |
| 105 ICloneableElement clone; | |
| 106 | |
| 107 if (!objectTree.TryGetValue(this, out clone)) | |
| 108 { | |
| 109 objectTree.Add(this, clone = new SqlBinaryExpression( | |
| 110 SystemType, | |
| 111 (ISqlExpression)Expr1.Clone(objectTree, doClone), | |
| 112 Operation, | |
| 113 (ISqlExpression)Expr2.Clone(objectTree, doClone), | |
| 114 Precedence)); | |
| 115 } | |
| 116 | |
| 117 return clone; | |
| 118 } | |
| 119 | |
| 120 #endregion | |
| 121 | |
| 122 #region IQueryElement Members | |
| 123 | |
| 124 public QueryElementType ElementType { get { return QueryElementType.SqlBinaryExpression; } } | |
| 125 | |
| 126 StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) | |
| 127 { | |
| 128 Expr1 | |
| 129 .ToString(sb, dic) | |
| 130 .Append(' ') | |
| 131 .Append(Operation) | |
| 132 .Append(' '); | |
| 133 | |
| 134 return Expr2.ToString(sb, dic); | |
| 135 } | |
| 136 | |
| 137 #endregion | |
| 138 } | |
| 139 } |
