diff options
author | vityaman <[email protected]> | 2025-05-20 12:50:28 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-05-20 13:07:06 +0300 |
commit | 16630d4dfad772e0108e694f76f922e486cd6439 (patch) | |
tree | 9502ff9057dfb71a94154f66a3e6452bf684c8fd /yql/essentials/sql/v1/complete/sql_complete.cpp | |
parent | 2cca5c2b53580983c51f00239859e45d4bc32836 (diff) |
YQL-19747: Support USE statement
Introduce global analysis which will be extended with more ParseTree analysis later.
---
- Related to `YQL-19747`
- Related to https://github.com/vityaman/ydb/issues/40
---
Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/1281
commit_hash:848fb3fdd6bc9612769c47d66198fca018ff465f
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_complete.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/sql_complete.cpp | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete.cpp b/yql/essentials/sql/v1/complete/sql_complete.cpp index d22e06e2b94..00d346f0770 100644 --- a/yql/essentials/sql/v1/complete/sql_complete.cpp +++ b/yql/essentials/sql/v1/complete/sql_complete.cpp @@ -4,6 +4,7 @@ #include <yql/essentials/sql/v1/complete/name/service/static/name_service.h> #include <yql/essentials/sql/v1/complete/syntax/local.h> #include <yql/essentials/sql/v1/complete/syntax/format.h> +#include <yql/essentials/sql/v1/complete/analysis/global/global.h> #include <util/generic/algorithm.h> #include <util/charset/utf8.h> @@ -18,6 +19,7 @@ namespace NSQLComplete { ISqlCompletionEngine::TConfiguration configuration) : Configuration_(std::move(configuration)) , SyntaxAnalysis_(MakeLocalSyntaxAnalysis(lexer)) + , GlobalAnalysis_(MakeGlobalAnalysis()) , Names_(std::move(names)) { } @@ -39,7 +41,9 @@ namespace NSQLComplete { TLocalSyntaxContext context = SyntaxAnalysis_->Analyze(input); auto keywords = context.Keywords; - TNameRequest request = NameRequestFrom(input, context); + TGlobalContext global = GlobalAnalysis_->Analyze(input); + + TNameRequest request = NameRequestFrom(input, context, global); if (request.IsEmpty()) { return NThreading::MakeFuture<TCompletion>({ .CompletedToken = GetCompletedToken(input, context.EditRange), @@ -61,7 +65,10 @@ namespace NSQLComplete { }; } - TNameRequest NameRequestFrom(TCompletionInput input, const TLocalSyntaxContext& context) const { + TNameRequest NameRequestFrom( + TCompletionInput input, + const TLocalSyntaxContext& context, + const TGlobalContext& global) const { TNameRequest request = { .Prefix = TString(GetCompletedToken(input, context.EditRange).Content), .Limit = Configuration_.Limit, @@ -94,14 +101,21 @@ namespace NSQLComplete { } if (context.Object) { - request.Constraints.Object = TObjectNameConstraints{ - .Provider = context.Object->Provider, - .Cluster = context.Object->Cluster, - .Kinds = context.Object->Kinds, - }; + request.Constraints.Object = TObjectNameConstraints(); + request.Constraints.Object->Kinds = context.Object->Kinds; request.Prefix = context.Object->Path; } + if (context.Object && global.Use) { + request.Constraints.Object->Provider = global.Use->Provider; + request.Constraints.Object->Cluster = global.Use->Cluster; + } + + if (context.Object && context.Object->HasCluster()) { + request.Constraints.Object->Provider = context.Object->Provider; + request.Constraints.Object->Cluster = context.Object->Cluster; + } + if (context.Cluster) { TClusterName::TConstraints constraints; constraints.Namespace = context.Cluster->Provider; @@ -195,6 +209,7 @@ namespace NSQLComplete { TConfiguration Configuration_; ILocalSyntaxAnalysis::TPtr SyntaxAnalysis_; + IGlobalAnalysis::TPtr GlobalAnalysis_; INameService::TPtr Names_; }; |