From: Kevin W. <kev...@us...> - 2004-12-31 18:22:25
|
Update of /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27895 Modified Files: SelectParser.cs SelectPathExpressionParser.cs WhereParser.cs Log Message: fixing xml comments and letting ReSharper do reformatting Index: WhereParser.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql/WhereParser.cs,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** WhereParser.cs 4 Dec 2004 22:41:20 -0000 1.26 --- WhereParser.cs 31 Dec 2004 18:22:14 -0000 1.27 *************** *** 2,22 **** using System.Collections; using System.Text; - using Iesi.Collections; - using NHibernate.Persister; using NHibernate.Type; using NHibernate.Util; ! namespace NHibernate.Hql [...1127 lines suppressed...] } } } ! /// <summary> ! /// ! /// </summary> ! /// <param name="q"></param> ! /// <param name="token"></param> ! protected virtual void AppendToken( QueryTranslator q, SqlString token ) { ! if( expectingIndex > 0 ) { pathExpressionParser.LastCollectionElementIndexValue = token.ToString(); ! } ! else { ! q.AppendWhereToken( token ); } } Index: SelectParser.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql/SelectParser.cs,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** SelectParser.cs 4 Dec 2004 22:41:20 -0000 1.9 --- SelectParser.cs 31 Dec 2004 18:22:14 -0000 1.10 *************** *** 1,26 **** using System; using System.Collections; - using System.Data; - using Iesi.Collections; - - using NHibernate; - using NHibernate.Util; using NHibernate.Type; ! namespace NHibernate.Hql { - /// <summary> /// Parsers the select clause of a hibernate query, looking /// for a table (well, really class) alias. /// </summary> ! public class SelectParser : IParser { private ArrayList aggregateFuncTokenList = new ArrayList(); private static IDictionary aggregateFunctions = new Hashtable(); private static ISet countArguments = new HashedSet(); ! ! static SelectParser() { countArguments.Add( "distinct" ); --- 1,22 ---- using System; using System.Collections; using Iesi.Collections; using NHibernate.Type; + using NHibernate.Util; ! namespace NHibernate.Hql { /// <summary> /// Parsers the select clause of a hibernate query, looking /// for a table (well, really class) alias. /// </summary> ! public class SelectParser : IParser { private ArrayList aggregateFuncTokenList = new ArrayList(); private static IDictionary aggregateFunctions = new Hashtable(); private static ISet countArguments = new HashedSet(); ! ! /// <summary></summary> ! static SelectParser() { countArguments.Add( "distinct" ); *************** *** 29,32 **** --- 25,29 ---- } + /// <summary></summary> public SelectParser() { *************** *** 36,40 **** aggregatePathExpressionParser.UseThetaStyleJoin = true; } ! private bool ready; private bool aggregate; --- 33,37 ---- aggregatePathExpressionParser.UseThetaStyleJoin = true; } ! private bool ready; private bool aggregate; *************** *** 45,118 **** private SelectPathExpressionParser pathExpressionParser = new SelectPathExpressionParser(); ! private PathExpressionParser aggregatePathExpressionParser = new PathExpressionParser(); ! ! public void Token(string token, QueryTranslator q) { - string lctoken = token.ToLower(); ! ! if (first) { first = false; ! if (lctoken.Equals("distinct")) { q.Distinct = true; ! return ; ! } ! else if (lctoken.Equals("all")) { q.Distinct = false; ! return ; } } ! ! if (afterNew) { ! afterNew=false; ! holderClass = q.GetImportedClass(token); ! if (holderClass==null) throw new QueryException("class not found: " + token); q.HolderClass = holderClass; insideNew = true; ! } ! else if (token.Equals(StringHelper.Comma)) { ! if (ready) throw new QueryException("alias or expression expected in SELECT"); ! q.AppendScalarSelectToken(StringHelper.CommaSpace); ready = true; ! } ! else if ( "new".Equals(lctoken) ) { ! afterNew=true; ! ready=false; ! } ! else if (StringHelper.OpenParen.Equals(token)) { ! if (!aggregate && holderClass!=null && !ready) { //opening paren in new Foo ( ... ) ! ready=true; ! } ! else if (aggregate) { ! q.AppendScalarSelectToken(token); ! } ! else { ! throw new QueryException("aggregate function expected before ( in SELECT"); } ready = true; ! } ! else if (StringHelper.ClosedParen.Equals(token)) { ! if (insideNew && !aggregate && !ready) ! { //if we are inside a new Result(), but not inside a nested function insideNew = false; } ! else if (aggregate && ready) { ! q.AppendScalarSelectToken(token); ! aggregateFuncTokenList.RemoveAt(0); ! if (aggregateFuncTokenList.Count < 1) { aggregate = false; --- 42,125 ---- private SelectPathExpressionParser pathExpressionParser = new SelectPathExpressionParser(); ! private PathExpressionParser aggregatePathExpressionParser = new PathExpressionParser(); ! ! /// <summary> ! /// ! /// </summary> ! /// <param name="token"></param> ! /// <param name="q"></param> ! public void Token( string token, QueryTranslator q ) { string lctoken = token.ToLower(); ! ! if( first ) { first = false; ! if( lctoken.Equals( "distinct" ) ) { q.Distinct = true; ! return; ! } ! else if( lctoken.Equals( "all" ) ) { q.Distinct = false; ! return; } } ! ! if( afterNew ) { ! afterNew = false; ! holderClass = q.GetImportedClass( token ); ! if( holderClass == null ) ! { ! throw new QueryException( "class not found: " + token ); ! } q.HolderClass = holderClass; insideNew = true; ! } ! else if( token.Equals( StringHelper.Comma ) ) { ! if( ready ) ! { ! throw new QueryException( "alias or expression expected in SELECT" ); ! } ! q.AppendScalarSelectToken( StringHelper.CommaSpace ); ready = true; ! } ! else if( "new".Equals( lctoken ) ) { ! afterNew = true; ! ready = false; ! } ! else if( StringHelper.OpenParen.Equals( token ) ) { ! if( !aggregate && holderClass != null && !ready ) { //opening paren in new Foo ( ... ) ! ready = true; ! } ! else if( aggregate ) { ! q.AppendScalarSelectToken( token ); ! } ! else { ! throw new QueryException( "aggregate function expected before ( in SELECT" ); } ready = true; ! } ! else if( StringHelper.ClosedParen.Equals( token ) ) { ! if( insideNew && !aggregate && !ready ) ! { //if we are inside a new Result(), but not inside a nested function insideNew = false; } ! else if( aggregate && ready ) { ! q.AppendScalarSelectToken( token ); ! aggregateFuncTokenList.RemoveAt( 0 ); ! if( aggregateFuncTokenList.Count < 1 ) { aggregate = false; *************** *** 120,154 **** } ! } ! else { ! throw new QueryException("( expected before ) in select"); } ! } ! else if (countArguments.Contains(lctoken)) { ! if (!ready || !aggregate) throw new QueryException(token + " only allowed inside aggregate function in SELECT"); ! q.AppendScalarSelectToken(token); ! if ( "*".Equals(token) ) q.AddSelectScalar(NHibernate.Int32); //special case ! } ! else if (aggregateFunctions.Contains(lctoken)) { ! if (!ready) throw new QueryException(", expected before aggregate function in SELECT: " + token); aggregate = true; ! aggregateFuncTokenList.Insert(0, lctoken); ready = false; ! q.AppendScalarSelectToken(token); ! if( !AggregateHasArgs(lctoken, q) ) { ! q.AddSelectScalar( AggregateType(aggregateFuncTokenList, null, q) ); ! if ( !AggregateFuncNoArgsHasParenthesis(lctoken, q) ) { ! aggregateFuncTokenList.RemoveAt(0); ! if (aggregateFuncTokenList.Count < 1) { aggregate = false; ready = false; } ! else { ready = true; --- 127,170 ---- } ! } ! else { ! throw new QueryException( "( expected before ) in select" ); } ! } ! else if( countArguments.Contains( lctoken ) ) { ! if( !ready || !aggregate ) ! { ! throw new QueryException( token + " only allowed inside aggregate function in SELECT" ); ! } ! q.AppendScalarSelectToken( token ); ! if( "*".Equals( token ) ) ! { ! q.AddSelectScalar( NHibernate.Int32 ); ! } //special case ! } ! else if( aggregateFunctions.Contains( lctoken ) ) { ! if( !ready ) ! { ! throw new QueryException( ", expected before aggregate function in SELECT: " + token ); ! } aggregate = true; ! aggregateFuncTokenList.Insert( 0, lctoken ); ready = false; ! q.AppendScalarSelectToken( token ); ! if( !AggregateHasArgs( lctoken, q ) ) { ! q.AddSelectScalar( AggregateType( aggregateFuncTokenList, null, q ) ); ! if( !AggregateFuncNoArgsHasParenthesis( lctoken, q ) ) { ! aggregateFuncTokenList.RemoveAt( 0 ); ! if( aggregateFuncTokenList.Count < 1 ) { aggregate = false; ready = false; } ! else { ready = true; *************** *** 157,229 **** } ! } ! else if (aggregate) { ! if (!ready) throw new QueryException("( expected after aggregate function in SELECT"); ! ParserHelper.Parse(aggregatePathExpressionParser, q.Unalias(token), ParserHelper.PathSeparators, q); ! ! if (aggregatePathExpressionParser.IsCollectionValued) { q.AddCollection( ! aggregatePathExpressionParser.CollectionName, ! aggregatePathExpressionParser.CollectionRole); } ! q.AppendScalarSelectToken(aggregatePathExpressionParser.WhereColumn); ! q.AddSelectScalar( AggregateType(aggregateFuncTokenList, aggregatePathExpressionParser.WhereColumnType, q) ); ! aggregatePathExpressionParser.AddAssociation(q); ! } ! else { ! if (!ready) throw new QueryException(", expected in SELECT"); ! ! ParserHelper.Parse(pathExpressionParser, q.Unalias( token ), ParserHelper.PathSeparators, q); ! if (pathExpressionParser.IsCollectionValued) { q.AddCollection( ! pathExpressionParser.CollectionName, ! pathExpressionParser.CollectionRole); ! } ! else if (pathExpressionParser.WhereColumnType.IsEntityType) { ! q.AddSelectClass(pathExpressionParser.SelectName); } ! q.AppendScalarSelectTokens(pathExpressionParser.WhereColumns); ! q.AddSelectScalar(pathExpressionParser.WhereColumnType); ! pathExpressionParser.AddAssociation(q); ! ready = false; } } ! public bool AggregateHasArgs(String funcToken, QueryTranslator q) { IDictionary funcMap = q.AggregateFunctions; ! IQueryFunctionInfo funcInfo = (IQueryFunctionInfo)funcMap[funcToken]; return funcInfo.IsFunctionArgs; } ! public bool AggregateFuncNoArgsHasParenthesis(String funcToken, QueryTranslator q) { IDictionary funcMap = q.AggregateFunctions; ! IQueryFunctionInfo funcInfo = (IQueryFunctionInfo)funcMap[funcToken]; return funcInfo.IsFunctionNoArgsUseParanthesis; } ! public IType AggregateType( ArrayList funcTokenList, IType type, QueryTranslator q) ! { IDictionary funcMap = q.AggregateFunctions; IType argType = type; IType retType = type; ! for (int i=0; i<funcTokenList.Count; i++) { argType = retType; ! String funcToken = (String) funcTokenList[i]; ! IQueryFunctionInfo funcInfo = (IQueryFunctionInfo)funcMap[funcToken]; retType = funcInfo.QueryFunctionType( argType, q.factory ); } ! return retType; ! } ! public void Start(QueryTranslator q) { ready = true; --- 173,274 ---- } ! } ! else if( aggregate ) { ! if( !ready ) ! { ! throw new QueryException( "( expected after aggregate function in SELECT" ); ! } ! ParserHelper.Parse( aggregatePathExpressionParser, q.Unalias( token ), ParserHelper.PathSeparators, q ); ! ! if( aggregatePathExpressionParser.IsCollectionValued ) { q.AddCollection( ! aggregatePathExpressionParser.CollectionName, ! aggregatePathExpressionParser.CollectionRole ); } ! q.AppendScalarSelectToken( aggregatePathExpressionParser.WhereColumn ); ! q.AddSelectScalar( AggregateType( aggregateFuncTokenList, aggregatePathExpressionParser.WhereColumnType, q ) ); ! aggregatePathExpressionParser.AddAssociation( q ); ! } ! else { ! if( !ready ) ! { ! throw new QueryException( ", expected in SELECT" ); ! } ! ! ParserHelper.Parse( pathExpressionParser, q.Unalias( token ), ParserHelper.PathSeparators, q ); ! if( pathExpressionParser.IsCollectionValued ) { q.AddCollection( ! pathExpressionParser.CollectionName, ! pathExpressionParser.CollectionRole ); ! } ! else if( pathExpressionParser.WhereColumnType.IsEntityType ) { ! q.AddSelectClass( pathExpressionParser.SelectName ); } ! q.AppendScalarSelectTokens( pathExpressionParser.WhereColumns ); ! q.AddSelectScalar( pathExpressionParser.WhereColumnType ); ! pathExpressionParser.AddAssociation( q ); ! ready = false; } } ! /// <summary> ! /// ! /// </summary> ! /// <param name="funcToken"></param> ! /// <param name="q"></param> ! /// <returns></returns> ! public bool AggregateHasArgs( String funcToken, QueryTranslator q ) { IDictionary funcMap = q.AggregateFunctions; ! IQueryFunctionInfo funcInfo = ( IQueryFunctionInfo ) funcMap[ funcToken ]; return funcInfo.IsFunctionArgs; } ! /// <summary> ! /// ! /// </summary> ! /// <param name="funcToken"></param> ! /// <param name="q"></param> ! /// <returns></returns> ! public bool AggregateFuncNoArgsHasParenthesis( String funcToken, QueryTranslator q ) { IDictionary funcMap = q.AggregateFunctions; ! IQueryFunctionInfo funcInfo = ( IQueryFunctionInfo ) funcMap[ funcToken ]; return funcInfo.IsFunctionNoArgsUseParanthesis; } ! /// <summary> ! /// ! /// </summary> ! /// <param name="funcTokenList"></param> ! /// <param name="type"></param> ! /// <param name="q"></param> ! /// <returns></returns> ! public IType AggregateType( ArrayList funcTokenList, IType type, QueryTranslator q ) ! { IDictionary funcMap = q.AggregateFunctions; IType argType = type; IType retType = type; ! for( int i = 0; i < funcTokenList.Count; i++ ) { argType = retType; ! String funcToken = ( String ) funcTokenList[ i ]; ! IQueryFunctionInfo funcInfo = ( IQueryFunctionInfo ) funcMap[ funcToken ]; retType = funcInfo.QueryFunctionType( argType, q.factory ); } ! return retType; ! } ! /// <summary> ! /// ! /// </summary> ! /// <param name="q"></param> ! public void Start( QueryTranslator q ) { ready = true; *************** *** 235,240 **** aggregateFunctions = q.AggregateFunctions; } ! ! public void End(QueryTranslator q) { } --- 280,289 ---- aggregateFunctions = q.AggregateFunctions; } ! ! /// <summary> ! /// ! /// </summary> ! /// <param name="q"></param> ! public void End( QueryTranslator q ) { } Index: SelectPathExpressionParser.cs =================================================================== RCS file: /cvsroot/nhibernate/nhibernate/src/NHibernate/Hql/SelectPathExpressionParser.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SelectPathExpressionParser.cs 14 Apr 2004 11:35:53 -0000 1.4 --- SelectPathExpressionParser.cs 31 Dec 2004 18:22:14 -0000 1.5 *************** *** 1,33 **** ! using System; ! using System.Collections; ! ! namespace NHibernate.Hql ! { ! public class SelectPathExpressionParser : PathExpressionParser { ! ! ! public override void End(QueryTranslator q) { ! if (currentProperty != null && !q.IsShallowQuery) { // "finish off" the join ! Token(".", q); ! Token(null, q); } ! base.End(q); } ! ! protected override void SetExpectingCollectionIndex() { ! throw new QueryException("expecting .elements or .indices after collection path expression in select"); } ! public string SelectName { ! get ! { ! return currentName; ! } } } --- 1,32 ---- ! namespace NHibernate.Hql ! { ! /// <summary></summary> ! public class SelectPathExpressionParser : PathExpressionParser { ! /// <summary> ! /// ! /// </summary> ! /// <param name="q"></param> ! public override void End( QueryTranslator q ) { ! if( currentProperty != null && !q.IsShallowQuery ) { // "finish off" the join ! Token( ".", q ); ! Token( null, q ); } ! base.End( q ); } ! ! /// <summary></summary> ! protected override void SetExpectingCollectionIndex() { ! throw new QueryException( "expecting .elements or .indices after collection path expression in select" ); } ! /// <summary></summary> ! public string SelectName { ! get { return currentName; } } } |