diff options
author | pnv1 <pnv1@yandex-team.com> | 2024-11-25 10:33:13 +0300 |
---|---|---|
committer | pnv1 <pnv1@yandex-team.com> | 2024-11-25 10:42:25 +0300 |
commit | 551b2ec4e6187023582efdbd78b3b73cabf11a76 (patch) | |
tree | 8694a690ae4c0b0a4dc27606e448b15eef98da4b | |
parent | 7204c790e855d1f454b9f40b104b610f7d84fa3f (diff) | |
download | ydb-551b2ec4e6187023582efdbd78b3b73cabf11a76.tar.gz |
Fix YQL grammar for EXPLAIN QUERY PLAN
Original PR: <https://github.com/ydb-platform/ydb/pull/11235>
commit_hash:5224b3c65606b1456f7b2f8fe10a4b04752a4d1e
-rw-r--r-- | yql/essentials/sql/v1/SQLv1.g.in | 10 | ||||
-rw-r--r-- | yql/essentials/sql/v1/SQLv1Antlr4.g.in | 16 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut.cpp | 11 | ||||
-rw-r--r-- | yql/essentials/sql/v1/sql_ut_antlr4.cpp | 11 |
4 files changed, 32 insertions, 16 deletions
diff --git a/yql/essentials/sql/v1/SQLv1.g.in b/yql/essentials/sql/v1/SQLv1.g.in index 1b645f0b898..d58f184ec0c 100644 --- a/yql/essentials/sql/v1/SQLv1.g.in +++ b/yql/essentials/sql/v1/SQLv1.g.in @@ -16,7 +16,7 @@ lambda_stmt: | import_stmt ; -sql_stmt: (EXPLAIN (Q U E R Y PLAN)?)? sql_stmt_core; +sql_stmt: (EXPLAIN (QUERY PLAN)?)? sql_stmt_core; sql_stmt_core: pragma_stmt @@ -1409,7 +1409,7 @@ keyword_as_compat: // | PRESORT | PRIMARY | PRIVILEGES -// | QUERY + | QUERY | QUEUE | RAISE // | READ @@ -1631,7 +1631,7 @@ keyword_compat: ( | PRESORT | PRIMARY | PRIVILEGES -// | QUERY + | QUERY | QUEUE | RAISE // | READ @@ -1756,7 +1756,6 @@ RPAREN: ')'; QUESTION: '?'; COLON: ':'; COMMAT: '@'; -DOUBLE_COMMAT: '@@'; DOLLAR: '$'; LBRACE_CURLY: '{'; RBRACE_CURLY: '}'; @@ -1770,6 +1769,7 @@ fragment BACKSLASH: '\\'; fragment QUOTE_DOUBLE: '"'; fragment QUOTE_SINGLE: '\''; fragment BACKTICK: '`'; +fragment DOUBLE_COMMAT: '@@'; // http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782 fragment A:('a'|'A'); @@ -1992,7 +1992,7 @@ PRESORT: P R E S O R T; PRIMARY: P R I M A R Y; PRIVILEGES: P R I V I L E G E S; PROCESS: P R O C E S S; -//QUERY: Q U E R Y; +QUERY: Q U E R Y; QUEUE: Q U E U E; RAISE: R A I S E; RANGE: R A N G E; diff --git a/yql/essentials/sql/v1/SQLv1Antlr4.g.in b/yql/essentials/sql/v1/SQLv1Antlr4.g.in index 54355353365..64be15d0b73 100644 --- a/yql/essentials/sql/v1/SQLv1Antlr4.g.in +++ b/yql/essentials/sql/v1/SQLv1Antlr4.g.in @@ -15,7 +15,7 @@ lambda_stmt: | import_stmt ; -sql_stmt: (EXPLAIN (TQ TU TE TR TY PLAN)?)? sql_stmt_core; +sql_stmt: (EXPLAIN (QUERY PLAN)?)? sql_stmt_core; sql_stmt_core: pragma_stmt @@ -1408,7 +1408,7 @@ keyword_as_compat: // | PRESORT | PRIMARY | PRIVILEGES -// | QUERY + | QUERY | QUEUE | RAISE // | READ @@ -1630,7 +1630,7 @@ keyword_compat: ( | PRESORT | PRIMARY | PRIVILEGES -// | QUERY + | QUERY | QUEUE | RAISE // | READ @@ -1755,7 +1755,6 @@ RPAREN: ')'; QUESTION: '?'; COLON: ':'; COMMAT: '@'; -DOUBLE_COMMAT: '@@'; DOLLAR: '$'; LBRACE_CURLY: '{'; RBRACE_CURLY: '}'; @@ -1769,6 +1768,7 @@ fragment BACKSLASH: '\\'; fragment QUOTE_DOUBLE: '"'; fragment QUOTE_SINGLE: '\''; fragment BACKTICK: '`'; +fragment DOUBLE_COMMAT: '@@'; // http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782 fragment A:('a'|'A'); @@ -1991,7 +1991,7 @@ PRESORT: P R E S O R T; PRIMARY: P R I M A R Y; PRIVILEGES: P R I V I L E G E S; PROCESS: P R O C E S S; -//QUERY: Q U E R Y; +QUERY: Q U E R Y; QUEUE: Q U E U E; RAISE: R A I S E; RANGE: R A N G E; @@ -2130,12 +2130,6 @@ REAL: BLOB: X QUOTE_SINGLE HEXDIGIT+ QUOTE_SINGLE; -TQ:('q'|'Q'); -TU:('u'|'U'); -TE:('e'|'E'); -TR:('r'|'R'); -TY:('y'|'Y'); - // YQL Default Lexer: // GRAMMAR_MULTILINE_COMMENT_CORE = . // ANSI Lexer: diff --git a/yql/essentials/sql/v1/sql_ut.cpp b/yql/essentials/sql/v1/sql_ut.cpp index 45272879c01..62d5d2c83ad 100644 --- a/yql/essentials/sql/v1/sql_ut.cpp +++ b/yql/essentials/sql/v1/sql_ut.cpp @@ -384,6 +384,11 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write!"]); } + Y_UNIT_TEST(ExplainQueryPlan) { + UNIT_ASSERT(SqlToYql("EXPLAIN SELECT 1;").IsOk()); + UNIT_ASSERT(SqlToYql("EXPLAIN QUERY PLAN SELECT 1;").IsOk()); + } + Y_UNIT_TEST(JoinParseCorrect) { NYql::TAstParseResult res = SqlToYql( "PRAGMA DisableSimpleColumns;" @@ -3487,6 +3492,12 @@ Y_UNIT_TEST_SUITE(SqlToYQLErrors) { "<main>:1:8: Error: Column `c` must either be a key column in GROUP BY or it should be used in aggregation function\n"); } + Y_UNIT_TEST(ExplainQueryPlan) { + NYql::TAstParseResult res = SqlToYql("EXPLAIN Q U E R Y PLAN SELECT 1;"); + UNIT_ASSERT(!res.Root); + UNIT_ASSERT_STRING_CONTAINS(Err2Str(res), "<main>:1:8: Error: Unexpected token 'Q' : cannot match to any predicted input"); + } + Y_UNIT_TEST(SelectWithDuplicateGroupingColumns) { NYql::TAstParseResult res = SqlToYql("select c from plato.Input group by c, c"); UNIT_ASSERT(!res.Root); diff --git a/yql/essentials/sql/v1/sql_ut_antlr4.cpp b/yql/essentials/sql/v1/sql_ut_antlr4.cpp index 91b85e92e8f..202ac513916 100644 --- a/yql/essentials/sql/v1/sql_ut_antlr4.cpp +++ b/yql/essentials/sql/v1/sql_ut_antlr4.cpp @@ -384,6 +384,11 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) { UNIT_ASSERT_VALUES_EQUAL(1, elementStat["Write!"]); } + Y_UNIT_TEST(ExplainQueryPlan) { + UNIT_ASSERT(SqlToYql("EXPLAIN SELECT 1;").IsOk()); + UNIT_ASSERT(SqlToYql("EXPLAIN QUERY PLAN SELECT 1;").IsOk()); + } + Y_UNIT_TEST(JoinParseCorrect) { NYql::TAstParseResult res = SqlToYql( "PRAGMA DisableSimpleColumns;" @@ -3484,6 +3489,12 @@ Y_UNIT_TEST_SUITE(SqlToYQLErrors) { "<main>:1:8: Error: Column `c` must either be a key column in GROUP BY or it should be used in aggregation function\n"); } + Y_UNIT_TEST(ExplainQueryPlan) { + NYql::TAstParseResult res = SqlToYql("EXPLAIN Q U E R Y PLAN SELECT 1;"); + UNIT_ASSERT(!res.Root); + UNIT_ASSERT_STRING_CONTAINS(Err2Str(res), "<main>:1:8: Error: mismatched input 'Q' expecting {"); + } + Y_UNIT_TEST(SelectWithDuplicateGroupingColumns) { NYql::TAstParseResult res = SqlToYql("select c from plato.Input group by c, c"); UNIT_ASSERT(!res.Root); |