protected virtual string GetSelectCollectionPropertyStatement(object obj, string propertyName, IList parameters) { IClassMap classMap; IPropertyMap propertyMap; IColumnMap idColumnMap; IPropertyMap idPropertyMap; ITableMap tableMap; IObjectManager om; string paramName = ""; classMap = m_SqlEngineManager.Context.DomainMap.MustGetClassMap(obj.GetType()); propertyMap = classMap.MustGetPropertyMap(propertyName); tableMap = propertyMap.MustGetTableMap(); ISourceMap sourceMap = tableMap.SourceMap; SqlSelectStatement select = new SqlSelectStatement(sourceMap) ; SqlTableAlias table = select.GetSqlTableAlias(tableMap); IColumnMap columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = select.GetSqlColumnAlias(columnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(column); select.SqlFromClause.AddSqlAliasTableSource(table); om = m_SqlEngineManager.Context.ObjectManager; idColumnMap = propertyMap.GetIdColumnMap(); idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); SqlColumnAlias idColumn = select.GetSqlColumnAlias(idColumnMap); paramName = GetParameterName(propertyMap, "Id_"); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap, true); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(idColumn, SqlCompareOperatorType.Equals, param); foreach (IColumnMap iIdColumnMap in propertyMap.GetAdditionalIdColumnMaps()) { idColumnMap = iIdColumnMap; idColumn = select.GetSqlColumnAlias(idColumnMap); paramName = GetParameterName(propertyMap, idColumnMap, "Id_"); if (!(classMap.GetTypeColumnMap() == null && classMap.GetTypeColumnMap() == idColumnMap.MustGetPrimaryKeyColumnMap())) { param = AddSqlParameter(select, parameters, paramName, obj, null, classMap.TypeValue, idColumnMap, true); } else { idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); param = AddSqlParameter(select, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap, true); } search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(idColumn, SqlCompareOperatorType.Equals, param); } return GenerateSql(select); }
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); }
//NOTE: shouldnt this also load related tables in inheritance scenarios? , eg classtable inheritance? protected virtual string GetSelectStatement(object obj, ArrayList propertyNames, string keyPropertyName, object keyValue, IList parameters) { IPropertyMap propertyMap; IClassMap classMap; ITableMap tableMap; IObjectManager om; IColumnMap typeColumnMap; string paramName = ""; classMap = m_SqlEngineManager.Context.DomainMap.MustGetClassMap(obj.GetType()); tableMap = classMap.MustGetTableMap(); ISourceMap sourceMap = tableMap.SourceMap; SqlSelectStatement select = new SqlSelectStatement(sourceMap) ; SqlTableAlias table = select.GetSqlTableAlias(tableMap); foreach (IPropertyMap iPropertyMap in classMap.GetAllPropertyMaps()) { propertyMap = iPropertyMap; if (propertyMap.MustGetTableMap() == tableMap) { //if (!((propertyMap.IsCollection || (propertyMap.ReferenceType != ReferenceType.None && !(propertyMap.IsIdentity))))) if (!(propertyMap.IsCollection || propertyMap.GetAllColumnMaps().Count > 1)) { if (!(propertyMap.LazyLoad)) { IColumnMap columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = select.GetSqlColumnAlias(columnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(column); propertyNames.Add(propertyMap.Name); } } } } select.SqlFromClause.AddSqlAliasTableSource(table); om = m_SqlEngineManager.Context.ObjectManager; if (keyPropertyName.Length > 0) { propertyMap = classMap.MustGetPropertyMap(keyPropertyName); IColumnMap columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = select.GetSqlColumnAlias(columnMap); SqlSearchCondition search = select.SqlWhereClause.GetSqlSearchCondition(); paramName = GetParameterName(propertyMap, "Id_"); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); search.GetSqlComparePredicate(column, SqlCompareOperatorType.Equals, param); } else { foreach (IPropertyMap iPropertyMap in classMap.GetIdentityPropertyMaps()) { propertyMap = iPropertyMap; IColumnMap columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = select.GetSqlColumnAlias(columnMap); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); paramName = GetParameterName(propertyMap, "Id_"); SqlParameter param; if (om.GetPropertyStatus(obj, propertyMap.Name) == PropertyStatus.Dirty) param = AddSqlParameter(select, parameters, paramName, obj, propertyMap, om.GetOriginalPropertyValue(obj, propertyMap.Name), columnMap, true); else param = AddSqlParameter(select, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); search.GetSqlComparePredicate(column, SqlCompareOperatorType.Equals, param); } typeColumnMap = classMap.GetTypeColumnMap(); if (typeColumnMap != null) { SqlColumnAlias column = select.GetSqlColumnAlias(typeColumnMap); paramName = GetParameterName(classMap, "Type_"); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, null, classMap.TypeValue, typeColumnMap, true); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(column, SqlCompareOperatorType.Equals, param); } } return GenerateSql(select);; }