protected virtual string GetSelectManyManyPropertyStatement(object obj, IPropertyMap propertyMap, IList idColumns, IList typeColumns, Hashtable hashPropertyColumnMap, IList parameters) { IColumnMap columnMap; IClassMap classMap; IPropertyMap refPropertyMap; ITableMap tableMap; ITableMap joinTableMap; string colName; IObjectManager om; IColumnMap idColumnMap; IPropertyMap myPropertyMap; IColumnMap myColumnMap; ITableMap myTableMap; IColumnMap colColumnMap; IColumnMap forColumnMap; ITableMap forTableMap; IColumnMap addColumnMap; IColumnMap addIdColumnMap; IColumnMap addMyColumnMap; ITableMap addMyTableMap; IColumnMap typeColumnMap; IPropertyMap orderByMap; string paramName = ""; classMap = propertyMap.MustGetReferencedClassMap(); tableMap = classMap.MustGetTableMap(); SqlSelectStatement select = new SqlSelectStatement(tableMap.SourceMap) ; SqlTableAlias table = select.GetSqlTableAlias(tableMap); joinTableMap = propertyMap.MustGetTableMap(); SqlTableAlias joinTable = select.GetSqlTableAlias(joinTableMap); idColumnMap = propertyMap.GetIdColumnMap(); SqlColumnAlias idColumn = joinTable.GetSqlColumnAlias(idColumnMap); myTableMap = idColumnMap.MustGetPrimaryKeyTableMap(); myColumnMap = idColumnMap.MustGetPrimaryKeyColumnMap(); if (myTableMap == null) throw new MappingException("TableMap '" + idColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (myColumnMap == null) throw new MappingException("ColumnMap '" + idColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlTableAlias myTable; colColumnMap = propertyMap.GetColumnMap(); forTableMap = colColumnMap.MustGetPrimaryKeyTableMap(); forColumnMap = colColumnMap.MustGetPrimaryKeyColumnMap(); if (forTableMap == null) throw new MappingException("TableMap '" + idColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (forColumnMap == null) throw new MappingException("ColumnMap '" + idColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlTableAlias forTable = select.GetSqlTableAlias(forTableMap); SqlColumnAlias forColumn = forTable.GetSqlColumnAlias(forColumnMap); SqlColumnAlias colColumn = joinTable.GetSqlColumnAlias(colColumnMap); orderByMap = propertyMap.GetOrderByPropertyMap(); foreach (IPropertyMap iRefPropertyMap in classMap.GetPrimaryPropertyMaps()) { refPropertyMap = iRefPropertyMap; if (!((refPropertyMap.IsCollection || (refPropertyMap.ReferenceType != ReferenceType.None && !(refPropertyMap.IsIdentity))))) { IColumnMap refColumnMap = refPropertyMap.GetColumnMap(); SqlColumnAlias refColumn = select.GetSqlColumnAlias(refColumnMap); colName = refColumnMap.Name; if (refPropertyMap.IsIdentity) idColumns.Add(colName); if (!(refPropertyMap.LazyLoad)) { select.SqlSelectClause.AddSqlAliasSelectListItem(refColumn); hashPropertyColumnMap[refPropertyMap.Name] = colName; if (refPropertyMap == orderByMap) select.SqlOrderByClause.AddSqlOrderByItem(refColumn); } } } typeColumnMap = classMap.GetTypeColumnMap(); if (typeColumnMap != null) { typeColumns.Add(typeColumnMap.Name); SqlColumnAlias typeColumn = select.GetSqlColumnAlias(typeColumnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(typeColumn); } select.SqlFromClause.AddSqlAliasTableSource(table); select.SqlFromClause.AddSqlAliasTableSource(joinTable); //if (tableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) == myTableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) && tableMap.Name.ToLower(CultureInfo.InvariantCulture) == myTableMap.Name.ToLower(CultureInfo.InvariantCulture)) if (tableMap == myTableMap) myTable = select.GetSqlTableAlias(myTableMap, "NPersistSelfRefTable"); else myTable = select.GetSqlTableAlias(myTableMap); SqlColumnAlias myColumn = myTable.GetSqlColumnAlias(myColumnMap); select.SqlFromClause.AddSqlAliasTableSource(myTable); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(forColumn, SqlCompareOperatorType.Equals, colColumn); foreach (IColumnMap iAddColumnMap in propertyMap.GetAdditionalColumnMaps()) { addColumnMap = iAddColumnMap; addMyColumnMap = addColumnMap.MustGetPrimaryKeyColumnMap(); if (addMyColumnMap == null) throw new MappingException("ColumnMap '" + addColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlColumnAlias addColumn = forTable.GetSqlColumnAlias(addColumnMap); SqlColumnAlias addMyColumn = joinTable.GetSqlColumnAlias(addMyColumnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(addColumn, SqlCompareOperatorType.Equals, addMyColumn); } search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(idColumn, SqlCompareOperatorType.Equals, myColumn); foreach (IColumnMap iAddIdColumnMap in propertyMap.GetAdditionalIdColumnMaps()) { addIdColumnMap = iAddIdColumnMap; addMyTableMap = addIdColumnMap.MustGetPrimaryKeyTableMap(); addMyColumnMap = addIdColumnMap.MustGetPrimaryKeyColumnMap(); if (addMyTableMap == null) throw new MappingException("TableMap '" + addIdColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (addMyColumnMap == null) throw new MappingException("ColumnMap '" + addIdColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlColumnAlias addIdColumn = joinTable.GetSqlColumnAlias(addIdColumnMap); SqlColumnAlias addMyColumn = myTable.GetSqlColumnAlias(addMyColumnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(addIdColumn, SqlCompareOperatorType.Equals, addMyColumn); } om = m_SqlEngineManager.Context.ObjectManager; foreach (IPropertyMap iMyPropertyMap in propertyMap.ClassMap.GetIdentityPropertyMaps()) { myPropertyMap = iMyPropertyMap; columnMap = myPropertyMap.GetColumnMap(); SqlColumnAlias column = myTable.GetSqlColumnAlias(columnMap); SqlParameter param; paramName = GetParameterName(myPropertyMap, "Id_"); if (om.GetPropertyStatus(obj, propertyMap.Name) == PropertyStatus.Dirty) param = AddSqlParameter(select, parameters, paramName, obj, myPropertyMap, om.GetOriginalPropertyValue(obj, myPropertyMap.Name), columnMap, true); else param = AddSqlParameter(select, parameters, paramName, obj, myPropertyMap, om.GetPropertyValue(obj, myPropertyMap.Name), columnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(column, SqlCompareOperatorType.Equals, param); } typeColumnMap = propertyMap.ClassMap.GetTypeColumnMap(); if (typeColumnMap != null) { SqlColumnAlias typeColumn = myTable.GetSqlColumnAlias(typeColumnMap); paramName = GetParameterName(propertyMap.ClassMap, "Type_"); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, null, propertyMap.ClassMap.TypeValue, typeColumnMap, true); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(typeColumn, SqlCompareOperatorType.Equals, param); } return GenerateSql(select); }
protected virtual string GetSelectManyOnePropertyStatement(object obj, IPropertyMap propertyMap, IList idColumns, IList typeColumns, Hashtable hashPropertyColumnMap, IList parameters) { string colName = ""; IColumnMap columnMap; IClassMap classMap; IPropertyMap refPropertyMap; ITableMap tableMap; ITableMap rootTableMap; IColumnMap idColumnMap; IPropertyMap myPropertyMap; IColumnMap myColumnMap; ITableMap myTableMap; IColumnMap addIdColumnMap; IColumnMap addMyColumnMap; ITableMap addMyTableMap; IColumnMap typeColumnMap; IPropertyMap orderByMap; string paramName = ""; classMap = propertyMap.MustGetReferencedClassMap(); IClassMap rootClassMap = classMap; rootTableMap = classMap.MustGetTableMap(); tableMap = propertyMap.MustGetTableMap(); if (tableMap != rootTableMap) { bool done = false; while (done == false && rootClassMap.InheritanceType != InheritanceType.ConcreteTableInheritance) { done = true; IClassMap super = rootClassMap.GetInheritedClassMap(); if (super != null) { if (super.MustGetTableMap() == rootTableMap) { rootClassMap = super ; done = false; } } } if (rootClassMap == null) { rootClassMap = classMap; } } SqlSelectStatement select = new SqlSelectStatement(tableMap.SourceMap) ; SqlTableAlias table = select.GetSqlTableAlias(tableMap); idColumnMap = propertyMap.GetIdColumnMap(); SqlColumnAlias idColumn = table.GetSqlColumnAlias(idColumnMap); myTableMap = idColumnMap.MustGetPrimaryKeyTableMap(); myColumnMap = idColumnMap.MustGetPrimaryKeyColumnMap(); if (myTableMap == null) throw new MappingException("TableMap '" + idColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (myColumnMap == null) throw new MappingException("ColumnMap '" + idColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlTableAlias rootTable = table; if (tableMap != rootTableMap) { rootTable = select.GetSqlTableAlias(rootTableMap, "NPersistRootTable"); } SqlTableAlias myTable; SqlColumnAlias myColumn; IObjectManager om; orderByMap = propertyMap.GetOrderByPropertyMap(); //foreach (IPropertyMap iRefPropertyMap in rootClassMap.GetPrimaryPropertyMaps()) foreach (IPropertyMap iRefPropertyMap in rootClassMap.GetAllPropertyMaps()) { refPropertyMap = iRefPropertyMap; if (refPropertyMap.IsCollection) { if (this.Context.PersistenceManager.GetListCountLoadBehavior(LoadBehavior.Default, refPropertyMap) == LoadBehavior.Eager) { if (refPropertyMap.ReferenceType != ReferenceType.None) { ITableMap listTableMap = refPropertyMap.GetTableMap(); ISourceMap listSourceMap = listTableMap.SourceMap; SqlSelectStatement subSelect = new SqlSelectStatement(listSourceMap); SqlTableAlias listTable = subSelect.GetSqlTableAlias(listTableMap, "t" + select.GetNextTableAliasIndex()); SqlCountFunction count = new SqlCountFunction(); subSelect.SqlSelectClause.AddSqlAliasSelectListItem(count); subSelect.SqlFromClause.AddSqlAliasTableSource(listTable); foreach (IColumnMap fkIdColumnMap in refPropertyMap.GetAllIdColumnMaps()) { IColumnMap pkIdColumnMap = fkIdColumnMap.MustGetPrimaryKeyColumnMap(); SqlColumnAlias fkIdColumn = listTable.GetSqlColumnAlias(fkIdColumnMap); SqlColumnAlias pkIdColumn = table.GetSqlColumnAlias(pkIdColumnMap); SqlSearchCondition searchCount = subSelect.SqlWhereClause.GetNextSqlSearchCondition(); searchCount.GetSqlComparePredicate(fkIdColumn, SqlCompareOperatorType.Equals, pkIdColumn); } select.SqlSelectClause.AddSqlAliasSelectListItem(subSelect, refPropertyMap.Name); hashPropertyColumnMap[refPropertyMap.Name] = refPropertyMap.Name; } } } else { if (refPropertyMap.MustGetTableMap() == rootTableMap) { if (!((refPropertyMap.IsCollection || ((refPropertyMap.ReferenceType != ReferenceType.None && refPropertyMap.GetAdditionalColumnMaps().Count > 0) && !(refPropertyMap.IsIdentity))))) { IColumnMap refColumnMap = refPropertyMap.GetColumnMap(); //SqlColumnAlias refColumn = table.GetSqlColumnAlias(refColumnMap); SqlColumnAlias refColumn = rootTable.GetSqlColumnAlias(refColumnMap); colName = refColumnMap.Name; if (refPropertyMap.IsIdentity) idColumns.Add(colName); if (!(refPropertyMap.LazyLoad)) { select.SqlSelectClause.AddSqlAliasSelectListItem(refColumn); hashPropertyColumnMap[refPropertyMap.Name] = colName; if (refPropertyMap == orderByMap) select.SqlOrderByClause.AddSqlOrderByItem(refColumn); } } } } } select.SqlFromClause.AddSqlAliasTableSource(table); typeColumnMap = classMap.GetTypeColumnMap(); if (typeColumnMap != null) { SqlColumnAlias typeColumn = rootTable.GetSqlColumnAlias(typeColumnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(typeColumn); typeColumns.Add(typeColumnMap.Name); } if (table != rootTable) { select.SqlFromClause.AddSqlAliasTableSource(rootTable); } //if (tableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) == myTableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) && tableMap.Name.ToLower(CultureInfo.InvariantCulture) == myTableMap.Name.ToLower(CultureInfo.InvariantCulture)) if (myTableMap == tableMap) myTable = select.GetSqlTableAlias(myTableMap, "NPersistSelfRefTable"); else myTable = select.GetSqlTableAlias(myTableMap, "NPersistOwnerTable"); myColumn = myTable.GetSqlColumnAlias(myColumnMap); select.SqlFromClause.AddSqlAliasTableSource(myTable); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(idColumn, SqlCompareOperatorType.Equals, myColumn); foreach (IColumnMap iAddIdColumnMap in propertyMap.GetAdditionalIdColumnMaps()) { addIdColumnMap = iAddIdColumnMap; addMyTableMap = addIdColumnMap.GetPrimaryKeyTableMap(); addMyColumnMap = addIdColumnMap.MustGetPrimaryKeyColumnMap(); if (addMyTableMap == null) throw new MappingException("TableMap '" + addIdColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (addMyColumnMap == null) throw new MappingException("ColumnMap '" + addIdColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlColumnAlias addIdColumn = table.GetSqlColumnAlias(addIdColumnMap); SqlColumnAlias addMyColumn = myTable.GetSqlColumnAlias(addMyColumnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(addIdColumn, SqlCompareOperatorType.Equals, addMyColumn); } if (table != rootTable) { foreach (IPropertyMap testPropertyMap in classMap.GetAllPropertyMaps()) { if (testPropertyMap.MustGetTableMap() == propertyMap.MustGetTableMap()) { foreach (IColumnMap iAddIdColumnMap in testPropertyMap.GetAllIdColumnMaps()) { addIdColumnMap = iAddIdColumnMap; SqlColumnAlias addIdColumn = table.GetSqlColumnAlias(addIdColumnMap); SqlColumnAlias rootColumn = rootTable.GetSqlColumnAlias(addIdColumnMap.MustGetPrimaryKeyColumnMap()); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(addIdColumn, SqlCompareOperatorType.Equals, rootColumn); } break; } } } om = m_SqlEngineManager.Context.ObjectManager; foreach (IPropertyMap iMyPropertyMap in propertyMap.ClassMap.GetIdentityPropertyMaps()) { myPropertyMap = iMyPropertyMap; columnMap = myPropertyMap.GetColumnMap(); SqlColumnAlias column = myTable.GetSqlColumnAlias(columnMap); SqlParameter param; paramName = GetParameterName(myPropertyMap, "Id_"); if (om.GetPropertyStatus(obj, propertyMap.Name) == PropertyStatus.Dirty) param = AddSqlParameter(select, parameters, paramName, obj, myPropertyMap, om.GetOriginalPropertyValue(obj, myPropertyMap.Name), columnMap, true); else param = AddSqlParameter(select, parameters, paramName, obj, myPropertyMap, om.GetPropertyValue(obj, myPropertyMap.Name), columnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(column, SqlCompareOperatorType.Equals, param); } typeColumnMap = propertyMap.ClassMap.GetTypeColumnMap(); if (typeColumnMap != null) { IClassMap actual = this.Context.DomainMap.MustGetClassMap(obj.GetType()); SqlColumnAlias typeColumn = myTable.GetSqlColumnAlias(typeColumnMap); paramName = GetParameterName(propertyMap.ClassMap, "Type_"); //SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, null, propertyMap.ClassMap.TypeValue, typeColumnMap, true); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, null, actual.TypeValue, typeColumnMap, true); search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(typeColumn, SqlCompareOperatorType.Equals, param); } return GenerateSql(select); }