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
