aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpnv1 <pnv1@yandex-team.com>2024-11-25 10:33:13 +0300
committerpnv1 <pnv1@yandex-team.com>2024-11-25 10:42:25 +0300
commit551b2ec4e6187023582efdbd78b3b73cabf11a76 (patch)
tree8694a690ae4c0b0a4dc27606e448b15eef98da4b
parent7204c790e855d1f454b9f40b104b610f7d84fa3f (diff)
downloadydb-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.in10
-rw-r--r--yql/essentials/sql/v1/SQLv1Antlr4.g.in16
-rw-r--r--yql/essentials/sql/v1/sql_ut.cpp11
-rw-r--r--yql/essentials/sql/v1/sql_ut_antlr4.cpp11
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);