aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/complete/sql_context.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-03-28 12:31:17 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-03-28 12:31:17 +0000
commitc1f22fe57811834ed05b72a521c87b45a897238f (patch)
treed8a82a250bd73164040e674a6b99e1a90ffba9e6 /yql/essentials/sql/v1/complete/sql_context.cpp
parent1ceef7ca45fef1a24b25617a4d9f2e6b3f5b7fad (diff)
parenta3709f79ab2678b16c3b2b57e43dd977d08bf7bf (diff)
downloadydb-c1f22fe57811834ed05b72a521c87b45a897238f.tar.gz
Merge branch 'rightlib' into merge-libs-250328-1230
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_context.cpp')
-rw-r--r--yql/essentials/sql/v1/complete/sql_context.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_context.cpp b/yql/essentials/sql/v1/complete/sql_context.cpp
index 2bd1a2af98..4cc809479b 100644
--- a/yql/essentials/sql/v1/complete/sql_context.cpp
+++ b/yql/essentials/sql/v1/complete/sql_context.cpp
@@ -4,14 +4,18 @@
#include "sql_syntax.h"
#include <yql/essentials/core/issue/yql_issue.h>
+
+#include <util/generic/algorithm.h>
+#include <util/stream/output.h>
+
+#ifdef TOKEN_QUERY // Conflict with the winnt.h
+#undef TOKEN_QUERY
+#endif
#include <yql/essentials/parser/antlr_ast/gen/v1_antlr4/SQLv1Antlr4Lexer.h>
#include <yql/essentials/parser/antlr_ast/gen/v1_antlr4/SQLv1Antlr4Parser.h>
#include <yql/essentials/parser/antlr_ast/gen/v1_ansi_antlr4/SQLv1Antlr4Lexer.h>
#include <yql/essentials/parser/antlr_ast/gen/v1_ansi_antlr4/SQLv1Antlr4Parser.h>
-#include <util/generic/algorithm.h>
-#include <util/stream/output.h>
-
namespace NSQLComplete {
template <bool IsAnsiLexer>
@@ -44,9 +48,10 @@ namespace NSQLComplete {
return {};
}
- auto tokens = C3.Complete(prefix);
+ auto candidates = C3.Complete(prefix);
return {
- .Keywords = SiftedKeywords(tokens),
+ .Keywords = SiftedKeywords(candidates),
+ .IsTypeName = IsTypeNameMatched(candidates),
};
}
@@ -68,12 +73,15 @@ namespace NSQLComplete {
std::unordered_set<TRuleId> ComputePreferredRules() {
const auto& keywordRules = Grammar->GetKeywordRules();
+ const auto& typeNameRules = Grammar->GetTypeNameRules();
std::unordered_set<TRuleId> preferredRules;
// Excludes tokens obtained from keyword rules
preferredRules.insert(std::begin(keywordRules), std::end(keywordRules));
+ preferredRules.insert(std::begin(typeNameRules), std::end(typeNameRules));
+
return preferredRules;
}
@@ -97,12 +105,12 @@ namespace NSQLComplete {
return true;
}
- TVector<TString> SiftedKeywords(const TVector<TSuggestedToken>& tokens) {
+ TVector<TString> SiftedKeywords(const TC3Candidates& candidates) {
const auto& vocabulary = Grammar->GetVocabulary();
const auto& keywordTokens = Grammar->GetKeywordTokens();
TVector<TString> keywords;
- for (const auto& token : tokens) {
+ for (const auto& token : candidates.Tokens) {
if (keywordTokens.contains(token.Number)) {
keywords.emplace_back(vocabulary.getDisplayName(token.Number));
}
@@ -110,6 +118,13 @@ namespace NSQLComplete {
return keywords;
}
+ bool IsTypeNameMatched(const TC3Candidates& candidates) {
+ const auto& typeNameRules = Grammar->GetTypeNameRules();
+ return FindIf(candidates.Rules, [&](const TMatchedRule& rule) {
+ return Find(typeNameRules, rule.Index) != std::end(typeNameRules);
+ }) != std::end(candidates.Rules);
+ }
+
const ISqlGrammar* Grammar;
NSQLTranslation::ILexer::TPtr Lexer_;
TC3Engine<G> C3;