diff options
author | vityaman <[email protected]> | 2025-04-10 17:08:20 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-04-10 17:35:51 +0300 |
commit | 473f2869597653cf26c8582095d1d9a805cb66fb (patch) | |
tree | f6afcec18b8aa4615143870629a54490640c0bdd | |
parent | ad6f8c8e4e2fa19203ed9f28d4eb74827e937d3e (diff) |
YQL-19747 Complete read hints on PROCESS and REDUCE
Forgot to support it.
- Related to https://github.com/ydb-platform/ydb/issues/9056
- Related to https://github.com/vityaman/ydb/issues/24
---
Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/1195
commit_hash:a2f5937dbca5712f3ecbfccdf66662ce99e70619
-rw-r--r-- | yql/essentials/sql/v1/complete/sql_complete_ut.cpp | 36 | ||||
-rw-r--r-- | yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp | 6 | ||||
-rw-r--r-- | yql/essentials/sql/v1/complete/syntax/ya.make | 2 | ||||
-rw-r--r-- | yql/essentials/sql/v1/complete/ya.make | 2 |
4 files changed, 33 insertions, 13 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp index 4e3b84be617..dd7145169c1 100644 --- a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp +++ b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp @@ -477,14 +477,29 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) { } Y_UNIT_TEST(SelectTableHintName) { - TVector<TCandidate> expected = { - {Keyword, "COLUMNS"}, - {Keyword, "SCHEMA"}, - {HintName, "XLOCK"}, - }; - auto engine = MakeSqlCompletionEngineUT(); - UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"SELECT key FROM my_table WITH "}), expected); + { + TVector<TCandidate> expected = { + {HintName, "XLOCK"}, + }; + UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"PROCESS my_table USING $udf(TableRows()) WITH "}), expected); + } + { + TVector<TCandidate> expected = { + {Keyword, "COLUMNS"}, + {Keyword, "SCHEMA"}, + {HintName, "XLOCK"}, + }; + UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"REDUCE my_table WITH "}), expected); + } + { + TVector<TCandidate> expected = { + {Keyword, "COLUMNS"}, + {Keyword, "SCHEMA"}, + {HintName, "XLOCK"}, + }; + UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"SELECT key FROM my_table WITH "}), expected); + } } Y_UNIT_TEST(InsertTableHintName) { @@ -587,6 +602,13 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) { }; UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"PRAGMA yson"}), expected); } + { + TVector<TCandidate> expected = { + {HintName, "IGNORE_TYPE_V3"}, + {HintName, "IGNORETYPEV3"}, + }; + UNIT_ASSERT_VALUES_EQUAL(Complete(engine, {"REDUCE a WITH ig"}), expected); + } } Y_UNIT_TEST(OnFailingNameService) { diff --git a/yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp b/yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp index bbe0b3d371c..cdd284b0ad4 100644 --- a/yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp +++ b/yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp @@ -44,6 +44,7 @@ namespace NSQLComplete { const TVector<TRuleId> HintNameRules = { RULE(Id_hint), + RULE(An_id), }; TVector<std::string> Symbolized(const TParserCallStack& stack) { @@ -96,12 +97,13 @@ namespace NSQLComplete { } bool IsLikelyHintStack(const TParserCallStack& stack) { - return ContainsRule(RULE(Id_hint), stack); + return ContainsRule(RULE(Id_hint), stack) || + Contains({RULE(External_call_param), RULE(An_id)}, stack); } std::optional<EStatementKind> StatementKindOf(const TParserCallStack& stack) { for (TRuleId rule : std::ranges::views::reverse(stack)) { - if (rule == RULE(Select_core)) { + if (rule == RULE(Process_core) || rule == RULE(Reduce_core) || rule == RULE(Select_core)) { return EStatementKind::Select; } if (rule == RULE(Into_table_stmt)) { diff --git a/yql/essentials/sql/v1/complete/syntax/ya.make b/yql/essentials/sql/v1/complete/syntax/ya.make index 24fd94a952a..e9b3ca15bdd 100644 --- a/yql/essentials/sql/v1/complete/syntax/ya.make +++ b/yql/essentials/sql/v1/complete/syntax/ya.make @@ -13,11 +13,9 @@ ADDINCL( PEERDIR( yql/essentials/core/issue - yql/essentials/parser/antlr_ast/gen/v1_ansi_antlr4 yql/essentials/parser/antlr_ast/gen/v1_antlr4 yql/essentials/parser/lexer_common - yql/essentials/sql/settings yql/essentials/sql/v1/lexer yql/essentials/sql/v1/reflect diff --git a/yql/essentials/sql/v1/complete/ya.make b/yql/essentials/sql/v1/complete/ya.make index 57e3ba3bf63..0fc358e88b5 100644 --- a/yql/essentials/sql/v1/complete/ya.make +++ b/yql/essentials/sql/v1/complete/ya.make @@ -6,11 +6,9 @@ SRCS( PEERDIR( yql/essentials/sql/v1/lexer - # FIXME(YQL-19747): unwanted dependency on a lexer implementation yql/essentials/sql/v1/lexer/antlr4_pure yql/essentials/sql/v1/lexer/antlr4_pure_ansi - yql/essentials/sql/v1/complete/antlr4 yql/essentials/sql/v1/complete/name yql/essentials/sql/v1/complete/name/static |