Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5074
Modified Files:
QueryTranslator.cs WhereParser.cs
Log Message:
Changed handling of boolean ops to be regex based. Fixed error with 'in' HQLs.
Index: WhereParser.cs
===================================================================
RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql/WhereParser.cs,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** WhereParser.cs 27 May 2004 18:49:44 -0000 1.14
--- WhereParser.cs 28 May 2004 09:08:57 -0000 1.15
***************
*** 32,36 ****
private static StringCollection expressionOpeners = new StringCollection(); //tokens that open a sub expression
//TODO: HACK to make this internal for QueryTranslator...
! internal static StringCollection booleanOperators = new StringCollection(); //tokens that would indicate a sub expression is a boolean expression
private static IDictionary negations = new Hashtable();
private Dialect.Dialect d;
--- 32,55 ----
private static StringCollection expressionOpeners = new StringCollection(); //tokens that open a sub expression
//TODO: HACK to make this internal for QueryTranslator...
! private static StringCollection booleanOperators = new StringCollection(); //tokens that would indicate a sub expression is a boolean expression
! private static string booleanOperatorsAsRegEx = string.Empty;
! internal static string BooleanOperatorsAsRegEx
! {
! get
! {
! if (booleanOperatorsAsRegEx.Length != 0)
! return booleanOperatorsAsRegEx;
! StringBuilder sb = new StringBuilder("(?:");
! foreach(string s in booleanOperators)
! {
! sb.Append(s);
! sb.Append("|");
! }
! sb.Remove(sb.Length-1, 1);
! sb.Append(@")[^\w]*$");
! booleanOperatorsAsRegEx = sb.ToString();
! return booleanOperatorsAsRegEx;
! }
! }
private static IDictionary negations = new Hashtable();
private Dialect.Dialect d;
Index: QueryTranslator.cs
===================================================================
RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql/QueryTranslator.cs,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** QueryTranslator.cs 27 May 2004 18:49:43 -0000 1.29
--- QueryTranslator.cs 28 May 2004 09:08:57 -0000 1.30
***************
*** 4,7 ****
--- 4,8 ----
using System.Data;
using System.Text;
+ using System.Text.RegularExpressions;
using System.Reflection;
using System.Runtime.Serialization;
***************
*** 1349,1360 ****
private bool EndsWithBoolOperator(string sqlFragment)
{
! string sql = sqlFragment.Trim();
!
! for(int i = 0; i < WhereParser.booleanOperators.Count; i++)
! {
! if( sql.EndsWith(WhereParser.booleanOperators[i]) ) return true;
! }
!
! return false;
}
}
--- 1350,1355 ----
private bool EndsWithBoolOperator(string sqlFragment)
{
! Regex r = new Regex(WhereParser.BooleanOperatorsAsRegEx, RegexOptions.IgnoreCase | RegexOptions.Compiled);
! return r.Match(sqlFragment).Success;
}
}
|