Esempio n. 1
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);
		}
Esempio n. 2
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);
		}
Esempio n. 3
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);;
		}