protected virtual string GetInsertCollectionValueStatement(object obj, IPropertyMap propertyMap, object value, IList parameters) { IClassMap classMap; IColumnMap columnMap; IColumnMap idColumnMap; IPropertyMap idPropertyMap; ITableMap tableMap; IObjectManager om = m_SqlEngineManager.Context.ObjectManager; string paramName; classMap = propertyMap.ClassMap; tableMap = propertyMap.MustGetTableMap(); SqlInsertStatement insert = new SqlInsertStatement(tableMap.SourceMap); SqlTableAlias table = insert.GetSqlTableAlias(tableMap); insert.SqlInsertClause.SqlTable = table.SqlTable; idColumnMap = propertyMap.GetIdColumnMap(); idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); SqlColumnAlias idColumn = table.GetSqlColumnAlias(idColumnMap); paramName = GetParameterName(idPropertyMap); SqlParameter param = AddSqlParameter(insert, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap); insert.AddSqlColumnAndValue(idColumn, param); foreach (IColumnMap iIdColumnMap in propertyMap.GetAdditionalIdColumnMaps()) { idColumnMap = iIdColumnMap; idColumn = table.GetSqlColumnAlias(idColumnMap); paramName = GetParameterName(propertyMap, idColumnMap); if (!(classMap.GetTypeColumnMap() == null && classMap.GetTypeColumnMap() == idColumnMap.MustGetPrimaryKeyColumnMap())) param = AddSqlParameter(insert, parameters, paramName, obj, null, classMap.TypeValue, idColumnMap, true); else { idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); param = AddSqlParameter(insert, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap); } insert.AddSqlColumnAndValue(idColumn, param); } columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap, columnMap); param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, value, columnMap, true); insert.AddSqlColumnAndValue(column, param); foreach (IColumnMap iColumnMap in propertyMap.GetAdditionalColumnMaps()) { columnMap = iColumnMap; column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap, columnMap); param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, value, columnMap, true); insert.AddSqlColumnAndValue(column, param); } return GenerateSql(insert); }
protected virtual string GetInsertNonPrimaryStatement(object obj, ArrayList propertyMaps, IList stillDirty, IList parameters) { IClassMap classMap = null; IPropertyMap firstPropertyMap = null; IPropertyMap propertyMap; IColumnMap columnMap; ITableMap tableMap = null; IObjectManager om; IColumnMap idColumnMap = null; IPropertyMap idPropertyMap = null; IClassMap objClassMap = this.Context.DomainMap.GetClassMap(obj.GetType()); bool ignore; object refObj; string paramName = ""; bool hadDirty = false; om = m_SqlEngineManager.Context.ObjectManager; Hashtable addedPropertyMaps = new Hashtable() ; foreach (IPropertyMap iPropertyMap in propertyMaps) { propertyMap = iPropertyMap; firstPropertyMap = propertyMap; classMap = propertyMap.ClassMap; tableMap = propertyMap.MustGetTableMap(); idColumnMap = propertyMap.GetIdColumnMap(); idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); break; } SqlInsertStatement insert = new SqlInsertStatement(tableMap.SourceMap); SqlTableAlias table = insert.GetSqlTableAlias(tableMap); SqlColumnAlias idColumn = table.GetSqlColumnAlias(idColumnMap); insert.SqlInsertClause.SqlTable = table.SqlTable; paramName = GetParameterName(idPropertyMap); SqlParameter param = AddSqlParameter(insert, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap, true); insert.AddSqlColumnAndValue(idColumn, param); foreach (IColumnMap iIdColumnMap in firstPropertyMap.GetAdditionalIdColumnMaps()) { idColumnMap = iIdColumnMap; idColumn = table.GetSqlColumnAlias(idColumnMap); paramName = GetParameterName(firstPropertyMap, idColumnMap); if (!(classMap.GetTypeColumnMap() == null && classMap.GetTypeColumnMap() == idColumnMap.MustGetPrimaryKeyColumnMap())) param = AddSqlParameter(insert, parameters, paramName, obj, null, objClassMap.TypeValue, idColumnMap, true); else { idPropertyMap = classMap.MustGetPropertyMapForColumnMap(idColumnMap.MustGetPrimaryKeyColumnMap()); param = AddSqlParameter(insert, parameters, paramName, obj, idPropertyMap, om.GetPropertyValue(obj, idPropertyMap.Name), idColumnMap, true); } insert.AddSqlColumnAndValue(idColumn, param); } foreach (IPropertyMap iPropertyMap in propertyMaps) { propertyMap = iPropertyMap; ignore = false; if (propertyMap.GetColumnMap().IsAutoIncrease) ignore = true; else if (!(propertyMap.ReferenceType == ReferenceType.None)) { refObj = om.GetPropertyValue(obj, propertyMap.Name); if (refObj != null) { if (om.GetObjectStatus(refObj) == ObjectStatus.UpForCreation) { ignore = true; stillDirty.Add(propertyMap); } } } if (!(ignore)) { columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap); param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); insert.AddSqlColumnAndValue(column, param); foreach (IColumnMap iColumnMap in propertyMap.GetAdditionalColumnMaps()) { columnMap = iColumnMap; column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap, columnMap); param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); insert.AddSqlColumnAndValue(column, param); } addedPropertyMaps[propertyMap] = propertyMap; hadDirty = true; } } IList remove = new ArrayList(); foreach (IPropertyMap removePropertyMap in propertyMaps) { if (addedPropertyMaps.ContainsKey(removePropertyMap)) { remove.Add(removePropertyMap); } } foreach (IPropertyMap removePropertyMap in remove) { propertyMaps.Remove(removePropertyMap); } if (!hadDirty) return ""; return GenerateSql(insert); }
protected virtual string GetInsertStatement(object obj, ArrayList propertyNames, IList stillDirty, ArrayList nonPrimaryPropertyMaps, ArrayList collectionPropertyMaps, IList parameters) { IDomainMap domainMap; IClassMap classMap; IColumnMap columnMap; ITableMap tableMap; object refObj; IObjectManager om; bool ignore; IColumnMap typeColMap; string paramName; domainMap = m_SqlEngineManager.Context.DomainMap; classMap = domainMap.MustGetClassMap(obj.GetType()); om = m_SqlEngineManager.Context.ObjectManager; tableMap = classMap.MustGetTableMap(); SqlInsertStatement insert = new SqlInsertStatement(tableMap.SourceMap); SqlTableAlias table = insert.GetSqlTableAlias(tableMap); insert.SqlInsertClause.SqlTable = table.SqlTable; foreach (IPropertyMap propertyMap in classMap.GetAllPropertyMaps()) { if (!propertyMap.IsSlave) { if (propertyMap.IsCollection) { if (!propertyMap.IsReadOnly) collectionPropertyMaps.Add(propertyMap); } else { ignore = false; if (propertyMap.GetColumnMap().IsAutoIncrease && this.AutoIncreaserStrategy == AutoIncreaserStrategy.SelectNewIdentity) ignore = true; //HACK: roger fixed the timestamp bug if (propertyMap.GetColumnMap().SpecificDataType == "TIMESTAMP") ignore = true; else if (!(propertyMap.ReferenceType == ReferenceType.None)) { refObj = om.GetPropertyValue(obj, propertyMap.Name); if (refObj != null) { if (om.GetObjectStatus(refObj) == ObjectStatus.UpForCreation) { ignore = true; if (!propertyMap.IsReadOnly) stillDirty.Add(propertyMap); } } } if (!(ignore)) { if (!(propertyMap.MustGetTableMap() == tableMap)) { nonPrimaryPropertyMaps.Add(propertyMap); } else { if (!(ignore)) { columnMap = propertyMap.GetColumnMap(); SqlColumnAlias column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap); SqlParameter param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); insert.AddSqlColumnAndValue(column, param); propertyNames.Add(propertyMap.Name); foreach (IColumnMap iColumnMap in propertyMap.GetAdditionalColumnMaps()) { columnMap = iColumnMap; column = table.GetSqlColumnAlias(columnMap); paramName = GetParameterName(propertyMap, columnMap); param = AddSqlParameter(insert, parameters, paramName, obj, propertyMap, om.GetPropertyValue(obj, propertyMap.Name), columnMap); insert.AddSqlColumnAndValue(column, param); } } } } } } } typeColMap = classMap.GetTypeColumnMap(); if (typeColMap != null) { SqlColumnAlias typeColumn = table.GetSqlColumnAlias(typeColMap); paramName = GetParameterName(classMap, "Type_"); SqlParameter param = AddSqlParameter(insert, parameters, paramName, obj, null, classMap.TypeValue, typeColMap, true); insert.AddSqlColumnAndValue(typeColumn, param); } return GenerateSql(insert); }