annotate Extensions/JointureAddOn/DataAccess/FullSqlQuery.cs @ 6:11b6da379593

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