diff options
author | vitya-smirnov <[email protected]> | 2025-06-17 16:02:41 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-06-17 16:18:59 +0300 |
commit | 0bc6f0197fa813fec678c75c760564724f591309 (patch) | |
tree | bb40ca81a21ddb608154e56967202c0548708551 /yql/essentials/sql/v1/complete/sql_complete.cpp | |
parent | d84e9cf123d8345dc008b9b0feafbb20be9d9784 (diff) |
YQL-19747: Support token ignoring patterns
Added support for token filtration. It is needed because YQL grammar supports multiple systems with various capabilities. For example, some of those do not support `INTERSECT ALL` and therefore `ALL` after `INTERSECT` should be *disabled*. Another example is a support of an only `EVALUATE FOR`, so `FOR` is *forced* to be precendenced by `EVALUATE`.
commit_hash:a926c8d3911f8dd025ab58eb7f81e2370fcd9376
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_complete.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/sql_complete.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete.cpp b/yql/essentials/sql/v1/complete/sql_complete.cpp index 2f61b1fe4df..2ed153f3ecc 100644 --- a/yql/essentials/sql/v1/complete/sql_complete.cpp +++ b/yql/essentials/sql/v1/complete/sql_complete.cpp @@ -22,7 +22,11 @@ namespace NSQLComplete { INameService::TPtr names, ISqlCompletionEngine::TConfiguration configuration) : Configuration_(std::move(configuration)) - , SyntaxAnalysis_(MakeLocalSyntaxAnalysis(lexer, Configuration_.IgnoredRules)) + , SyntaxAnalysis_(MakeLocalSyntaxAnalysis( + lexer, + Configuration_.IgnoredRules, + Configuration_.DisabledPreviousByToken, + Configuration_.ForcedPreviousByToken)) , GlobalAnalysis_(MakeGlobalAnalysis()) , Names_(std::move(names)) { @@ -272,17 +276,17 @@ namespace NSQLComplete { } ISqlCompletionEngine::TConfiguration MakeYDBConfiguration() { - return { - .IgnoredRules = { - "use_stmt", - "import_stmt", - "export_stmt", - }, + ISqlCompletionEngine::TConfiguration config; + config.IgnoredRules = { + "use_stmt", + "import_stmt", + "export_stmt", }; + return config; } ISqlCompletionEngine::TConfiguration MakeYQLConfiguration() { - return MakeConfiguration(/* allowedStmts = */ { + auto config = MakeConfiguration(/* allowedStmts = */ { "lambda_stmt", "pragma_stmt", "select_stmt", @@ -300,6 +304,18 @@ namespace NSQLComplete { "for_stmt", "values_stmt", }); + + config.DisabledPreviousByToken = {}; + + config.ForcedPreviousByToken = { + {"PARALLEL", {}}, + {"TABLESTORE", {}}, + {"FOR", {"EVALUATE"}}, + {"IF", {"EVALUATE"}}, + {"EXTERNAL", {"USING"}}, + }; + + return config; } ISqlCompletionEngine::TPtr MakeSqlCompletionEngine( |