Repository: trafodion
Updated Branches:
  refs/heads/master 2c4467927 -> 4a3f79698


[TRAFODION-3133] limit n support in subquery


Project: http://git-wip-us.apache.org/repos/asf/trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafodion/commit/a8860c1c
Tree: http://git-wip-us.apache.org/repos/asf/trafodion/tree/a8860c1c
Diff: http://git-wip-us.apache.org/repos/asf/trafodion/diff/a8860c1c

Branch: refs/heads/master
Commit: a8860c1cbf46281adbe5cdc51455ee42deaa8eec
Parents: 9e675ff
Author: Guhaiyan <[email protected]>
Authored: Tue Jul 10 11:29:45 2018 +0000
Committer: Guhaiyan <[email protected]>
Committed: Tue Jul 10 11:29:45 2018 +0000

----------------------------------------------------------------------
 core/sql/parser/sqlparser.y | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafodion/blob/a8860c1c/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index a335670..bf9007b 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -18908,7 +18908,7 @@ simple_table  : query_specification
 
 
 /* type relx */
-rel_subquery : '(' query_expression order_by_clause ')'
+rel_subquery : '(' query_expression order_by_clause optional_limit_spec ')'
                                {
                                   if (InIfCondition) {
                                      *SqlParser_Diags << DgSqlCode(-3176);
@@ -18936,6 +18936,24 @@ rel_subquery : '(' query_expression order_by_clause ')'
                                     }
 
                                   $$ = temp;
+                  if ($4)
+                    {
+                      RelExpr *query = $2;
+                      if (query->getFirstNRows() >= 0)
+                        {
+                          YYERROR;
+                        }
+                      else
+                        {
+                          NABoolean negate;
+                          if ($4->castToConstValue(negate))
+                            {
+                              ConstValue *limit = (ConstValue *)$4;
+                              Lng32 scale = 0;
+                              
query->setFirstNRows(limit->getExactNumericValue(scale));
+                            }
+                        }
+                    }
                                }
 /* type item */
 predicate : directed_comparison_predicate

Reply via email to