summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/complete/sql_complete.cpp
diff options
context:
space:
mode:
authorvityaman <[email protected]>2025-05-20 12:50:28 +0300
committerrobot-piglet <[email protected]>2025-05-20 13:07:06 +0300
commit16630d4dfad772e0108e694f76f922e486cd6439 (patch)
tree9502ff9057dfb71a94154f66a3e6452bf684c8fd /yql/essentials/sql/v1/complete/sql_complete.cpp
parent2cca5c2b53580983c51f00239859e45d4bc32836 (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.cpp29
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_;
};