From: <fab...@us...> - 2009-05-10 14:30:30
|
Revision: 4274 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4274&view=rev Author: fabiomaulo Date: 2009-05-10 14:30:22 +0000 (Sun, 10 May 2009) Log Message: ----------- Fixed bug in AST parser (NHibernate.Test.Legacy.Query full supported) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementFactory.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromReferenceNode.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/IdentNode.cs trunk/nhibernate/src/NHibernate.Test/App.config Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.cs 2009-05-10 14:30:22 UTC (rev 4274) @@ -818,28 +818,27 @@ protected IASTNode LookupProperty(IASTNode dot, bool root, bool inSelect) { - DotNode dotNode = ( DotNode ) dot; + DotNode dotNode = (DotNode) dot; FromReferenceNode lhs = dotNode.GetLhs(); IASTNode rhs = lhs.NextSibling; - switch ( rhs.Type ) { + switch (rhs.Type) + { case ELEMENTS: case INDICES: - if ( log.IsDebugEnabled ) + if (log.IsDebugEnabled) { - log.Debug( "lookupProperty() " + dotNode.Path + " => " + rhs.Text + "(" + lhs.Path + ")" ); + log.Debug("lookupProperty() " + dotNode.Path + " => " + rhs.Text + "(" + lhs.Path + ")"); } - CollectionFunction f = ( CollectionFunction ) rhs; + CollectionFunction f = (CollectionFunction) rhs; // Re-arrange the tree so that the collection function is the root and the lhs is the path. - f.ClearChildren(); - f.AddChild(lhs); + f.SetFirstChild(lhs); + lhs.NextSibling = null; + dotNode.SetFirstChild(f); - dotNode.ClearChildren(); - dotNode.AddChild(f); - - Resolve( lhs ); // Don't forget to resolve the argument! - f.Resolve( inSelect ); // Resolve the collection function now. + Resolve(lhs); // Don't forget to resolve the argument! + f.Resolve(inSelect); // Resolve the collection function now. return f; default: // Resolve everything up to this dot, but don't resolve the placeholders yet. @@ -899,8 +898,7 @@ syntheticAlias.FromElement = fromElement; syntheticAlias.IsResolved = true; - dot.ClearChildren(); - dot.AddChild(syntheticAlias); + dot.SetFirstChild(syntheticAlias); dot.AddChild(property); return dot; Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/DotNode.cs 2009-05-10 14:30:22 UTC (rev 4274) @@ -143,11 +143,11 @@ public override void ResolveFirstChild() { - FromReferenceNode lhs = (FromReferenceNode)GetChild(0); - SqlNode property = (SqlNode)GetChild(1); + var lhs = (FromReferenceNode)GetFirstChild(); + var property = (SqlNode) GetChild(1); // Set the attributes of the property reference expression. - String propName = property.Text; + string propName = property.Text; _propertyName = propName; // If the uresolved property path isn't set yet, just use the property name. @@ -222,15 +222,16 @@ DereferenceEntity( ( EntityType ) propertyType, implicitJoin, classAlias, generateJoin, parent ); InitText(); } - else if ( propertyType.IsCollectionType ) + else if (propertyType.IsCollectionType) { // The property is a collection... CheckLhsIsNotCollection(); - DereferenceCollection( ( CollectionType ) propertyType, implicitJoin, false, classAlias, parent ); + DereferenceCollection((CollectionType)propertyType, implicitJoin, false, classAlias, parent); } - else { + else + { // Otherwise, this is a primitive type. - if ( ! CollectionProperties.IsAnyCollectionProperty( _propertyName ) ) + if (!CollectionProperties.IsAnyCollectionProperty(_propertyName)) { CheckLhsIsNotCollection(); } @@ -531,9 +532,9 @@ private void SetImpliedJoin(FromElement elem) { _impliedJoin = elem; - if (GetChild(0).Type == HqlSqlWalker.DOT) + if (GetFirstChild().Type == HqlSqlWalker.DOT) { - DotNode dotLhs = (DotNode)GetChild(0); + DotNode dotLhs = (DotNode)GetFirstChild(); if (dotLhs.GetImpliedJoin() != null) { _impliedJoin = dotLhs.GetImpliedJoin(); Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementFactory.cs 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromElementFactory.cs 2009-05-10 14:30:22 UTC (rev 4274) @@ -303,14 +303,16 @@ { FromElement elem = CreateJoin(entityClass, tableAlias, joinSequence, type, false); elem.Fetch = fetchFlag; - IEntityPersister entityPersister = elem.EntityPersister; - int numberOfTables = entityPersister.QuerySpaces.Length; - if (numberOfTables > 1 && _implied && !elem.UseFromFragment) + //if (numberOfTables > 1 && _implied && !elem.UseFromFragment) + // NH Different behavior: numberOfTables was removed because an + // implicit join is an implicit join even if it not come from a + // multi-table entity + if (_implied && !elem.UseFromFragment) { if (log.IsDebugEnabled) { - log.Debug("createEntityJoin() : Implied multi-table entity join"); + log.Debug("createEntityJoin() : Implied entity join"); } elem.UseFromFragment = true; } @@ -329,9 +331,7 @@ // 1) 'elem' is the "root from-element" in correlated subqueries // 2) The DotNode.useThetaStyleImplicitJoins has been set to true // and 'elem' represents an implicit join - if (elem.FromClause != elem.Origin.FromClause || - // ( implied && DotNode.useThetaStyleImplicitJoins ) ) { - DotNode.UseThetaStyleImplicitJoins) + if (elem.FromClause != elem.Origin.FromClause || DotNode.UseThetaStyleImplicitJoins) { // the "root from-element" in correlated subqueries do need this piece elem.Type = HqlSqlWalker.FROM_FRAGMENT; Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromReferenceNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromReferenceNode.cs 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/FromReferenceNode.cs 2009-05-10 14:30:22 UTC (rev 4274) @@ -76,7 +76,7 @@ public void RecursiveResolve(int level, bool impliedAtRoot, string classAlias, IASTNode parent) { - IASTNode lhs = this.GetChild(0); + IASTNode lhs = GetFirstChild(); int nextLevel = level + 1; if ( lhs != null ) { Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/IdentNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/IdentNode.cs 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Tree/IdentNode.cs 2009-05-10 14:30:22 UTC (rev 4274) @@ -126,7 +126,7 @@ else if (parent != null && parent.Type == HqlSqlWalker.DOT) { DotNode dot = (DotNode)parent; - if (parent.GetChild(0) == this) + if (parent.GetFirstChild() == this) { if (ResolveAsNakedComponentPropertyRefLHS(dot)) { Modified: trunk/nhibernate/src/NHibernate.Test/App.config =================================================================== --- trunk/nhibernate/src/NHibernate.Test/App.config 2009-05-09 16:07:27 UTC (rev 4273) +++ trunk/nhibernate/src/NHibernate.Test/App.config 2009-05-10 14:30:22 UTC (rev 4274) @@ -118,7 +118,7 @@ <appender-ref ref="console" /> </root> - <logger name="NHibernate.Bytecode.CodeDom"> + <logger name="NHibernate.Hql.Ast.ANTLR"> <priority value="OFF" /> </logger> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |