Mercurial > pub > bltoolkit
comparison Source/Data/Sql/SqlValue.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.Text; | |
| 4 | |
| 5 namespace BLToolkit.Data.Sql | |
| 6 { | |
| 7 public class SqlValue : SqlValueBase, ISqlExpression | |
| 8 { | |
| 9 public SqlValue(Type systemType, object value) | |
| 10 { | |
| 11 _systemType = systemType; | |
| 12 _value = value; | |
| 13 } | |
| 14 | |
| 15 public SqlValue(object value) | |
| 16 { | |
| 17 _value = value; | |
| 18 | |
| 19 if (value != null) | |
| 20 _systemType = value.GetType(); | |
| 21 } | |
| 22 | |
| 23 public override object Value | |
| 24 { | |
| 25 get | |
| 26 { | |
| 27 var rv = base.Value; | |
| 28 | |
| 29 if (rv != null && rv.GetType() != _systemType) | |
| 30 { | |
| 31 _systemType = rv.GetType(); | |
| 32 } | |
| 33 | |
| 34 return rv; | |
| 35 } | |
| 36 } | |
| 37 | |
| 38 Type _systemType; public Type SystemType { get { return _systemType; } } | |
| 39 | |
| 40 #region Overrides | |
| 41 | |
| 42 #if OVERRIDETOSTRING | |
| 43 | |
| 44 public override string ToString() | |
| 45 { | |
| 46 return ((IQueryElement)this).ToString(new StringBuilder(), new Dictionary<IQueryElement,IQueryElement>()).ToString(); | |
| 47 } | |
| 48 | |
| 49 #endif | |
| 50 | |
| 51 #endregion | |
| 52 | |
| 53 #region ISqlExpression Members | |
| 54 | |
| 55 public int Precedence | |
| 56 { | |
| 57 get { return Sql.Precedence.Primary; } | |
| 58 } | |
| 59 | |
| 60 #endregion | |
| 61 | |
| 62 #region ISqlExpressionWalkable Members | |
| 63 | |
| 64 ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func<ISqlExpression,ISqlExpression> func) | |
| 65 { | |
| 66 return func(this); | |
| 67 } | |
| 68 | |
| 69 #endregion | |
| 70 | |
| 71 #region IEquatable<ISqlExpression> Members | |
| 72 | |
| 73 bool IEquatable<ISqlExpression>.Equals(ISqlExpression other) | |
| 74 { | |
| 75 if (this == other) | |
| 76 return true; | |
| 77 | |
| 78 var value = other as SqlValue; | |
| 79 return | |
| 80 value != null && | |
| 81 _systemType == value._systemType && | |
| 82 (_value == null && value._value == null || _value != null && _value.Equals(value._value)); | |
| 83 } | |
| 84 | |
| 85 #endregion | |
| 86 | |
| 87 #region ISqlExpression Members | |
| 88 | |
| 89 public bool CanBeNull() | |
| 90 { | |
| 91 return Value == null; | |
| 92 } | |
| 93 | |
| 94 public bool Equals(ISqlExpression other, Func<ISqlExpression, ISqlExpression, bool> comparer) | |
| 95 { | |
| 96 return ((ISqlExpression)this).Equals(other) && comparer(this, other); | |
| 97 } | |
| 98 | |
| 99 #endregion | |
| 100 | |
| 101 #region ICloneableElement Members | |
| 102 | |
| 103 public ICloneableElement Clone(Dictionary<ICloneableElement, ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) | |
| 104 { | |
| 105 if (!doClone(this)) | |
| 106 return this; | |
| 107 | |
| 108 ICloneableElement clone; | |
| 109 | |
| 110 if (!objectTree.TryGetValue(this, out clone)) | |
| 111 objectTree.Add(this, clone = new SqlValue(_systemType, _value)); | |
| 112 | |
| 113 return clone; | |
| 114 } | |
| 115 | |
| 116 #endregion | |
| 117 | |
| 118 #region IQueryElement Members | |
| 119 | |
| 120 public QueryElementType ElementType { get { return QueryElementType.SqlValue; } } | |
| 121 | |
| 122 StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) | |
| 123 { | |
| 124 return | |
| 125 Value == null ? | |
| 126 sb.Append("NULL") : | |
| 127 Value is string ? | |
| 128 sb | |
| 129 .Append('\'') | |
| 130 .Append(Value.ToString().Replace("\'", "''")) | |
| 131 .Append('\'') | |
| 132 : | |
| 133 sb.Append(Value); | |
| 134 } | |
| 135 | |
| 136 #endregion | |
| 137 } | |
| 138 } |
