From 2467be5a7441a8a1c2d41bbd44db8bff50585df2 Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Mon, 25 Mar 2013 23:17:03 +0100 Subject: [PATCH] Allow Full Query to work when you have more than one Association to the same Table! --- .../JointureAddOn/DataAccess/FullSqlQuery.cs | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/Extensions/JointureAddOn/DataAccess/FullSqlQuery.cs b/Extensions/JointureAddOn/DataAccess/FullSqlQuery.cs index b88196e06..2a23f0a0b 100644 --- a/Extensions/JointureAddOn/DataAccess/FullSqlQuery.cs +++ b/Extensions/JointureAddOn/DataAccess/FullSqlQuery.cs @@ -129,7 +129,7 @@ protected void FullAppendTableName(StringBuilder sb, DbManager db, Type type) //TODO Override OracleSqlProvider in order to avoid this mess... string alias = FullGetTableName(type); - sb.Append(" " + alias); + sb.Append(" " + "T" /*alias*/); sb.AppendLine(); } @@ -141,13 +141,15 @@ protected string FullGetTableName(Type type) return type.Name; } - protected void BuildSelectSql(IObjectMapper mapper, StringBuilder sb, DbManager db) - { + protected void BuildSelectSql(IObjectMapper mapper, StringBuilder sb, DbManager db, string tableName = "T") + { + int tableNr = 0; + foreach (IMapper mapField in mapper.PropertiesMapping) { if (mapField is ValueMapper) - sb.AppendFormat("\t{0}.{1} {2},\n" - , (mapper).PropertyType.Name, + sb.AppendFormat("\t{0}.{1} {2},\n" + , tableName /* (mapper).PropertyType.Name */, db.DataProvider.Convert(((ValueMapper) mapField).ColumnName, ConvertType.NameToQueryField), ((ValueMapper) mapField).ColumnAlias ); @@ -162,19 +164,23 @@ protected void BuildSelectSql(IObjectMapper mapper, StringBuilder sb, DbManager continue; cel = cel.ParentMapping; } - var objectMapper = (IObjectMapper) mapField; - if (!objectMapper.IsLazy) - BuildSelectSql(objectMapper, sb, db); + var objectMapper = (IObjectMapper) mapField; + if (!objectMapper.IsLazy) + BuildSelectSql(objectMapper, sb, db, tableName + tableNr.ToString()); + + tableNr++; } else throw new NotImplementedException(mapField.GetType() + " is not yet implemented."); } - } - - protected void AppendJoinTableName(IPropertiesMapping mapper, StringBuilder sb, DbManager db, Type type) + } + + protected void AppendJoinTableName(IPropertiesMapping mapper, StringBuilder sb, DbManager db, Type type, string tableName = "T") { string parentName = FullGetTableName(type); - Dictionary valueMappers = mapper.PropertiesMapping.Where(e => e is ValueMapper).Cast().ToDictionary(e => e.PropertyName, e => e); + Dictionary valueMappers = mapper.PropertiesMapping.Where(e => e is ValueMapper).Cast().ToDictionary(e => e.PropertyName, e => e); + + int tableNr = 0; foreach (IMapper mapField in mapper.PropertiesMapping) { @@ -214,15 +220,17 @@ protected void AppendJoinTableName(IPropertiesMapping mapper, StringBuilder sb, : db.DataProvider.Convert(childName, ConvertType.NameToQueryTable).ToString()); sb.AppendFormat("\tFULL OUTER JOIN {0} {1} ON {2}.{3}={4}.{5}\n", - childFullName, - childAlias, - parentName, + childFullName, + tableName + tableNr.ToString() /*childAlias*/, + tableName /*parentName*/, parentDbField, - childAlias, + tableName + tableNr.ToString() /*childAlias*/, childDbField - ); - - AppendJoinTableName((IPropertiesMapping) mapField, sb, db, mapField.PropertyType); + ); + + AppendJoinTableName((IPropertiesMapping)mapField, sb, db, mapField.PropertyType, tableName + tableNr.ToString()); + + tableNr++; } } @@ -262,7 +270,7 @@ protected void AddWherePK(DbManager db, SqlQueryInfo query, StringBuilder sb, in ToString(), valueMapper.ColumnName); - sb.AppendFormat("\t{0}.{1} = ", tableAlias, + sb.AppendFormat("\t{0}.{1} = ", "T" /* tableAlias */, db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField)); if (nParameter < 0)