コード例 #1
0
 public virtual void Visited(SqlInsertStatement insertStatement)
 {
 }
コード例 #2
0
        public virtual void Visiting(SqlInsertStatement insertStatement)
        {
            insertStatement.SqlInsertClause.Accept(this);
            if (insertStatement.DefaultValues)
                sqlBuilder.Append(" Default Values");
            else
            {
                if (insertStatement.SqlColumnList.Count > 0)
                {
                    sqlBuilder.Append(" (");
                    foreach (SqlColumn sqlColumn in insertStatement.SqlColumnList)
                    {
                        sqlColumn.Accept(this);
                        sqlBuilder.Append(", ");
                    }

                    sqlBuilder.Length -= 2;
                    sqlBuilder.Append(") Values (");
                    foreach (SqlExpression sqlExpression in insertStatement.ValueList)
                    {
                        sqlExpression.Accept(this);
                        sqlBuilder.Append(", ");
                    }
                    sqlBuilder.Length -= 2;
                    sqlBuilder.Append(")");
                }
            }
        }
コード例 #3
0
 public SqlInsertClause(SqlInsertStatement sqlInsertStatement)
     : base(sqlInsertStatement)
 {
 }
コード例 #4
0
 public SqlInsertClause(SqlInsertStatement sqlInsertStatement) : base(sqlInsertStatement)
 {
 }
コード例 #5
0
		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);
		}
コード例 #6
0
		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);
		}
コード例 #7
0
		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);
		}