annotate Extensions/JointureAddOn/DataAccess/FullSqlQueryBase.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using System.Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Aspects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using BLToolkit.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 namespace BLToolkit.DataAccess
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public abstract class FullSqlQueryBase : SqlQueryBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 private readonly bool _ignoreLazyLoad;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 #region Constructors
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 protected FullSqlQueryBase(DbManager dbManager, bool ignoreLazyLoad = false, MappingOrder mappingOrder = MappingOrder.ByColumnIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 : base(dbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 dbManager.MappingSchema = new FullMappingSchema(dbManager, mappingOrder: mappingOrder);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 _ignoreLazyLoad = ignoreLazyLoad;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 #region Overrides
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 [NoInterception]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 protected override SqlQueryInfo CreateSqlText(DbManager db, Type type, string actionName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 switch (actionName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 case "SelectByKey":
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 return CreateSelectFullByKeySqlText(db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 case "SelectAll":
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 return CreateSelectAllFullSqlText(db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 return base.CreateSqlText(db, type, actionName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 protected override void AppendTableName(StringBuilder sb, DbManager db, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 var database = GetDatabaseName(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 var owner = GetOwnerName(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 var name = base.GetTableName(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 db.DataProvider.CreateSqlProvider().BuildTableName(sb,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 database == null ? null : db.DataProvider.Convert(database, ConvertType.NameToDatabase).ToString(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 owner == null ? null : db.DataProvider.Convert(owner, ConvertType.NameToOwner).ToString(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 name == null ? null : db.DataProvider.Convert(name, ConvertType.NameToQueryTable).ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 //TODO Override OracleSqlProvider in order to avoid this mess...
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 string alias = GetTableName(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 sb.Append(" " + alias);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 sb.AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 protected override string GetTableName(Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 //bool isSet;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 //return MappingSchema.MetadataProvider.GetTableName(type, Extensions, out isSet);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 return type.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 private SqlQueryInfo CreateSelectAllFullSqlText(DbManager db, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 var query = new FullSqlQueryInfo();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 sb.Append("SELECT\n");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 var mainMapper = (FullObjectMapper)db.MappingSchema.GetObjectMapper(type); ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 BuildSelectSQL(mainMapper, sb, db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 sb.Remove(sb.Length - 2, 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 sb.Append("FROM\n\t");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 AppendTableName(sb, db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 AppendJoinTableName(sb, db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 query.QueryText = sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 return query;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 private SqlQueryInfo CreateSelectFullByKeySqlText(DbManager db, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 var query = new FullSqlQueryInfo();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 sb.Append("SELECT\n");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 var mainMapper = (FullObjectMapper)db.MappingSchema.GetObjectMapper(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 BuildSelectSQL(mainMapper, sb, db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 sb.Remove(sb.Length - 2, 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 sb.Append("FROM\n\t");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 AppendTableName(sb, db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 AppendJoinTableName(sb, db, type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 AddWherePK(db, query, sb, -1, mainMapper);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 query.QueryText = sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 return query;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 private void BuildSelectSQL(IPropertiesMapping mapper, StringBuilder sb, DbManager db)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 foreach (IMapper mapField in mapper.PropertiesMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 if (mapField is ValueMapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 sb.AppendFormat("\t{0}.{1},\n", ((IObjectMapper)mapper).PropertyType.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 db.DataProvider.Convert(((ValueMapper)mapField).ColumnName, ConvertType.NameToQueryField));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 else if (mapField is IPropertiesMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 var propertiesMapping = (IPropertiesMapping)mapField;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 var cel = propertiesMapping.ParentMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 while (cel != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 // To avoid recursion dont take in account types already loaded.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 if (((IMapper)cel).PropertyType == mapField.PropertyType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 cel = cel.ParentMapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 var objectMapper = (IObjectMapper)mapField;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 if (!objectMapper.IsLazy)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 BuildSelectSQL(propertiesMapping, sb, db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 throw new NotImplementedException(mapField.GetType() + " is not yet implemented.");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 private void AppendJoinTableName(StringBuilder sb, DbManager db, Type type)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 string parentName = GetTableName(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 foreach (PropertyInfo prop in type.GetProperties())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 bool isCollection = prop.PropertyType.GetInterfaces().ToList().Contains(typeof(IList));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 Type listElementType = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 if (isCollection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 listElementType = FullMappingSchema.GetGenericType(prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 if (!_ignoreLazyLoad)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 object[] lazy = prop.GetCustomAttributes(typeof(LazyInstanceAttribute), true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 if (lazy.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 if (((LazyInstanceAttribute)lazy[0]).IsLazy)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 object[] attribs = prop.GetCustomAttributes(typeof(AssociationAttribute), true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 if (attribs.Length > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 var assocAttrib = (AssociationAttribute)attribs[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 PropertyInfo parentField = type.GetProperty(assocAttrib.ThisKey);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 PropertyInfo childField = prop.PropertyType.GetProperty(assocAttrib.OtherKey);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 if (isCollection)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 childField = listElementType.GetProperty(assocAttrib.OtherKey);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 //FullMappingSchema.GetColumnFromProperty(listElementType, associationAttribute.OtherKey);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 object[] parentFieldAttributes = parentField.GetCustomAttributes(typeof(MapFieldAttribute), true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 string parentDbField = parentFieldAttributes.Length > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 ? ((MapFieldAttribute)parentFieldAttributes[0]).MapName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 : assocAttrib.ThisKey;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 object[] childFieldAttributes = childField.GetCustomAttributes(typeof(MapFieldAttribute), true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 string childDbField = childFieldAttributes.Length > 0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 ? ((MapFieldAttribute)childFieldAttributes[0]).MapName
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 : assocAttrib.OtherKey;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 string childDatabase = isCollection
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 ? GetDatabaseName(listElementType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 : GetDatabaseName(prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 string childOwner = isCollection ? base.GetOwnerName(listElementType) : base.GetOwnerName(prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 string childName = isCollection ? base.GetTableName(listElementType) : base.GetTableName(prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 string childAlias = isCollection ? GetTableName(listElementType) : GetTableName(prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 StringBuilder childFullName = db.DataProvider.CreateSqlProvider().BuildTableName(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 new StringBuilder(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 childDatabase == null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 ? null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 : db.DataProvider.Convert(childDatabase, ConvertType.NameToDatabase).ToString(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 childOwner == null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 ? null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 : db.DataProvider.Convert(childOwner, ConvertType.NameToOwner).ToString(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 childName == null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 ? null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 : db.DataProvider.Convert(childName, ConvertType.NameToQueryTable).ToString());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 sb.AppendFormat("\tINNER JOIN {0} {1} ON {2}.{3}={4}.{5}\n",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 childFullName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 childAlias,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 parentName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 parentDbField,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 childAlias,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 childDbField
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 );
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 AppendJoinTableName(sb, db, isCollection ? listElementType : prop.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 sb.AppendLine();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 //SELECT
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 // ARTIST2.ID_ARTIST,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 // ARTIST2.ARTIST,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 // TRACK.ID_TRACK,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 // TRACK.TRACK,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 // TRACK.ID_ARTIST,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 // ARTIST.ID_ARTIST,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 // ARTIST.ARTIST
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 //FROM
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 // PITAFR01.ARTIST ARTIST2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 // INNER JOIN PITAFR01.TRACK TRACK ON ARTIST2.ID_ARTIST=TRACK.ID_ARTIST
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 // INNER JOIN PITAFR01.ARTIST ARTIST ON TRACK.ID_ARTIST=ARTIST.ID_ARTIST
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 //WHERE
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 // ARTIST2.ID_ARTIST = 2566
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 private void AddWherePK(DbManager db, SqlQueryInfo query, StringBuilder sb, int nParameter,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 FullObjectMapper mapper)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 sb.Append("WHERE\n");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 foreach (IMapper mm in mapper.PropertiesMapping)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 if (mm is ValueMapper && mm.DataReaderIndex == mapper.DataReaderIndex)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 var valueMapper = (ValueMapper)mm;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 string tableAlias = mapper.PropertyType.Name;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 //mm.Name = ID_TRACK
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 SqlQueryParameterInfo p = query.AddParameter(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 db.DataProvider.Convert(valueMapper.ColumnName + "_W", ConvertType.NameToQueryParameter).
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 ToString(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 valueMapper.ColumnName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 sb.AppendFormat("\t{0}.{1} = ", tableAlias, db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 if (nParameter < 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 sb.AppendFormat("{0} AND\n", p.ParameterName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 sb.AppendFormat("{{{0}}} AND\n", nParameter++);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 sb.Remove(sb.Length - 5, 5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 }