From: Peter S. <sz...@us...> - 2004-05-28 09:09:07
|
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; } } |