Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
		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;
		}
Ejemplo n.º 3
0
 public virtual void Visited(SqlSelectStatement selectStatement)
 {
 }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 7
0
		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);
		}
Ejemplo n.º 8
0
		//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);
		}
Ejemplo n.º 9
0
		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);
		}
Ejemplo n.º 10
0
		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);
		}
Ejemplo n.º 11
0
        //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);;
		}
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
 }
Ejemplo n.º 15
0
 public SqlInPredicateItem AddSqlInPredicateItem(SqlSelectStatement sqlSelectStatement)
 {
     SqlInPredicateItem newSqlInPredicateItem = new SqlInPredicateItem(this, sqlSelectStatement);
     this.sqlInPredicateItems.Add(newSqlInPredicateItem);
     return newSqlInPredicateItem;
 }
Ejemplo n.º 16
0
 public SqlInPredicateItem(SqlInPredicate sqlInPredicate, SqlSelectStatement sqlSelectStatement)
 {
     this.Parent             = sqlInPredicate;
     this.sqlSelectStatement = sqlSelectStatement;
 }