Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5665/NHibernate/Sql Modified Files: ANSIJoinFragment.cs InFragment.cs JoinFragment.cs OracleJoinFragment.cs OracleOuterJoinFragment.cs QueryJoinFragment.cs QuerySelect.cs Log Message: synched the Sql parts used by Hql. Removed OuterJoin files because they were not in H2.0.3 and could not find them used anywhere by NH Index: QueryJoinFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/QueryJoinFragment.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** QueryJoinFragment.cs 19 Apr 2004 04:32:30 -0000 1.3 --- QueryJoinFragment.cs 30 Apr 2004 13:10:18 -0000 1.4 *************** *** 10,51 **** /// Summary description for QueryJoinFragment. /// </summary> ! public class QueryJoinFragment : JoinFragment { ! private StringBuilder afterFrom = new StringBuilder(); private StringBuilder afterWhere = new StringBuilder(); private Dialect.Dialect dialect; ! public QueryJoinFragment(Dialect.Dialect dialect) { this.dialect = dialect; } ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) { ! if (joinType!=JoinType.InnerJoin) { ! //TODO: get right impl for dialect JoinFragment jf = dialect.CreateOuterJoinFragment(); jf.AddJoin(tableName, alias, fkColumns, pkColumns, joinType); AddFragment(jf); } ! else { AddCrossJoin(tableName, alias); ! AddCondition(alias, fkColumns, pkColumns); } } ! public override string ToFromFragmentString { get { return afterFrom.ToString(); } } ! public override string ToWhereFragmentString { get { return afterWhere.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) { afterFrom.Append(fromFragment); afterWhere.Append(whereFragment); } ! public override JoinFragment Copy() { ! QueryJoinFragment copy = new QueryJoinFragment(dialect); copy.afterFrom = new StringBuilder( afterFrom.ToString() ); copy.afterWhere = new StringBuilder( afterWhere.ToString() ); --- 10,71 ---- /// Summary description for QueryJoinFragment. /// </summary> ! public class QueryJoinFragment : JoinFragment ! { private StringBuilder afterFrom = new StringBuilder(); private StringBuilder afterWhere = new StringBuilder(); private Dialect.Dialect dialect; + private bool useThetaStyleInnerJoins; ! [Obsolete("Use the ctor with Dialect and bool as the parameters. This will be removed.")] ! public QueryJoinFragment(Dialect.Dialect dialect) : this (dialect, false) ! { ! } ! ! public QueryJoinFragment(Dialect.Dialect dialect, bool useThetaStyleInnerJoins) ! { this.dialect = dialect; + this.useThetaStyleInnerJoins = useThetaStyleInnerJoins; } ! ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) ! { ! AddJoin(tableName, alias, alias, fkColumns, pkColumns, joinType); ! } ! ! public void AddJoin(string tableName, string alias, string concreteAlias, string[] fkColumns, string[] pkColumns, JoinType joinType) ! { ! if (!useThetaStyleInnerJoins || joinType!=JoinType.InnerJoin) ! { JoinFragment jf = dialect.CreateOuterJoinFragment(); jf.AddJoin(tableName, alias, fkColumns, pkColumns, joinType); AddFragment(jf); } ! else ! { AddCrossJoin(tableName, alias); ! AddCondition(concreteAlias, fkColumns, pkColumns); } } ! public override string ToFromFragmentString ! { get { return afterFrom.ToString(); } } ! public override string ToWhereFragmentString ! { get { return afterWhere.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) ! { afterFrom.Append(fromFragment); afterWhere.Append(whereFragment); } ! public override JoinFragment Copy() ! { ! QueryJoinFragment copy = new QueryJoinFragment(dialect, useThetaStyleInnerJoins); copy.afterFrom = new StringBuilder( afterFrom.ToString() ); copy.afterWhere = new StringBuilder( afterWhere.ToString() ); *************** *** 53,58 **** } ! public override void AddCondition(string alias, string[] columns, string condition) { ! for ( int i=0; i<columns.Length; i++ ) { afterWhere.Append(" and ") .Append(alias) --- 73,80 ---- } ! public override void AddCondition(string alias, string[] columns, string condition) ! { ! for ( int i=0; i<columns.Length; i++ ) ! { afterWhere.Append(" and ") .Append(alias) *************** *** 64,68 **** ! public override void AddCrossJoin(string tableName, string alias) { afterFrom.Append(StringHelper.CommaSpace) .Append(tableName) --- 86,91 ---- ! public override void AddCrossJoin(string tableName, string alias) ! { afterFrom.Append(StringHelper.CommaSpace) .Append(tableName) *************** *** 71,75 **** } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) { for ( int j=0; j<fkColumns.Length; j++) { afterWhere.Append(" and ") --- 94,99 ---- } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) ! { for ( int j=0; j<fkColumns.Length; j++) { afterWhere.Append(" and ") *************** *** 82,86 **** } ! public override void AddCondition(string condition) { if ( afterFrom.ToString().IndexOf( condition.Trim() ) < 0 && --- 106,111 ---- } ! public override void AddCondition(string condition) ! { if ( afterFrom.ToString().IndexOf( condition.Trim() ) < 0 && Index: ANSIJoinFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/ANSIJoinFragment.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ANSIJoinFragment.cs 27 Feb 2003 23:33:28 -0000 1.1 --- ANSIJoinFragment.cs 30 Apr 2004 13:10:17 -0000 1.2 *************** *** 3,15 **** using NHibernate.Util; ! namespace NHibernate.Sql { ! ! public class ANSIJoinFragment : JoinFragment { private StringBuilder buffer = new StringBuilder(); private StringBuilder conditions = new StringBuilder(); ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) { string joinString = null; ! switch (joinType) { case JoinType.InnerJoin: joinString = " inner join "; --- 3,21 ---- using NHibernate.Util; ! namespace NHibernate.Sql ! { ! /// <summary> ! /// An ANSI-style Join. ! /// </summary> ! public class ANSIJoinFragment : JoinFragment ! { private StringBuilder buffer = new StringBuilder(); private StringBuilder conditions = new StringBuilder(); ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) ! { string joinString = null; ! switch (joinType) ! { case JoinType.InnerJoin: joinString = " inner join "; *************** *** 24,27 **** --- 30,35 ---- joinString = " full outer join "; break; + default: + throw new AssertionFailure("undefind join type"); } *************** *** 32,36 **** .Append(" on "); ! for (int j=0; j<fkColumns.Length; j++) { if (fkColumns[j].IndexOf('.')<1) throw new AssertionFailure("missing alias"); buffer.Append( fkColumns[j] ) --- 40,45 ---- .Append(" on "); ! for (int j=0; j<fkColumns.Length; j++) ! { if (fkColumns[j].IndexOf('.')<1) throw new AssertionFailure("missing alias"); buffer.Append( fkColumns[j] ) *************** *** 43,60 **** } ! public override string ToFromFragmentString { get { return buffer.ToString(); } } ! public override string ToWhereFragmentString { get { return conditions.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) { buffer.Append(fromFragment); //where fragment must be empty! } ! public override JoinFragment Copy() { ANSIJoinFragment copy = new ANSIJoinFragment(); copy.buffer = new StringBuilder( buffer.ToString() ); --- 52,73 ---- } ! public override string ToFromFragmentString ! { get { return buffer.ToString(); } } ! public override string ToWhereFragmentString ! { get { return conditions.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) ! { buffer.Append(fromFragment); //where fragment must be empty! } ! public override JoinFragment Copy() ! { ANSIJoinFragment copy = new ANSIJoinFragment(); copy.buffer = new StringBuilder( buffer.ToString() ); *************** *** 62,67 **** } ! public override void AddCondition(string alias, string[] columns, string condition) { ! for (int i=0; i<columns.Length; i++) { conditions.Append(" and ") .Append(alias) --- 75,82 ---- } ! public override void AddCondition(string alias, string[] columns, string condition) ! { ! for (int i=0; i<columns.Length; i++) ! { conditions.Append(" and ") .Append(alias) *************** *** 72,76 **** } ! public override void AddCrossJoin(string tableName, string alias) { buffer.Append(StringHelper.CommaSpace) .Append(tableName) --- 87,92 ---- } ! public override void AddCrossJoin(string tableName, string alias) ! { buffer.Append(StringHelper.CommaSpace) .Append(tableName) *************** *** 79,87 **** } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) { throw new NotSupportedException(); } ! public override void AddCondition(string condition) { throw new NotSupportedException(); } --- 95,105 ---- } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) ! { throw new NotSupportedException(); } ! public override void AddCondition(string condition) ! { throw new NotSupportedException(); } Index: QuerySelect.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/QuerySelect.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** QuerySelect.cs 19 Apr 2004 04:31:04 -0000 1.4 --- QuerySelect.cs 30 Apr 2004 13:10:18 -0000 1.5 *************** *** 6,15 **** using NHibernate.Util; ! namespace NHibernate.Sql { /// <summary> /// Summary description for QuerySelect. /// </summary> ! public class QuerySelect { ! private JoinFragment joins; private StringBuilder select = new StringBuilder(); --- 6,16 ---- using NHibernate.Util; ! namespace NHibernate.Sql ! { /// <summary> /// Summary description for QuerySelect. /// </summary> ! public class QuerySelect ! { private JoinFragment joins; private StringBuilder select = new StringBuilder(); *************** *** 22,27 **** private static readonly IList dontSpace = new ArrayList(); ! static QuerySelect() { ! //dontSpace.add("'"); dontSpace.Add("."); --- 23,28 ---- private static readonly IList dontSpace = new ArrayList(); ! static QuerySelect() ! { //dontSpace.add("'"); dontSpace.Add("."); *************** *** 51,66 **** } ! public QuerySelect(Dialect.Dialect dialect) { ! joins = new QueryJoinFragment(dialect); } ! public JoinFragment JoinFragment { get { return joins; } } ! public void AddSelectFragmentString(string fragment) { if ( fragment.Length>0 && fragment[0]==',' ) fragment = fragment.Substring(1); fragment = fragment.Trim(); ! if ( fragment.Length>0 ) { if ( select.Length>0 ) select.Append(StringHelper.CommaSpace); select.Append(fragment); --- 52,71 ---- } ! public QuerySelect(Dialect.Dialect dialect) ! { ! joins = new QueryJoinFragment(dialect, false); } ! public JoinFragment JoinFragment ! { get { return joins; } } ! public void AddSelectFragmentString(string fragment) ! { if ( fragment.Length>0 && fragment[0]==',' ) fragment = fragment.Substring(1); fragment = fragment.Trim(); ! if ( fragment.Length>0 ) ! { if ( select.Length>0 ) select.Append(StringHelper.CommaSpace); select.Append(fragment); *************** *** 68,102 **** } ! public void AddSelectColumn(string columnName, string alias) { AddSelectFragmentString(columnName + ' ' + alias); } ! public bool Distinct { set { this.distinct = value; } } ! public ICollection WhereTokens { //if ( conjunctiveWhere.length()>0 ) conjunctiveWhere.append(" and "); set { AppendTokens(where, value); } } ! public ICollection GroupByTokens { //if ( groupBy.length()>0 ) groupBy.append(" and "); set { AppendTokens(groupBy, value); } } ! public ICollection OrderByTokens { //if ( orderBy.length()>0 ) orderBy.append(" and "); set { AppendTokens(orderBy, value); } } ! public ICollection HavingTokens { //if ( having.length()>0 ) having.append(" and "); set { AppendTokens(having, value); } } ! public string ToQueryString() { StringBuilder buf = new StringBuilder(50) .Append("select "); if (distinct) buf.Append("distinct "); --- 73,121 ---- } ! public void AddSelectColumn(string columnName, string alias) ! { AddSelectFragmentString(columnName + ' ' + alias); } ! public bool Distinct ! { set { this.distinct = value; } } ! public ICollection WhereTokens ! { //if ( conjunctiveWhere.length()>0 ) conjunctiveWhere.append(" and "); set { AppendTokens(where, value); } } ! public ICollection GroupByTokens ! { //if ( groupBy.length()>0 ) groupBy.append(" and "); set { AppendTokens(groupBy, value); } } ! public ICollection OrderByTokens ! { //if ( orderBy.length()>0 ) orderBy.append(" and "); set { AppendTokens(orderBy, value); } } ! public ICollection HavingTokens ! { //if ( having.length()>0 ) having.append(" and "); set { AppendTokens(having, value); } } ! public void AddOrderBy(string orderByString) ! { ! if( orderBy.Length > 0 ) orderBy.Append(StringHelper.CommaSpace); ! orderBy.Append(orderByString); ! } ! ! public string ToQueryString() ! { StringBuilder buf = new StringBuilder(50) .Append("select "); + if (distinct) buf.Append("distinct "); *************** *** 114,141 **** .Append(" from") .Append( from ); string part1 = joins.ToWhereFragmentString.Trim(); string part2 = where.ToString().Trim(); bool hasPart1 = part1.Length > 0; bool hasPart2 = part2.Length > 0; if (hasPart1 || hasPart2) buf.Append(" where "); if (hasPart1) buf.Append( part1.Substring(4) ); ! if (hasPart2) { if (hasPart1) buf.Append(" and ("); buf.Append(part2); if (hasPart1) buf.Append(")"); } ! if ( groupBy.Length > 0 ) buf.Append(" group by ").Append(groupBy); ! if ( having.Length > 0 ) buf.Append(" having ").Append(having); ! if ( orderBy.Length > 0 ) buf.Append(" order by ").Append(orderBy); return buf.ToString(); } ! private void AppendTokens(StringBuilder buf, ICollection iter) { ! bool lastSpaceable=true; ! foreach(string token in iter) { bool spaceable = !dontSpace.Contains(token); ! if (spaceable && lastSpaceable) buf.Append(' '); lastSpaceable = spaceable; buf.Append(token); } } --- 133,174 ---- .Append(" from") .Append( from ); + string part1 = joins.ToWhereFragmentString.Trim(); string part2 = where.ToString().Trim(); bool hasPart1 = part1.Length > 0; bool hasPart2 = part2.Length > 0; + if (hasPart1 || hasPart2) buf.Append(" where "); if (hasPart1) buf.Append( part1.Substring(4) ); ! if (hasPart2) ! { if (hasPart1) buf.Append(" and ("); buf.Append(part2); if (hasPart1) buf.Append(")"); } ! if ( groupBy.Length > 0 ) buf.Append(" group by ").Append( groupBy.ToString() ); ! if ( having.Length > 0 ) buf.Append(" having ").Append( having.ToString() ); ! if ( orderBy.Length > 0 ) buf.Append(" order by ").Append( orderBy.ToString() ); return buf.ToString(); } ! private void AppendTokens(StringBuilder buf, ICollection iter) ! { ! bool lastSpaceable = true; ! bool lastQuoted = false; ! ! foreach(string token in iter) ! { bool spaceable = !dontSpace.Contains(token); ! bool quoted = token.StartsWith("'"); ! ! if (spaceable && lastSpaceable) ! { ! if (!quoted || !lastQuoted) buf.Append(' '); ! } ! lastSpaceable = spaceable; buf.Append(token); + lastQuoted = token.EndsWith("'"); } } Index: JoinFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/JoinFragment.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** JoinFragment.cs 13 Mar 2003 21:58:49 -0000 1.2 --- JoinFragment.cs 30 Apr 2004 13:10:18 -0000 1.3 *************** *** 1,7 **** using System; ! namespace NHibernate.Sql { ! ! public enum JoinType { None = -666, InnerJoin = 0, --- 1,8 ---- using System; ! namespace NHibernate.Sql ! { ! public enum JoinType ! { None = -666, InnerJoin = 0, *************** *** 11,15 **** } ! public abstract class JoinFragment { public abstract void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType); --- 12,20 ---- } ! /// <summary> ! /// Represents a SQL <c>JOIN</c> ! /// </summary> ! public abstract class JoinFragment ! { public abstract void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType); *************** *** 24,28 **** public abstract JoinFragment Copy(); ! public void AddFragment(JoinFragment ojf) { AddJoins( ojf.ToFromFragmentString, ojf.ToWhereFragmentString ); } --- 29,34 ---- public abstract JoinFragment Copy(); ! public void AddFragment(JoinFragment ojf) ! { AddJoins( ojf.ToFromFragmentString, ojf.ToWhereFragmentString ); } Index: OracleJoinFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/OracleJoinFragment.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OracleJoinFragment.cs 27 Feb 2003 23:33:28 -0000 1.1 --- OracleJoinFragment.cs 30 Apr 2004 13:10:18 -0000 1.2 *************** *** 3,41 **** using NHibernate.Util; ! namespace NHibernate.Sql { ! ! public class OracleJoinFragment : JoinFragment { private StringBuilder afterFrom = new StringBuilder(); private StringBuilder afterWhere = new StringBuilder(); ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) { AddCrossJoin(tableName, alias); ! for (int j=0; j<fkColumns.Length; j++) { afterWhere.Append(" and ") .Append( fkColumns[j] ); if (joinType == JoinType.RightOuterJoin || joinType == JoinType.FullJoin) afterWhere.Append("(+)"); afterWhere.Append('=') .Append(alias) .Append(StringHelper.Dot) .Append( pkColumns[j] ); if (joinType == JoinType.LeftOuterJoin || joinType == JoinType.FullJoin) afterWhere.Append("(+)"); } } ! public override string ToFromFragmentString { get { return afterFrom.ToString(); } } ! public override string ToWhereFragmentString { get { return afterWhere.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) { afterFrom.Append(fromFragment); afterWhere.Append(whereFragment); } ! public override JoinFragment Copy() { OracleJoinFragment copy = new OracleJoinFragment(); copy.afterFrom = new StringBuilder( afterFrom.ToString() ); --- 3,53 ---- using NHibernate.Util; ! namespace NHibernate.Sql ! { ! /// <summary> ! /// An Oracle-style (theta) Join ! /// </summary> ! public class OracleJoinFragment : JoinFragment ! { private StringBuilder afterFrom = new StringBuilder(); private StringBuilder afterWhere = new StringBuilder(); ! public override void AddJoin(string tableName, string alias, string[] fkColumns, string[] pkColumns, JoinType joinType) ! { AddCrossJoin(tableName, alias); ! for (int j=0; j<fkColumns.Length; j++) ! { afterWhere.Append(" and ") .Append( fkColumns[j] ); if (joinType == JoinType.RightOuterJoin || joinType == JoinType.FullJoin) afterWhere.Append("(+)"); + afterWhere.Append('=') .Append(alias) .Append(StringHelper.Dot) .Append( pkColumns[j] ); + if (joinType == JoinType.LeftOuterJoin || joinType == JoinType.FullJoin) afterWhere.Append("(+)"); } } ! public override string ToFromFragmentString ! { get { return afterFrom.ToString(); } } ! public override string ToWhereFragmentString ! { get { return afterWhere.ToString(); } } ! public override void AddJoins(string fromFragment, string whereFragment) ! { afterFrom.Append(fromFragment); afterWhere.Append(whereFragment); } ! public override JoinFragment Copy() ! { OracleJoinFragment copy = new OracleJoinFragment(); copy.afterFrom = new StringBuilder( afterFrom.ToString() ); *************** *** 44,49 **** } ! public override void AddCondition(string alias, string[] columns, string condition) { ! for (int i=0; i<columns.Length; i++) { afterWhere.Append(" and ") .Append(alias) --- 56,63 ---- } ! public override void AddCondition(string alias, string[] columns, string condition) ! { ! for (int i=0; i<columns.Length; i++) ! { afterWhere.Append(" and ") .Append(alias) *************** *** 54,58 **** } ! public override void AddCrossJoin(string tableName, string alias) { afterFrom.Append(StringHelper.CommaSpace) .Append(tableName) --- 68,73 ---- } ! public override void AddCrossJoin(string tableName, string alias) ! { afterFrom.Append(StringHelper.CommaSpace) .Append(tableName) *************** *** 61,69 **** } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) { throw new NotSupportedException(); } ! public override void AddCondition(string condition) { throw new NotSupportedException(); } --- 76,86 ---- } ! public override void AddCondition(string alias, string[] fkColumns, string[] pkColumns) ! { throw new NotSupportedException(); } ! public override void AddCondition(string condition) ! { throw new NotSupportedException(); } Index: InFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/InFragment.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** InFragment.cs 6 Apr 2004 12:16:41 -0000 1.3 --- InFragment.cs 30 Apr 2004 13:10:18 -0000 1.4 *************** *** 4,55 **** using NHibernate.Util; ! namespace NHibernate.Sql { ! /// <summary> /// Represents an <c>... in (...)</c> expression /// </summary> ! public class InFragment { private string columnName; private ArrayList values = new ArrayList(); ! public InFragment AddValue(string value) { values.Add(value); return this; } ! public InFragment SetColumn(string columnName) { this.columnName = columnName; return this; } ! public InFragment SetColumn(string alias, string columnName) { ! return SetColumn( this.columnName = alias + StringHelper.Dot + columnName ); } ! public string ToFragmentString() { StringBuilder buf = new StringBuilder(values.Count * 5); buf.Append(columnName); ! if (values.Count > 1) { bool allowNull = false; buf.Append(" in ("); ! for(int i=0; i<values.Count; i++) { ! if("null".Equals(values[i])) allowNull = true; ! else { buf.Append( values[i] ); if ( i<values.Count-1) buf.Append(StringHelper.CommaSpace); } } buf.Append(StringHelper.ClosedParen); ! if(allowNull) buf.Insert(0, " is null or ") .Insert(0, columnName) .Insert(0, StringHelper.OpenParen) .Append(StringHelper.ClosedParen); ! } else { string value = values[0] as string; ! if ( "null".Equals(value) ) { buf.Append(" is null"); ! } else { buf.Append("=").Append(values[0]); } --- 4,75 ---- using NHibernate.Util; ! namespace NHibernate.Sql ! { /// <summary> /// Represents an <c>... in (...)</c> expression /// </summary> ! public class InFragment ! { private string columnName; private ArrayList values = new ArrayList(); ! public InFragment AddValue(string value) ! { values.Add(value); return this; } ! public InFragment SetColumn(string columnName) ! { this.columnName = columnName; return this; } ! public InFragment SetColumn(string alias, string columnName) ! { ! this.columnName = alias + StringHelper.Dot + columnName; ! return SetColumn( this.columnName ); } ! public string ToFragmentString() ! { StringBuilder buf = new StringBuilder(values.Count * 5); buf.Append(columnName); ! if (values.Count > 1) ! { bool allowNull = false; buf.Append(" in ("); ! for(int i=0; i<values.Count; i++) ! { ! if("null".Equals(values[i])) ! { allowNull = true; ! } ! ! else ! { buf.Append( values[i] ); if ( i<values.Count-1) buf.Append(StringHelper.CommaSpace); } } + buf.Append(StringHelper.ClosedParen); ! if(allowNull) ! { buf.Insert(0, " is null or ") .Insert(0, columnName) .Insert(0, StringHelper.OpenParen) .Append(StringHelper.ClosedParen); ! } ! } ! else ! { string value = values[0] as string; ! if ( "null".Equals(value) ) ! { buf.Append(" is null"); ! } ! else ! { buf.Append("=").Append(values[0]); } Index: OracleOuterJoinFragment.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Sql/OracleOuterJoinFragment.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OracleOuterJoinFragment.cs 18 Feb 2003 19:11:48 -0000 1.1 --- OracleOuterJoinFragment.cs 30 Apr 2004 13:10:18 -0000 1.2 *************** *** 5,8 **** --- 5,9 ---- namespace NHibernate.Sql { + //TODO: not in H2.0.3 - is this used anywhere???? public class OracleOuterJoinFragment : OuterJoinFragment { private StringBuilder afterFrom = new StringBuilder(); |