Mercurial > pub > bltoolkit
view Source/Data/Sql/SqlValue.cs @ 9:1e85f66cf767 default tip
update bltoolkit
author | nickolay |
---|---|
date | Thu, 05 Apr 2018 20:53:26 +0300 |
parents | f990fcb411a9 |
children |
line wrap: on
line source
using System; using System.Collections.Generic; using System.Text; namespace BLToolkit.Data.Sql { public class SqlValue : SqlValueBase, ISqlExpression { public SqlValue(Type systemType, object value) { _systemType = systemType; _value = value; } public SqlValue(object value) { _value = value; if (value != null) _systemType = value.GetType(); } public override object Value { get { var rv = base.Value; if (rv != null && rv.GetType() != _systemType) { _systemType = rv.GetType(); } return rv; } } Type _systemType; public Type SystemType { get { return _systemType; } } #region Overrides #if OVERRIDETOSTRING public override string ToString() { return ((IQueryElement)this).ToString(new StringBuilder(), new Dictionary<IQueryElement,IQueryElement>()).ToString(); } #endif #endregion #region ISqlExpression Members public int Precedence { get { return Sql.Precedence.Primary; } } #endregion #region ISqlExpressionWalkable Members ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func<ISqlExpression,ISqlExpression> func) { return func(this); } #endregion #region IEquatable<ISqlExpression> Members bool IEquatable<ISqlExpression>.Equals(ISqlExpression other) { if (this == other) return true; var value = other as SqlValue; return value != null && _systemType == value._systemType && (_value == null && value._value == null || _value != null && _value.Equals(value._value)); } #endregion #region ISqlExpression Members public bool CanBeNull() { return Value == null; } public bool Equals(ISqlExpression other, Func<ISqlExpression, ISqlExpression, bool> comparer) { return ((ISqlExpression)this).Equals(other) && comparer(this, other); } #endregion #region ICloneableElement Members public ICloneableElement Clone(Dictionary<ICloneableElement, ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) { if (!doClone(this)) return this; ICloneableElement clone; if (!objectTree.TryGetValue(this, out clone)) objectTree.Add(this, clone = new SqlValue(_systemType, _value)); return clone; } #endregion #region IQueryElement Members public QueryElementType ElementType { get { return QueryElementType.SqlValue; } } StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) { return Value == null ? sb.Append("NULL") : Value is string ? sb .Append('\'') .Append(Value.ToString().Replace("\'", "''")) .Append('\'') : sb.Append(Value); } #endregion } }