summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvityaman <[email protected]>2025-04-10 17:08:20 +0300
committerrobot-piglet <[email protected]>2025-04-10 17:35:51 +0300
commit473f2869597653cf26c8582095d1d9a805cb66fb (patch)
treef6afcec18b8aa4615143870629a54490640c0bdd
parentad6f8c8e4e2fa19203ed9f28d4eb74827e937d3e (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.cpp36
-rw-r--r--yql/essentials/sql/v1/complete/syntax/parser_call_stack.cpp6
-rw-r--r--yql/essentials/sql/v1/complete/syntax/ya.make2
-rw-r--r--yql/essentials/sql/v1/complete/ya.make2
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