From: Michael D. <mik...@us...> - 2004-09-13 07:22:48
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16087/NHibernate/SqlCommand Modified Files: SqlDeleteBuilder.cs SqlInsertBuilder.cs SqlSelectBuilder.cs SqlStringBuilder.cs SqlUpdateBuilder.cs Log Message: Set Initial Capacity on SqlStringBuilder in ToSqlString() methods. Index: SqlStringBuilder.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand/SqlStringBuilder.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SqlStringBuilder.cs 18 Aug 2004 20:15:04 -0000 1.4 --- SqlStringBuilder.cs 13 Sep 2004 07:22:38 -0000 1.5 *************** *** 187,191 **** { ! if(prefix!=null && prefix!=String.Empty) sqlParts.Add(prefix); bool opNeeded = false; --- 187,191 ---- { ! if( prefix!=null ) sqlParts.Add(prefix); bool opNeeded = false; *************** *** 209,213 **** } ! if(postfix!=null && postfix!=String.Empty) sqlParts.Add(postfix); return this; --- 209,213 ---- } ! if( postfix!=null ) sqlParts.Add(postfix); return this; Index: SqlDeleteBuilder.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand/SqlDeleteBuilder.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SqlDeleteBuilder.cs 30 Apr 2004 04:43:08 -0000 1.2 --- SqlDeleteBuilder.cs 13 Sep 2004 07:22:38 -0000 1.3 *************** *** 9,18 **** using NHibernate.Type; ! namespace NHibernate.SqlCommand { /// <summary> /// A class that builds an <c>DELETE</c> sql statement. /// </summary> ! public class SqlDeleteBuilder: SqlBaseBuilder, ISqlStringBuilder { ! string tableName; --- 9,20 ---- using NHibernate.Type; ! namespace NHibernate.SqlCommand ! { /// <summary> /// A class that builds an <c>DELETE</c> sql statement. /// </summary> ! public class SqlDeleteBuilder: SqlBaseBuilder, ISqlStringBuilder ! { ! private static readonly log4net.ILog log = log4net.LogManager.GetLogger( typeof(SqlDeleteBuilder) ); string tableName; *************** *** 22,30 **** IList whereStrings = new ArrayList(); ! public SqlDeleteBuilder(ISessionFactoryImplementor factory): base(factory){ ! } ! public SqlDeleteBuilder SetTableName(string tableName) { this.tableName = tableName; return this; --- 24,33 ---- IList whereStrings = new ArrayList(); ! public SqlDeleteBuilder(ISessionFactoryImplementor factory): base(factory) ! { } ! public SqlDeleteBuilder SetTableName(string tableName) ! { this.tableName = tableName; return this; *************** *** 38,42 **** /// <param name="identityType">The IType of the Identity Property.</param> /// <returns>The SqlDeleteBuilder.</returns> ! public SqlDeleteBuilder SetIdentityColumn(string[] columnNames, IType identityType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, identityType); --- 41,46 ---- /// <param name="identityType">The IType of the Identity Property.</param> /// <returns>The SqlDeleteBuilder.</returns> ! public SqlDeleteBuilder SetIdentityColumn(string[] columnNames, IType identityType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, identityType); *************** *** 52,56 **** /// <param name="versionType">The IVersionType of the Version Property.</param> /// <returns>The SqlDeleteBuilder.</returns> ! public SqlDeleteBuilder SetVersionColumn(string[] columnNames, IVersionType versionType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, versionType); --- 56,61 ---- /// <param name="versionType">The IVersionType of the Version Property.</param> /// <returns>The SqlDeleteBuilder.</returns> ! public SqlDeleteBuilder SetVersionColumn(string[] columnNames, IVersionType versionType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, versionType); *************** *** 67,71 **** /// <param name="op">The operator to put between the column name and value.</param> /// <returns>The SqlDeleteBuilder</returns> ! public SqlDeleteBuilder AddWhereFragment(string[] columnNames, IType type, string op) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, type); whereStrings.Add(ToWhereString(columnNames, parameters, op)); --- 72,77 ---- /// <param name="op">The operator to put between the column name and value.</param> /// <returns>The SqlDeleteBuilder</returns> ! public SqlDeleteBuilder AddWhereFragment(string[] columnNames, IType type, string op) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, type); whereStrings.Add(ToWhereString(columnNames, parameters, op)); *************** *** 87,108 **** #region ISqlStringBuilder Members ! public SqlString ToSqlString() { ! // TODO: add default capacity ! SqlStringBuilder sqlBuilder = new SqlStringBuilder(); ! sqlBuilder.Add("DELETE FROM ") ! .Add(tableName) ! .Add(" WHERE "); ! if(whereStrings.Count > 1) { sqlBuilder.Add( (SqlString[])((ArrayList)whereStrings).ToArray(typeof(SqlString)), null, "AND", null, false); } ! else { sqlBuilder.Add((SqlString)whereStrings[0], null, null, null, false) ; } return sqlBuilder.ToSqlString(); } --- 93,141 ---- #region ISqlStringBuilder Members ! public SqlString ToSqlString() ! { ! // will for sure have 3 parts and then each item in the WhereStrings ! int initialCapacity = 3; ! // add an "AND" for each whereString except the first one. ! initialCapacity += (whereStrings.Count -1); ! ! for( int i=0; i<whereStrings.Count; i++ ) ! { ! initialCapacity += ((SqlString)whereStrings[i]).Count; ! } ! ! SqlStringBuilder sqlBuilder = new SqlStringBuilder( initialCapacity + 2 ); ! sqlBuilder.Add( "DELETE FROM " ) ! .Add( tableName ) ! .Add( " WHERE " ); ! if(whereStrings.Count > 1) ! { sqlBuilder.Add( (SqlString[])((ArrayList)whereStrings).ToArray(typeof(SqlString)), null, "AND", null, false); } ! else ! { sqlBuilder.Add((SqlString)whereStrings[0], null, null, null, false) ; } + if(log.IsDebugEnabled) + { + if( initialCapacity < sqlBuilder.Count ) + { + log.Debug( + "The initial capacity was set too low at: " + initialCapacity + " for the DeleteSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName ); + } + else if( initialCapacity > 16 && ((float)initialCapacity/sqlBuilder.Count) > 1.2 ) + { + log.Debug( + "The initial capacity was set too high at: " + initialCapacity + " for the DeleteSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName); + } + } return sqlBuilder.ToSqlString(); } Index: SqlUpdateBuilder.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand/SqlUpdateBuilder.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SqlUpdateBuilder.cs 30 Apr 2004 04:43:08 -0000 1.2 --- SqlUpdateBuilder.cs 13 Sep 2004 07:22:38 -0000 1.3 *************** *** 15,19 **** /// A class that builds an <c>UPDATE</c> sql statement. /// </summary> ! public class SqlUpdateBuilder: SqlBaseBuilder, ISqlStringBuilder { string tableName; --- 15,21 ---- /// A class that builds an <c>UPDATE</c> sql statement. /// </summary> ! public class SqlUpdateBuilder: SqlBaseBuilder, ISqlStringBuilder ! { ! private static readonly log4net.ILog log = log4net.LogManager.GetLogger( typeof(SqlUpdateBuilder) ); string tableName; *************** *** 27,35 **** IList whereStrings = new ArrayList(); ! public SqlUpdateBuilder(ISessionFactoryImplementor factory) : base(factory) { ! } ! public SqlUpdateBuilder SetTableName(string tableName) { this.tableName = tableName; return this; --- 29,38 ---- IList whereStrings = new ArrayList(); ! public SqlUpdateBuilder(ISessionFactoryImplementor factory) : base(factory) ! { } ! public SqlUpdateBuilder SetTableName(string tableName) ! { this.tableName = tableName; return this; *************** *** 45,49 **** /// <param name="literalType">The NHibernateType to use to convert the value to a sql string.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumn(string columnName, object val, ILiteralType literalType) { return AddColumn(columnName, literalType.ObjectToSQLString(val)); } --- 48,53 ---- /// <param name="literalType">The NHibernateType to use to convert the value to a sql string.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumn(string columnName, object val, ILiteralType literalType) ! { return AddColumn(columnName, literalType.ObjectToSQLString(val)); } *************** *** 56,60 **** /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumn(string columnName, string val) { columnNames.Add(columnName); --- 60,65 ---- /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumn(string columnName, string val) ! { columnNames.Add(columnName); *************** *** 70,74 **** /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumns(string[] columnName, string val) { for(int i = 0; i < columnName.Length; i++) { --- 75,80 ---- /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumns(string[] columnName, string val) ! { for(int i = 0; i < columnName.Length; i++) { *************** *** 86,90 **** /// <param name="propertyType">The IType of the property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumns(string[] columnNames, IType propertyType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, propertyType); --- 92,97 ---- /// <param name="propertyType">The IType of the property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder AddColumns(string[] columnNames, IType propertyType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, propertyType); *************** *** 103,107 **** /// <param name="identityType">The IType of the Identity Property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder SetIdentityColumn(string[] columnNames, IType identityType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, identityType); --- 110,115 ---- /// <param name="identityType">The IType of the Identity Property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder SetIdentityColumn(string[] columnNames, IType identityType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, identityType); *************** *** 117,121 **** /// <param name="versionType">The IVersionType of the Version Property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder SetVersionColumn(string[] columnNames, IVersionType versionType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, versionType); --- 125,130 ---- /// <param name="versionType">The IVersionType of the Version Property.</param> /// <returns>The SqlUpdateBuilder.</returns> ! public SqlUpdateBuilder SetVersionColumn(string[] columnNames, IVersionType versionType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, versionType); *************** *** 132,136 **** /// <param name="op">The operator to put between the column name and value.</param> /// <returns>The SqlUpdateBuilder</returns> ! public SqlUpdateBuilder AddWhereFragment(string[] columnNames, IType type, string op) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, type); whereStrings.Add(ToWhereString(columnNames, parameters, op)); --- 141,146 ---- /// <param name="op">The operator to put between the column name and value.</param> /// <returns>The SqlUpdateBuilder</returns> ! public SqlUpdateBuilder AddWhereFragment(string[] columnNames, IType type, string op) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, type); whereStrings.Add(ToWhereString(columnNames, parameters, op)); *************** *** 153,159 **** #region ISqlStringBuilder Members ! public SqlString ToSqlString() { ! // TODO: Add default capacity ! SqlStringBuilder sqlBuilder = new SqlStringBuilder(); bool commaNeeded = false; --- 163,191 ---- #region ISqlStringBuilder Members ! public SqlString ToSqlString() ! { ! // 3 = "UPDATE", tableName, "SET" ! int initialCapacity = 3; ! ! // will have a comma for all but the first column, and then for each column ! // will have a name, " = ", value so mulitply by 3 ! if( columnNames.Count > 0 ) ! { ! initialCapacity += (columnNames.Count - 1) + (columnNames.Count * 3); ! } ! // 1 = "WHERE" ! initialCapacity++; ! ! // the "AND" before all but the first whereString ! if( whereStrings.Count > 0 ) ! { ! initialCapacity += (whereStrings.Count -1); ! for( int i=0; i <whereStrings.Count; i++ ) ! { ! initialCapacity += ((SqlString)whereStrings[i]).Count; ! } ! } ! ! SqlStringBuilder sqlBuilder = new SqlStringBuilder( initialCapacity + 2 ); bool commaNeeded = false; *************** *** 165,170 **** .Add(" SET "); ! for(int i = 0; i < columnNames.Count; i++){ ! if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); commaNeeded = true; --- 197,202 ---- .Add(" SET "); ! for(int i = 0; i < columnNames.Count; i++) ! { if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); commaNeeded = true; *************** *** 177,184 **** Parameter param = columnValue as Parameter; ! if(param!=null) { sqlBuilder.Add(param); } ! else { sqlBuilder.Add((string)columnValue); } --- 209,218 ---- Parameter param = columnValue as Parameter; ! if(param!=null) ! { sqlBuilder.Add(param); } ! else ! { sqlBuilder.Add((string)columnValue); } *************** *** 188,192 **** sqlBuilder.Add(" WHERE "); ! foreach(SqlString whereString in whereStrings) { if(andNeeded) sqlBuilder.Add(" AND "); andNeeded = true; --- 222,227 ---- sqlBuilder.Add(" WHERE "); ! foreach(SqlString whereString in whereStrings) ! { if(andNeeded) sqlBuilder.Add(" AND "); andNeeded = true; *************** *** 196,199 **** --- 231,250 ---- } + if(log.IsDebugEnabled) + { + if( initialCapacity < sqlBuilder.Count ) + { + log.Debug( + "The initial capacity was set too low at: " + initialCapacity + " for the UpdateSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName ); + } + else if( initialCapacity > 16 && ((float)initialCapacity/sqlBuilder.Count) > 1.2 ) + { + log.Debug( + "The initial capacity was set too high at: " + initialCapacity + " for the UpdateSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName); + } + } + return sqlBuilder.ToSqlString(); } Index: SqlSelectBuilder.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand/SqlSelectBuilder.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SqlSelectBuilder.cs 28 Aug 2004 05:26:36 -0000 1.3 --- SqlSelectBuilder.cs 13 Sep 2004 07:22:38 -0000 1.4 *************** *** 17,20 **** --- 17,22 ---- public class SqlSelectBuilder: SqlBaseBuilder, ISqlStringBuilder { + private static readonly log4net.ILog log = log4net.LogManager.GetLogger( typeof(SqlSelectBuilder) ); + private string selectClause; private string fromClause; *************** *** 27,31 **** public SqlSelectBuilder(ISessionFactoryImplementor factory): base(factory) { - } --- 29,32 ---- *************** *** 167,173 **** public SqlString ToSqlString() { ! //TODO: set a default capacity ! SqlStringBuilder sqlBuilder = new SqlStringBuilder(); sqlBuilder.Add("SELECT ") --- 168,185 ---- public SqlString ToSqlString() { + // 4 = the "SELECT", selectClause, "FROM", fromClause are straight strings + // plus the number of parts in outerJoinsAfterFrom SqlString. + // 1 = the "WHERE" + // plus the number of parts in outerJoinsAfterWhere SqlString. + // 2 = the "ORDER BY" and orderByClause + int initialCapacity = 4 + outerJoinsAfterFrom.Count + 1 + outerJoinsAfterWhere.Count + 2; ! // move through each whereSqlString to find the capacity ! for( int i=0; i<whereSqlStrings.Count; i++ ) ! { ! initialCapacity += ((SqlString)whereSqlStrings[i]).Count; ! } ! ! SqlStringBuilder sqlBuilder = new SqlStringBuilder( initialCapacity + 2 ); sqlBuilder.Add("SELECT ") *************** *** 187,191 **** else { ! sqlBuilder.Add((SqlString)whereSqlStrings[0], null, null, null, false); } --- 199,203 ---- else { ! sqlBuilder.Add( (SqlString)whereSqlStrings[0], null, null, null, false ); } *************** *** 198,201 **** --- 210,229 ---- } + if(log.IsDebugEnabled) + { + if( initialCapacity < sqlBuilder.Count ) + { + log.Debug( + "The initial capacity was set too low at: " + initialCapacity + " for the SelectSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + fromClause ); + } + else if( initialCapacity > 16 && ((float)initialCapacity/sqlBuilder.Count) > 1.2 ) + { + log.Debug( + "The initial capacity was set too high at: " + initialCapacity + " for the SelectSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + fromClause ); + } + } + return sqlBuilder.ToSqlString(); Index: SqlInsertBuilder.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/SqlCommand/SqlInsertBuilder.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SqlInsertBuilder.cs 10 Feb 2004 18:38:55 -0000 1.1 --- SqlInsertBuilder.cs 13 Sep 2004 07:22:38 -0000 1.2 *************** *** 10,19 **** using NHibernate.Util; ! namespace NHibernate.SqlCommand { ! /// <summary> /// A class that builds an <c>INSERT</c> sql statement. /// </summary> ! public class SqlInsertBuilder: ISqlStringBuilder { ISessionFactoryImplementor factory; --- 10,21 ---- using NHibernate.Util; ! namespace NHibernate.SqlCommand ! { /// <summary> /// A class that builds an <c>INSERT</c> sql statement. /// </summary> ! public class SqlInsertBuilder: ISqlStringBuilder ! { ! private static readonly log4net.ILog log = log4net.LogManager.GetLogger( typeof(SqlInsertBuilder) ); ISessionFactoryImplementor factory; *************** *** 24,32 **** //SortedList columnValues = new SortedList(); //key=columName, value=string/IParameter ! public SqlInsertBuilder(ISessionFactoryImplementor factory){ this.factory = factory; } ! public SqlInsertBuilder SetTableName(string tableName) { this.tableName = tableName; return this; --- 26,36 ---- //SortedList columnValues = new SortedList(); //key=columName, value=string/IParameter ! public SqlInsertBuilder(ISessionFactoryImplementor factory) ! { this.factory = factory; } ! public SqlInsertBuilder SetTableName(string tableName) ! { this.tableName = tableName; return this; *************** *** 39,46 **** /// <param name="propertyType">The IType of the property.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string[] columnNames, IType propertyType) { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, propertyType); ! for(int i = 0; i < columnNames.Length; i++) { this.columnNames.Add(columnNames[i]); columnValues.Add(parameters[i]); --- 43,52 ---- /// <param name="propertyType">The IType of the property.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string[] columnNames, IType propertyType) ! { Parameter[] parameters = Parameter.GenerateParameters(factory, columnNames, propertyType); ! for(int i = 0; i < columnNames.Length; i++) ! { this.columnNames.Add(columnNames[i]); columnValues.Add(parameters[i]); *************** *** 57,61 **** /// <param name="literalType">The NHibernateType to use to convert the value to a sql string.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string columnName, object val, ILiteralType literalType) { return AddColumn(columnName, literalType.ObjectToSQLString(val)); } --- 63,68 ---- /// <param name="literalType">The NHibernateType to use to convert the value to a sql string.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string columnName, object val, ILiteralType literalType) ! { return AddColumn(columnName, literalType.ObjectToSQLString(val)); } *************** *** 68,73 **** /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string columnName, string val) { ! columnNames.Add(columnName); columnValues.Add(val); --- 75,80 ---- /// <param name="val">A valid sql string to set as the value of the column.</param> /// <returns>The SqlInsertBuilder.</returns> ! public SqlInsertBuilder AddColumn(string columnName, string val) ! { columnNames.Add(columnName); columnValues.Add(val); *************** *** 76,95 **** } - - #region ISqlStringBuilder Members ! public SqlString ToSqlString() { ! //TODO: add a default capacity ! SqlStringBuilder sqlBuilder = new SqlStringBuilder(); sqlBuilder.Add("INSERT INTO ") .Add(tableName); ! ! if(columnNames.Count == 0 ) { sqlBuilder.Add(" ").Add( factory.Dialect.NoColumnsInsertString ); } ! else { sqlBuilder.Add(" ("); --- 83,114 ---- } #region ISqlStringBuilder Members ! public SqlString ToSqlString() ! { ! // 5 = "INSERT INTO", tableName, " (" , ") VALUES (", and ")" ! int initialCapacity = 5; ! ! // 2 = the first column is just the columnName and columnValue ! initialCapacity += 2; ! ! // eachColumn after the first one is 4 because of the ", ", columnName ! // and the ", " columnValue ! if( columnNames.Count > 0 ) ! { ! initialCapacity += ( (columnNames.Count-1) * 4); ! } ! ! SqlStringBuilder sqlBuilder = new SqlStringBuilder( initialCapacity + 2 ); sqlBuilder.Add("INSERT INTO ") .Add(tableName); ! if(columnNames.Count == 0 ) ! { sqlBuilder.Add(" ").Add( factory.Dialect.NoColumnsInsertString ); } ! else ! { sqlBuilder.Add(" ("); *************** *** 98,139 **** bool commaNeeded = false; ! foreach(string columnName in columnNames){ ! // build up the column list if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); sqlBuilder.Add(columnName); commaNeeded = true; - } ! sqlBuilder.Add( ") VALUES ("); commaNeeded = false; ! foreach(object obj in columnValues) { ! if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); commaNeeded = true; Parameter param = obj as Parameter; ! if(param!=null) { sqlBuilder.Add(param); } ! else { sqlBuilder.Add((string)obj); } - - } - sqlBuilder.Add(")"); ! } return sqlBuilder.ToSqlString(); - - } --- 117,168 ---- bool commaNeeded = false; ! foreach(string columnName in columnNames) ! { // build up the column list if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); sqlBuilder.Add(columnName); commaNeeded = true; } ! sqlBuilder.Add( ") VALUES (" ); commaNeeded = false; ! foreach(object obj in columnValues) ! { if(commaNeeded) sqlBuilder.Add(StringHelper.CommaSpace); commaNeeded = true; Parameter param = obj as Parameter; ! if(param!=null) ! { sqlBuilder.Add(param); } ! else ! { sqlBuilder.Add((string)obj); } } sqlBuilder.Add(")"); ! } + if(log.IsDebugEnabled) + { + if( initialCapacity < sqlBuilder.Count ) + { + log.Debug( + "The initial capacity was set too low at: " + initialCapacity + " for the InsertSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName ); + } + else if( initialCapacity > 16 && ((float)initialCapacity/sqlBuilder.Count) > 1.2 ) + { + log.Debug( + "The initial capacity was set too high at: " + initialCapacity + " for the InsertSqlBuilder " + + "that needed a capacity of: " + sqlBuilder.Count + " for the table " + tableName ); + } } return sqlBuilder.ToSqlString(); } |