|
From: <pa...@us...> - 2011-01-15 17:51:40
|
Revision: 5351
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5351&view=rev
Author: patearl
Date: 2011-01-15 17:51:33 +0000 (Sat, 15 Jan 2011)
Log Message:
-----------
Support subqueries in arithmetic expressions within HQL SQL generation.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Generated/HqlSqlWalker.cs
trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g
trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs
Removed Paths:
-------------
trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/output/
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Generated/HqlSqlWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Generated/HqlSqlWalker.cs 2011-01-15 17:38:05 UTC (rev 5350)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Generated/HqlSqlWalker.cs 2011-01-15 17:51:33 UTC (rev 5351)
@@ -1,4 +1,4 @@
-// $ANTLR 3.2 Sep 23, 2009 12:02:23 HqlSqlWalker.g 2011-01-15 09:52:09
+// $ANTLR 3.2 Sep 23, 2009 12:02:23 HqlSqlWalker.g 2011-01-15 10:39:02
// The variable 'variable' is assigned but its value is never used.
#pragma warning disable 168, 219
@@ -677,16 +677,16 @@
// AST REWRITE
- // elements: w, f, s, u
+ // elements: s, u, f, w
// token labels: u
- // rule labels: f, w, retval, s
+ // rule labels: w, f, retval, s
// token list labels:
// rule list labels:
// wildcard labels:
retval.Tree = root_0;
RewriteRuleNodeStream stream_u = new RewriteRuleNodeStream(adaptor, "token u", u);
+ RewriteRuleSubtreeStream stream_w = new RewriteRuleSubtreeStream(adaptor, "rule w", w!=null ? w.Tree : null);
RewriteRuleSubtreeStream stream_f = new RewriteRuleSubtreeStream(adaptor, "rule f", f!=null ? f.Tree : null);
- RewriteRuleSubtreeStream stream_w = new RewriteRuleSubtreeStream(adaptor, "rule w", w!=null ? w.Tree : null);
RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
RewriteRuleSubtreeStream stream_s = new RewriteRuleSubtreeStream(adaptor, "rule s", s!=null ? s.Tree : null);
@@ -1757,15 +1757,15 @@
// AST REWRITE
- // elements: o, f, g, s, w
+ // elements: o, g, s, w, f
// token labels:
- // rule labels: w, f, g, retval, s, o
+ // rule labels: f, w, g, retval, s, o
// token list labels:
// rule list labels:
// wildcard labels:
retval.Tree = root_0;
+ RewriteRuleSubtreeStream stream_f = new RewriteRuleSubtreeStream(adaptor, "rule f", f!=null ? f.Tree : null);
RewriteRuleSubtreeStream stream_w = new RewriteRuleSubtreeStream(adaptor, "rule w", w!=null ? w.Tree : null);
- RewriteRuleSubtreeStream stream_f = new RewriteRuleSubtreeStream(adaptor, "rule f", f!=null ? f.Tree : null);
RewriteRuleSubtreeStream stream_g = new RewriteRuleSubtreeStream(adaptor, "rule g", g!=null ? g.Tree : null);
RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
RewriteRuleSubtreeStream stream_s = new RewriteRuleSubtreeStream(adaptor, "rule s", s!=null ? s.Tree : null);
@@ -2280,7 +2280,7 @@
// AST REWRITE
- // elements: x, d
+ // elements: d, x
// token labels: d
// rule labels: retval, x
// token list labels:
@@ -4453,7 +4453,7 @@
// AST REWRITE
- // elements: b, w
+ // elements: w, b
// token labels: w
// rule labels: retval, b
// token list labels:
@@ -4556,7 +4556,7 @@
// AST REWRITE
- // elements: b, w
+ // elements: w, b
// token labels: w
// rule labels: retval, b
// token list labels:
@@ -6636,7 +6636,7 @@
};
// $ANTLR start "arithmeticExpr"
- // HqlSqlWalker.g:367:1: arithmeticExpr : ( ^( PLUS expr expr ) | ^( MINUS expr expr ) | ^( DIV expr expr ) | ^( STAR expr expr ) | ^( BNOT expr ) | ^( BAND expr expr ) | ^( BOR expr expr ) | ^( BXOR expr expr ) | ^( UNARY_MINUS expr ) | c= caseExpr );
+ // HqlSqlWalker.g:367:1: arithmeticExpr : ( ^( PLUS exprOrSubquery exprOrSubquery ) | ^( MINUS exprOrSubquery exprOrSubquery ) | ^( DIV exprOrSubquery exprOrSubquery ) | ^( STAR exprOrSubquery exprOrSubquery ) | ^( BNOT exprOrSubquery ) | ^( BAND exprOrSubquery exprOrSubquery ) | ^( BOR exprOrSubquery exprOrSubquery ) | ^( BXOR exprOrSubquery exprOrSubquery ) | ^( UNARY_MINUS exprOrSubquery ) | c= caseExpr );
public HqlSqlWalker.arithmeticExpr_return arithmeticExpr() // throws RecognitionException [1]
{
HqlSqlWalker.arithmeticExpr_return retval = new HqlSqlWalker.arithmeticExpr_return();
@@ -6658,37 +6658,37 @@
IASTNode UNARY_MINUS170 = null;
HqlSqlWalker.caseExpr_return c = default(HqlSqlWalker.caseExpr_return);
- HqlSqlWalker.expr_return expr148 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery148 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr149 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery149 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr151 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery151 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr152 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery152 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr154 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery154 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr155 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery155 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr157 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery157 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr158 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery158 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr160 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery160 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr162 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery162 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr163 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery163 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr165 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery165 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr166 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery166 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr168 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery168 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr169 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery169 = default(HqlSqlWalker.exprOrSubquery_return);
- HqlSqlWalker.expr_return expr171 = default(HqlSqlWalker.expr_return);
+ HqlSqlWalker.exprOrSubquery_return exprOrSubquery171 = default(HqlSqlWalker.exprOrSubquery_return);
IASTNode PLUS147_tree=null;
@@ -6703,7 +6703,7 @@
try
{
- // HqlSqlWalker.g:374:2: ( ^( PLUS expr expr ) | ^( MINUS expr expr ) | ^( DIV expr expr ) | ^( STAR expr expr ) | ^( BNOT expr ) | ^( BAND expr expr ) | ^( BOR expr expr ) | ^( BXOR expr expr ) | ^( UNARY_MINUS expr ) | c= caseExpr )
+ // HqlSqlWalker.g:374:2: ( ^( PLUS exprOrSubquery exprOrSubquery ) | ^( MINUS exprOrSubquery exprOrSubquery ) | ^( DIV exprOrSubquery exprOrSubquery ) | ^( STAR exprOrSubquery exprOrSubquery ) | ^( BNOT exprOrSubquery ) | ^( BAND exprOrSubquery exprOrSubquery ) | ^( BOR exprOrSubquery exprOrSubquery ) | ^( BXOR exprOrSubquery exprOrSubquery ) | ^( UNARY_MINUS exprOrSubquery ) | c= caseExpr )
int alt49 = 10;
switch ( input.LA(1) )
{
@@ -6768,7 +6768,7 @@
switch (alt49)
{
case 1 :
- // HqlSqlWalker.g:374:4: ^( PLUS expr expr )
+ // HqlSqlWalker.g:374:4: ^( PLUS exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6786,17 +6786,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1866);
- expr148 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1866);
+ exprOrSubquery148 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr148.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery148.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1868);
- expr149 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1868);
+ exprOrSubquery149 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr149.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery149.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6805,7 +6805,7 @@
}
break;
case 2 :
- // HqlSqlWalker.g:375:4: ^( MINUS expr expr )
+ // HqlSqlWalker.g:375:4: ^( MINUS exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6823,17 +6823,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1877);
- expr151 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1877);
+ exprOrSubquery151 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr151.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery151.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1879);
- expr152 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1879);
+ exprOrSubquery152 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr152.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery152.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6842,7 +6842,7 @@
}
break;
case 3 :
- // HqlSqlWalker.g:376:4: ^( DIV expr expr )
+ // HqlSqlWalker.g:376:4: ^( DIV exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6860,17 +6860,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1888);
- expr154 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1888);
+ exprOrSubquery154 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr154.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery154.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1890);
- expr155 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1890);
+ exprOrSubquery155 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr155.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery155.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6879,7 +6879,7 @@
}
break;
case 4 :
- // HqlSqlWalker.g:377:4: ^( STAR expr expr )
+ // HqlSqlWalker.g:377:4: ^( STAR exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6897,17 +6897,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1899);
- expr157 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1899);
+ exprOrSubquery157 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr157.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery157.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1901);
- expr158 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1901);
+ exprOrSubquery158 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr158.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery158.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6916,7 +6916,7 @@
}
break;
case 5 :
- // HqlSqlWalker.g:378:4: ^( BNOT expr )
+ // HqlSqlWalker.g:378:4: ^( BNOT exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6934,11 +6934,11 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1910);
- expr160 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1910);
+ exprOrSubquery160 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr160.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery160.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6947,7 +6947,7 @@
}
break;
case 6 :
- // HqlSqlWalker.g:379:4: ^( BAND expr expr )
+ // HqlSqlWalker.g:379:4: ^( BAND exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -6965,17 +6965,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1919);
- expr162 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1919);
+ exprOrSubquery162 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr162.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery162.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1921);
- expr163 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1921);
+ exprOrSubquery163 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr163.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery163.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -6984,7 +6984,7 @@
}
break;
case 7 :
- // HqlSqlWalker.g:380:4: ^( BOR expr expr )
+ // HqlSqlWalker.g:380:4: ^( BOR exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -7002,17 +7002,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1930);
- expr165 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1930);
+ exprOrSubquery165 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr165.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery165.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1932);
- expr166 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1932);
+ exprOrSubquery166 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr166.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery166.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -7021,7 +7021,7 @@
}
break;
case 8 :
- // HqlSqlWalker.g:381:4: ^( BXOR expr expr )
+ // HqlSqlWalker.g:381:4: ^( BXOR exprOrSubquery exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -7039,17 +7039,17 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1941);
- expr168 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1941);
+ exprOrSubquery168 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr168.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery168.Tree);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1943);
- expr169 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1943);
+ exprOrSubquery169 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr169.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery169.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -7058,7 +7058,7 @@
}
break;
case 9 :
- // HqlSqlWalker.g:383:4: ^( UNARY_MINUS expr )
+ // HqlSqlWalker.g:383:4: ^( UNARY_MINUS exprOrSubquery )
{
root_0 = (IASTNode)adaptor.GetNilNode();
@@ -7076,11 +7076,11 @@
Match(input, Token.DOWN, null);
_last = (IASTNode)input.LT(1);
- PushFollow(FOLLOW_expr_in_arithmeticExpr1953);
- expr171 = expr();
+ PushFollow(FOLLOW_exprOrSubquery_in_arithmeticExpr1953);
+ exprOrSubquery171 = exprOrSubquery();
state.followingStackPointer--;
- adaptor.AddChild(root_1, expr171.Tree);
+ adaptor.AddChild(root_1, exprOrSubquery171.Tree);
Match(input, Token.UP, null); adaptor.AddChild(root_0, root_1);_last = _save_last_1;
}
@@ -8576,7 +8576,7 @@
// AST REWRITE
- // elements: d, lhs, rhs
+ // elements: d, rhs, lhs
// token labels: d
// rule labels: retval, rhs, lhs
// token list labels:
@@ -8692,7 +8692,7 @@
// AST REWRITE
- // elements: rhs2, lhs2, i
+ // elements: lhs2, i, rhs2
// token labels: i
// rule labels: retval, rhs2, lhs2
// token list labels:
@@ -9194,7 +9194,7 @@
// AST REWRITE
- // elements: d, rhs, lhs
+ // elements: lhs, rhs, d
// token labels: d
// rule labels: retval, rhs, lhs
// token list labels:
@@ -9900,30 +9900,30 @@
public static readonly BitSet FOLLOW_parameter_in_expr1831 = new BitSet(new ulong[]{0x0000000000000002UL});
public static readonly BitSet FOLLOW_count_in_expr1836 = new BitSet(new ulong[]{0x0000000000000002UL});
public static readonly BitSet FOLLOW_PLUS_in_arithmeticExpr1864 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1866 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1868 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1866 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1868 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_MINUS_in_arithmeticExpr1875 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1877 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1879 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1877 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1879 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_DIV_in_arithmeticExpr1886 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1888 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1890 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1888 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1890 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_STAR_in_arithmeticExpr1897 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1899 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1901 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1899 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1901 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_BNOT_in_arithmeticExpr1908 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1910 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1910 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_BAND_in_arithmeticExpr1917 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1919 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1921 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1919 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1921 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_BOR_in_arithmeticExpr1928 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1930 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1932 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1930 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1932 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_BXOR_in_arithmeticExpr1939 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1941 = new BitSet(new ulong[]{0x0082008000109000UL,0x0F3FC007ED009120UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1943 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1941 = new BitSet(new ulong[]{0x0086808000109030UL,0x0F3FC007ED109120UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1943 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_UNARY_MINUS_in_arithmeticExpr1951 = new BitSet(new ulong[]{0x0000000000000004UL});
- public static readonly BitSet FOLLOW_expr_in_arithmeticExpr1953 = new BitSet(new ulong[]{0x0000000000000008UL});
+ public static readonly BitSet FOLLOW_exprOrSubquery_in_arithmeticExpr1953 = new BitSet(new ulong[]{0x0000000000000008UL});
public static readonly BitSet FOLLOW_caseExpr_in_arithmeticExpr1961 = new BitSet(new ulong[]{0x0000000000000002UL});
public static readonly BitSet FOLLOW_CASE_in_caseExpr1973 = new BitSet(new ulong[]{0x0000000000000004UL});
public static readonly BitSet FOLLOW_WHEN_in_caseExpr1979 = new BitSet(new ulong[]{0x0000000000000004UL});
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g 2011-01-15 17:38:05 UTC (rev 5350)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/HqlSqlWalker.g 2011-01-15 17:51:33 UTC (rev 5351)
@@ -371,16 +371,16 @@
PrepareArithmeticOperator( $arithmeticExpr.tree );
}
}
- : ^(PLUS expr expr)
- | ^(MINUS expr expr)
- | ^(DIV expr expr)
- | ^(STAR expr expr)
- | ^(BNOT expr)
- | ^(BAND expr expr)
- | ^(BOR expr expr)
- | ^(BXOR expr expr)
-// | ^(CONCAT expr (expr)+ )
- | ^(UNARY_MINUS expr)
+ : ^(PLUS exprOrSubquery exprOrSubquery)
+ | ^(MINUS exprOrSubquery exprOrSubquery)
+ | ^(DIV exprOrSubquery exprOrSubquery)
+ | ^(STAR exprOrSubquery exprOrSubquery)
+ | ^(BNOT exprOrSubquery)
+ | ^(BAND exprOrSubquery exprOrSubquery)
+ | ^(BOR exprOrSubquery exprOrSubquery)
+ | ^(BXOR exprOrSubquery exprOrSubquery)
+// | ^(CONCAT exprOrSubquery (exprOrSubquery)+ )
+ | ^(UNARY_MINUS exprOrSubquery)
| c=caseExpr
;
Modified: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs 2011-01-15 17:38:05 UTC (rev 5350)
+++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/HqlFixture.cs 2011-01-15 17:51:33 UTC (rev 5351)
@@ -200,6 +200,36 @@
}
}
+ [Test]
+ public void SubselectAddition()
+ {
+ using (ISession s = OpenSession())
+ using (s.BeginTransaction())
+ {
+ s.Save(new Animal { BodyWeight = 12, Description = "Polliwog" });
+ s.Transaction.Commit();
+ }
+
+ try
+ {
+ using (ISession s = OpenSession())
+ {
+ var result = s.CreateQuery("select count(a) from Animal a where (select count(a2) from Animal a2) + 1 > 1")
+ .UniqueResult();
+ Assert.AreEqual(1, result);
+ }
+ }
+ finally
+ {
+ using (ISession s = OpenSession())
+ using (s.BeginTransaction())
+ {
+ s.CreateQuery("delete from Animal").ExecuteUpdate();
+ s.Transaction.Commit();
+ }
+ }
+ }
+
[Test, Ignore("Not fixed yet.")]
public void SumShouldReturnDouble()
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|