diff options
author | vitya-smirnov <[email protected]> | 2025-10-07 09:34:39 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-10-07 09:52:14 +0300 |
commit | babe7533f18c11be1f8a195ed2324d2d9a89436a (patch) | |
tree | 45b7627141bf5a52b45a3d61fd1fbdd564bb8dd9 /yql/essentials/sql/v1/complete/check/check_complete.cpp | |
parent | 8fe7cfe254fde2772477a8933a163b5f303716b4 (diff) |
YQL-20086 sql/v1
commit_hash:55bc611cdaa0d8a0fc3c4c7708ed9f17cc4976cf
Diffstat (limited to 'yql/essentials/sql/v1/complete/check/check_complete.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/check/check_complete.cpp | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/yql/essentials/sql/v1/complete/check/check_complete.cpp b/yql/essentials/sql/v1/complete/check/check_complete.cpp index dbbc4b1e6c4..2ed7ccd835e 100644 --- a/yql/essentials/sql/v1/complete/check/check_complete.cpp +++ b/yql/essentials/sql/v1/complete/check/check_complete.cpp @@ -17,93 +17,93 @@ namespace NSQLComplete { - namespace { - - TLexerSupplier MakePureLexerSupplier() { - NSQLTranslationV1::TLexers lexers; - lexers.Antlr4Pure = NSQLTranslationV1::MakeAntlr4PureLexerFactory(); - lexers.Antlr4PureAnsi = NSQLTranslationV1::MakeAntlr4PureAnsiLexerFactory(); - return [lexers = std::move(lexers)](bool ansi) { - return NSQLTranslationV1::MakeLexer( - lexers, ansi, /* antlr4 = */ true, - NSQLTranslationV1::ELexerFlavor::Pure); - }; +namespace { + +TLexerSupplier MakePureLexerSupplier() { + NSQLTranslationV1::TLexers lexers; + lexers.Antlr4Pure = NSQLTranslationV1::MakeAntlr4PureLexerFactory(); + lexers.Antlr4PureAnsi = NSQLTranslationV1::MakeAntlr4PureAnsiLexerFactory(); + return [lexers = std::move(lexers)](bool ansi) { + return NSQLTranslationV1::MakeLexer( + lexers, ansi, /* antlr4 = */ true, + NSQLTranslationV1::ELexerFlavor::Pure); + }; +} + +INameService::TPtr MakeClusterNameService(const TYqlContext& ctx) { + THashSet<TString> clusterSet = ctx.Clusters(); + TVector<TString> clusterVec(begin(clusterSet), end(clusterSet)); + Sort(clusterVec); + + return MakeClusterNameService(MakeStaticClusterDiscovery(std::move(clusterVec))); +} + +INameService::TPtr MakeSchemaNameService(const TYqlContext& ctx) { + THashMap<TString, THashMap<TString, TVector<TFolderEntry>>> fs; + for (const auto& [cluster, tables] : ctx.TablesByCluster) { + for (TString table : tables) { + fs[cluster]["/"].push_back(TFolderEntry{ + .Type = TFolderEntry::Table, + .Name = std::move(table), + }); } + } - INameService::TPtr MakeClusterNameService(const TYqlContext& ctx) { - THashSet<TString> clusterSet = ctx.Clusters(); - TVector<TString> clusterVec(begin(clusterSet), end(clusterSet)); - Sort(clusterVec); - - return MakeClusterNameService(MakeStaticClusterDiscovery(std::move(clusterVec))); + return MakeSchemaNameService(MakeSimpleSchema(MakeStaticSimpleSchema({.Folders = std::move(fs)}))); +} + +} // namespace + +bool CheckComplete(TStringBuf query, TYqlContext ctx) { + constexpr size_t Seed = 97651231; + constexpr size_t Attempts = 64; + constexpr size_t MaxAttempts = 256; + SetRandomSeed(Seed); + + auto service = MakeUnionNameService( + { + MakeClusterNameService(ctx), + MakeSchemaNameService(ctx), + }, + MakeDefaultRanking()); + + auto engine = MakeSqlCompletionEngine( + MakePureLexerSupplier(), + std::move(service), + MakeYQLConfiguration()); + + for (size_t i = 0, j = 0; i < Attempts && j < MaxAttempts; ++j) { + size_t pos = RandomNumber<size_t>(query.size() + 1); + if (pos < query.size() && IsUTF8ContinuationByte(query.at(pos))) { + continue; } - INameService::TPtr MakeSchemaNameService(const TYqlContext& ctx) { - THashMap<TString, THashMap<TString, TVector<TFolderEntry>>> fs; - for (const auto& [cluster, tables] : ctx.TablesByCluster) { - for (TString table : tables) { - fs[cluster]["/"].push_back(TFolderEntry{ - .Type = TFolderEntry::Table, - .Name = std::move(table), - }); - } - } - - return MakeSchemaNameService(MakeSimpleSchema(MakeStaticSimpleSchema({.Folders = std::move(fs)}))); - } + TCompletionInput input = { + .Text = query, + .CursorPosition = pos, + }; - } // namespace - - bool CheckComplete(TStringBuf query, TYqlContext ctx) { - constexpr size_t Seed = 97651231; - constexpr size_t Attempts = 64; - constexpr size_t MaxAttempts = 256; - SetRandomSeed(Seed); - - auto service = MakeUnionNameService( - { - MakeClusterNameService(ctx), - MakeSchemaNameService(ctx), - }, - MakeDefaultRanking()); - - auto engine = MakeSqlCompletionEngine( - MakePureLexerSupplier(), - std::move(service), - MakeYQLConfiguration()); - - for (size_t i = 0, j = 0; i < Attempts && j < MaxAttempts; ++j) { - size_t pos = RandomNumber<size_t>(query.size() + 1); - if (pos < query.size() && IsUTF8ContinuationByte(query.at(pos))) { - continue; - } - - TCompletionInput input = { - .Text = query, - .CursorPosition = pos, - }; - - auto output = engine->Complete(input).ExtractValueSync(); - Y_DO_NOT_OPTIMIZE_AWAY(output); - - i += 1; - } + auto output = engine->Complete(input).ExtractValueSync(); + Y_DO_NOT_OPTIMIZE_AWAY(output); - return true; + i += 1; } - bool CheckComplete(TStringBuf query, NYql::TExprNode::TPtr root, NYql::TExprContext& ctx, NYql::TIssues& issues) try { - return CheckComplete(query, MakeYqlAnalysis()->Analyze(root, ctx)); - } catch (...) { - issues.AddIssue(FormatCurrentException()); - return false; - } - - bool CheckComplete(TStringBuf query, NYql::TAstNode& root, NYql::TIssues& issues) try { - return CheckComplete(query, MakeYqlAnalysis()->Analyze(root, issues).GetOrElse({})); - } catch (...) { - issues.AddIssue(FormatCurrentException()); - return false; - } + return true; +} + +bool CheckComplete(TStringBuf query, NYql::TExprNode::TPtr root, NYql::TExprContext& ctx, NYql::TIssues& issues) try { + return CheckComplete(query, MakeYqlAnalysis()->Analyze(root, ctx)); +} catch (...) { + issues.AddIssue(FormatCurrentException()); + return false; +} + +bool CheckComplete(TStringBuf query, NYql::TAstNode& root, NYql::TIssues& issues) try { + return CheckComplete(query, MakeYqlAnalysis()->Analyze(root, issues).GetOrElse({})); +} catch (...) { + issues.AddIssue(FormatCurrentException()); + return false; +} } // namespace NSQLComplete |