public SqlAllPredicate(SqlSearchCondition sqlSearchCondition, SqlExpression leftExpression, SqlCompareOperator sqlCompareOperator, SqlAllPredicateType sqlAllPredicateType) : base(sqlSearchCondition) { this.leftExpression = leftExpression; this.sqlCompareOperator = sqlCompareOperator; this.sqlSelectStatement = new SqlSelectStatement(this); this.sqlAllPredicateType = sqlAllPredicateType; }
public SqlEmitter(INPathEngine npathEngine, NPathSelectQuery query,NPathQueryType queryType, IClassMap rootClassMap,SqlSelectStatement parentQuery,IPropertyMap backReference,int subQueryLevel) { this.npathEngine = npathEngine; this.query = query; this.rootClassMap = rootClassMap; propertyPathTraverser = new PropertyPathTraverser(this); this.propertyColumnMap = new Hashtable() ; this.npathQueryType = queryType; this.parentQuery = parentQuery; this.backReference = backReference; this.subQueryLevel = subQueryLevel; }
public virtual void Visited(SqlSelectStatement selectStatement) { }
public virtual void Visiting(SqlSelectStatement selectStatement) { sqlBuilder.Append("Select "); if (selectStatement.Distinct) sqlBuilder.Append("Distinct "); if (selectStatement.Top > -1) { sqlBuilder.Append("Top " + selectStatement.Top.ToString() + " "); if (selectStatement.Percent) sqlBuilder.Append("Percent "); if (selectStatement.WithTies) sqlBuilder.Append("With Ties "); } }
public SqlInPredicateItem(SqlInPredicate sqlInPredicate, SqlSelectStatement sqlSelectStatement) { this.Parent = sqlInPredicate; this.sqlSelectStatement = sqlSelectStatement; }
public virtual void GetListPropertySubselectAndAlias(IPropertyMap propertyMap, object hash, Hashtable columns, ArrayList order, string propPath, string suggestion) { if (hash == null) { hash = propertyMap; } ITableMap listTableMap = propertyMap.MustGetTableMap(); ITableMap parentTableMap = propertyMap.ClassMap.MustGetTableMap(); SqlTableAlias parentTable = sqlEmitter.GetTableAlias(parentTableMap, hash); SqlSelectStatement subSelect = new SqlSelectStatement(parentTableMap.SourceMap); //Hmmm....can an alias be redefined in a subselect? //SqlTableAlias listTable = subSelect.GetSqlTableAlias(listTableMap, "cnt" + subSelect.GetNextTableAliasIndex()); SqlTableAlias listTable = subSelect.GetSqlTableAlias(listTableMap, "cnt" + sqlEmitter.Select.GetNextTableAliasIndex()); SqlCountFunction count = new SqlCountFunction(); subSelect.SqlSelectClause.AddSqlAliasSelectListItem(count); subSelect.SqlFromClause.AddSqlAliasTableSource(listTable); foreach (IColumnMap fkIdColumnMap in propertyMap.GetAllIdColumnMaps()) { IColumnMap idColumnMap = fkIdColumnMap.MustGetPrimaryKeyColumnMap(); SqlColumnAlias fkIdColumn = listTable.GetSqlColumnAlias(fkIdColumnMap); SqlColumnAlias idColumn = parentTable.GetSqlColumnAlias(idColumnMap); SqlSearchCondition search = subSelect.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(fkIdColumn, SqlCompareOperatorType.Equals, idColumn); } if (suggestion == "") suggestion = propPath; SqlAliasSelectListItem countAlias = this.sqlEmitter.Select.SqlSelectClause.AddSqlAliasSelectListItem(subSelect, suggestion); this.sqlEmitter.PropertyColumnMap[propPath] = countAlias.SqlExpressionAlias.Alias; }
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); }
//Mats : Fixed non-primary ref prop bug by improving One-One backref identification protected virtual string GetSelectSingleReferencePropertyStatement(object obj, IPropertyMap propertyMap, IList idColumns, IList typeColumns, Hashtable hashPropertyColumnMap, IList parameters) { IColumnMap columnMap; IClassMap classMap; IPropertyMap refPropertyMap; ITableMap tableMap; IPropertyMap myPropertyMap; string colName; IColumnMap theColumnMap; IColumnMap forColumnMap; ITableMap forTableMap; IColumnMap addColumnMap; IColumnMap addForColumnMap; ITableMap addForTableMap; IColumnMap typeColumnMap; IDomainMap domainMap; bool isBackRef = false; string paramName = ""; classMap = propertyMap.MustGetReferencedClassMap(); if (propertyMap.ReferenceType == ReferenceType.OneToOne) { columnMap = propertyMap.GetColumnMap(); if (columnMap != null) if (columnMap.TableMap == propertyMap.MustGetReferencedClassMap().MustGetTableMap()) if (columnMap.IsPrimaryKey) isBackRef = true; columnMap = null; } SqlSelectStatement select; SqlTableAlias table; SqlColumnAlias theColumn; SqlTableAlias forTable; SqlColumnAlias forColumn; if (isBackRef) { tableMap = propertyMap.ClassMap.MustGetTableMap(); select = new SqlSelectStatement(tableMap.SourceMap) ; table = select.GetSqlTableAlias(tableMap); //select.SqlSelectClause.AddSqlAliasSelectListItem(column); //select.SqlFromClause.AddSqlAliasTableSource(table); theColumnMap = propertyMap.GetIdColumnMap(); //theColumn = table.GetSqlColumnAlias(theColumnMap); forTableMap = theColumnMap.TableMap; forColumnMap = theColumnMap; theColumnMap = forColumnMap.MustGetPrimaryKeyColumnMap(); if (forTableMap == null) throw new MappingException("TableMap '" + theColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (forColumnMap == null) throw new MappingException("ColumnMap '" + theColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize forTable = select.GetSqlTableAlias(forTableMap); forColumn = forTable.GetSqlColumnAlias(forColumnMap); } else { tableMap = propertyMap.MustGetTableMap(); select = new SqlSelectStatement(tableMap.SourceMap) ; table = select.GetSqlTableAlias(tableMap); theColumnMap = propertyMap.GetColumnMap(); //theColumn = table.GetSqlColumnAlias(theColumnMap); forTableMap = theColumnMap.MustGetPrimaryKeyTableMap(); forColumnMap = theColumnMap.MustGetPrimaryKeyColumnMap(); if (forTableMap == null) throw new MappingException("TableMap '" + theColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (forColumnMap == null) throw new MappingException("ColumnMap '" + theColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize forTable = select.GetSqlTableAlias(forTableMap); forColumn = forTable.GetSqlColumnAlias(forColumnMap); } IObjectManager om; foreach (IPropertyMap iRefPropertyMap in classMap.GetPrimaryPropertyMaps()) { refPropertyMap = iRefPropertyMap; if (!(propertyMap.LazyLoad)) { if (!((refPropertyMap.IsCollection || (refPropertyMap.ReferenceType != ReferenceType.None && !(refPropertyMap.IsIdentity))))) { IColumnMap refColumnMap = refPropertyMap.GetColumnMap(); SqlColumnAlias refColumn = forTable.GetSqlColumnAlias(refColumnMap); colName = refColumnMap.Name; if (refPropertyMap.IsIdentity) idColumns.Add(colName); if (!(refPropertyMap.LazyLoad)) { select.SqlSelectClause.AddSqlAliasSelectListItem(refColumn); hashPropertyColumnMap[refPropertyMap.Name] = colName; } } } } typeColumnMap = classMap.GetTypeColumnMap(); if (typeColumnMap != null) { SqlColumnAlias typeColumn = forTable.GetSqlColumnAlias(typeColumnMap); typeColumns.Add(typeColumnMap.Name); select.SqlSelectClause.AddSqlAliasSelectListItem(typeColumn); } select.SqlFromClause.AddSqlAliasTableSource(table); SqlTableAlias selfTable ; //if (tableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) == forTableMap.SourceMap.Schema.ToLower(CultureInfo.InvariantCulture) && tableMap.Name.ToLower(CultureInfo.InvariantCulture) == forTableMap.Name.ToLower(CultureInfo.InvariantCulture)) if (tableMap == forTableMap) { selfTable = select.GetSqlTableAlias(tableMap, "NPersistSelfRefTable"); select.SqlFromClause.AddSqlAliasTableSource(selfTable); } else { selfTable = select.GetSqlTableAlias(tableMap); select.SqlFromClause.AddSqlAliasTableSource(forTable); } theColumn = selfTable.GetSqlColumnAlias(theColumnMap); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition() ; search.GetSqlComparePredicate(theColumn, SqlCompareOperatorType.Equals, forColumn); foreach (IColumnMap iAddColumnMap in propertyMap.GetAdditionalColumnMaps()) { addColumnMap = iAddColumnMap; addForTableMap = addColumnMap.GetPrimaryKeyTableMap(); addForColumnMap = addColumnMap.MustGetPrimaryKeyColumnMap(); if (addForTableMap == null) throw new MappingException("TableMap '" + addColumnMap.PrimaryKeyTable + "' Not Found!"); // do not localize if (addForColumnMap == null) throw new MappingException("ColumnMap '" + addColumnMap.PrimaryKeyColumn + "' Not Found!"); // do not localize SqlColumnAlias addColumn = selfTable.GetSqlColumnAlias(addColumnMap); SqlColumnAlias addForColumn = forTable.GetSqlColumnAlias(addForColumnMap); search = select.SqlWhereClause.GetNextSqlSearchCondition() ; search.GetSqlComparePredicate(addColumn, SqlCompareOperatorType.Equals, addForColumn); } om = m_SqlEngineManager.Context.ObjectManager; foreach (IPropertyMap iMyPropertyMap in propertyMap.ClassMap.GetIdentityPropertyMaps()) { myPropertyMap = iMyPropertyMap; columnMap = myPropertyMap.GetColumnMap(); SqlColumnAlias column = selfTable.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) { domainMap = propertyMap.ClassMap.DomainMap; SqlColumnAlias typeColumn = selfTable.GetSqlColumnAlias(typeColumnMap); paramName = GetParameterName(propertyMap.ClassMap, "Type_"); SqlParameter param = AddSqlParameter(select, parameters, paramName, obj, null, domainMap.MustGetClassMap(obj.GetType()).TypeValue, typeColumnMap, true); search = select.SqlWhereClause.GetNextSqlSearchCondition() ; search.GetSqlComparePredicate(typeColumn, SqlCompareOperatorType.Equals, param); } return GenerateSql(select); }
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 GetSelectNonPrimaryPropertyStatement(object obj, IPropertyMap propertyMap, ArrayList propertyNames, IList parameters) { IClassMap classMap; IColumnMap columnMap; IColumnMap idColumnMap; IPropertyMap idPropertyMap; IPropertyMap addPropertyMap; ITableMap tableMap; string paramName = ""; IContext ctx = m_SqlEngineManager.Context; IObjectManager om = ctx.ObjectManager; classMap = m_SqlEngineManager.Context.DomainMap.MustGetClassMap(obj.GetType()); tableMap = propertyMap.MustGetTableMap(); SqlSelectStatement select = new SqlSelectStatement(tableMap.SourceMap) ; SqlTableAlias table = select.GetSqlTableAlias(tableMap); columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = table.GetSqlColumnAlias(columnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(column); propertyNames.Add(propertyMap.Name); foreach (IPropertyMap iAddPropertyMap in classMap.GetAllPropertyMaps()) { addPropertyMap = iAddPropertyMap; if (addPropertyMap.MustGetTableMap() == tableMap) { if (!(addPropertyMap == propertyMap)) { if (om.GetPropertyStatus(obj, addPropertyMap.Name) == PropertyStatus.NotLoaded) { if (!((addPropertyMap.IsCollection || (addPropertyMap.ReferenceType != ReferenceType.None && !(addPropertyMap.IsIdentity))))) { if (!(addPropertyMap.LazyLoad)) { columnMap = addPropertyMap.GetColumnMap(); column = table.GetSqlColumnAlias(columnMap); select.SqlSelectClause.AddSqlAliasSelectListItem(column); propertyNames.Add(addPropertyMap.Name); } } } } } } select.SqlFromClause.AddSqlAliasTableSource(table); if (!(propertyMap.MustGetTableMap() == classMap.MustGetTableMap())) { idColumnMap = propertyMap.GetIdColumnMap(); idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); SqlColumnAlias idColumn = table.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 = table.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); } } else { foreach (IPropertyMap iPropertyMap in classMap.GetIdentityPropertyMaps()) { propertyMap = iPropertyMap; columnMap = propertyMap.GetColumnMap(); SqlColumnAlias idColumn = table.GetSqlColumnAlias(columnMap); 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); SqlSearchCondition search = select.SqlWhereClause.GetNextSqlSearchCondition(); search.GetSqlComparePredicate(idColumn, 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);; }
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); }
public virtual string GetTouchStatement(ITableMap tableMap, int exceptionLimit) { SqlSelectStatement select = new SqlSelectStatement(tableMap.SourceMap); SqlTableAlias table = select.GetSqlTableAlias(tableMap); select.SqlSelectClause.AddSqlAllColumnsSelectListItem(); select.Top = 1; select.SqlFromClause.AddSqlAliasTableSource(table); string sql = this.GenerateSql(select); return sql; }
public SqlExistsPredicate(SqlSearchCondition sqlSearchCondition) : base(sqlSearchCondition) { this.sqlSelectStatement = new SqlSelectStatement(this); }
public SqlInPredicateItem AddSqlInPredicateItem(SqlSelectStatement sqlSelectStatement) { SqlInPredicateItem newSqlInPredicateItem = new SqlInPredicateItem(this, sqlSelectStatement); this.sqlInPredicateItems.Add(newSqlInPredicateItem); return newSqlInPredicateItem; }
public SqlInPredicateItem(SqlInPredicate sqlInPredicate, SqlSelectStatement sqlSelectStatement) { this.Parent = sqlInPredicate; this.sqlSelectStatement = sqlSelectStatement; }