|
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.
|