Mercurial > pub > bltoolkit
comparison Source/Data/Sql/SqlField.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 using DataAccess; | |
8 using Mapping; | |
9 | |
10 public class SqlField : IChild<ISqlTableSource>, ISqlExpression | |
11 { | |
12 public SqlField() | |
13 { | |
14 } | |
15 | |
16 public SqlField(SqlField field) | |
17 : this(field.SystemType, field.Name, field.PhysicalName, field.Nullable, field.PrimaryKeyOrder, field._nonUpdatableAttribute, field.MemberMapper) | |
18 { | |
19 } | |
20 | |
21 public SqlField( | |
22 Type systemType, | |
23 string name, | |
24 string physicalName, | |
25 bool nullable, | |
26 int pkOrder, | |
27 NonUpdatableAttribute nonUpdatableAttribute, | |
28 MemberMapper memberMapper) | |
29 { | |
30 SystemType = systemType; | |
31 Alias = name.Replace('.', '_'); | |
32 Name = name; | |
33 Nullable = nullable; | |
34 PrimaryKeyOrder = pkOrder; | |
35 _memberMapper = memberMapper; | |
36 _physicalName = physicalName; | |
37 _nonUpdatableAttribute = nonUpdatableAttribute; | |
38 } | |
39 | |
40 public Type SystemType { get; set; } | |
41 public string Alias { get; set; } | |
42 public string Name { get; set; } | |
43 public bool Nullable { get; set; } | |
44 public int PrimaryKeyOrder { get; set; } | |
45 public ISqlTableSource Table { get; private set; } | |
46 | |
47 readonly MemberMapper _memberMapper; | |
48 public MemberMapper MemberMapper | |
49 { | |
50 get { return _memberMapper; } | |
51 } | |
52 | |
53 private string _physicalName; | |
54 public string PhysicalName | |
55 { | |
56 get { return _physicalName ?? Name; } | |
57 set { _physicalName = value; } | |
58 } | |
59 | |
60 public bool IsIdentity { get { return _nonUpdatableAttribute != null && _nonUpdatableAttribute.IsIdentity; } } | |
61 public bool IsInsertable { get { return _nonUpdatableAttribute == null || !_nonUpdatableAttribute.OnInsert; } } | |
62 public bool IsUpdatable { get { return _nonUpdatableAttribute == null || !_nonUpdatableAttribute.OnUpdate; } } | |
63 | |
64 public bool IsPrimaryKey { get { return PrimaryKeyOrder != int.MinValue; } } | |
65 | |
66 readonly NonUpdatableAttribute _nonUpdatableAttribute; | |
67 | |
68 ISqlTableSource IChild<ISqlTableSource>.Parent { get { return Table; } set { Table = value; } } | |
69 | |
70 #region Overrides | |
71 | |
72 #if OVERRIDETOSTRING | |
73 | |
74 public override string ToString() | |
75 { | |
76 return ((IQueryElement)this).ToString(new StringBuilder(), new Dictionary<IQueryElement,IQueryElement>()).ToString(); | |
77 } | |
78 | |
79 #endif | |
80 | |
81 #endregion | |
82 | |
83 #region ISqlExpression Members | |
84 | |
85 public bool CanBeNull() | |
86 { | |
87 return Nullable; | |
88 } | |
89 | |
90 public bool Equals(ISqlExpression other, Func<ISqlExpression,ISqlExpression,bool> comparer) | |
91 { | |
92 return this == other; | |
93 } | |
94 | |
95 public int Precedence | |
96 { | |
97 get { return Sql.Precedence.Primary; } | |
98 } | |
99 | |
100 #endregion | |
101 | |
102 #region ISqlExpressionWalkable Members | |
103 | |
104 ISqlExpression ISqlExpressionWalkable.Walk(bool skipColumns, Func<ISqlExpression,ISqlExpression> func) | |
105 { | |
106 return func(this); | |
107 } | |
108 | |
109 #endregion | |
110 | |
111 #region IEquatable<ISqlExpression> Members | |
112 | |
113 bool IEquatable<ISqlExpression>.Equals(ISqlExpression other) | |
114 { | |
115 return this == other; | |
116 } | |
117 | |
118 #endregion | |
119 | |
120 #region ICloneableElement Members | |
121 | |
122 public ICloneableElement Clone(Dictionary<ICloneableElement, ICloneableElement> objectTree, Predicate<ICloneableElement> doClone) | |
123 { | |
124 if (!doClone(this)) | |
125 return this; | |
126 | |
127 Table.Clone(objectTree, doClone); | |
128 return objectTree[this]; | |
129 } | |
130 | |
131 #endregion | |
132 | |
133 #region IQueryElement Members | |
134 | |
135 public QueryElementType ElementType { get { return QueryElementType.SqlField; } } | |
136 | |
137 StringBuilder IQueryElement.ToString(StringBuilder sb, Dictionary<IQueryElement,IQueryElement> dic) | |
138 { | |
139 return sb | |
140 .Append('t') | |
141 .Append(Table.SourceID) | |
142 .Append('.') | |
143 .Append(Name); | |
144 } | |
145 | |
146 #endregion | |
147 } | |
148 } |