diff options
author | vitya-smirnov <[email protected]> | 2025-06-17 12:45:20 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-06-17 13:12:27 +0300 |
commit | 633ab50dd51d6f17810f71559ccf6e5bfebe2044 (patch) | |
tree | ebb85b4dff775656e3b5ee1937c1ced01db0f853 /yql/essentials/sql/v1/complete/sql_complete_ut.cpp | |
parent | bacec6cbd87d14bf55c256f17797537ae8c2bbed (diff) |
YQL-19747: Complete columns at simple select
Added support for a columns completion at a simple select. For example, `` SELECT # FROM hahn.`home/yql/tutorial/users` `` и `` USE hahn; SELECT $ FROM `home/yql/tutorial/users` ``.
commit_hash:2254449e91255c19792a1dc521825e44dda7d63b
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_complete_ut.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/sql_complete_ut.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp index 878897a3844..d37d34be06b 100644 --- a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp +++ b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp @@ -43,6 +43,7 @@ public: Y_UNIT_TEST_SUITE(SqlCompleteTests) { using ECandidateKind::BindingName; using ECandidateKind::ClusterName; + using ECandidateKind::ColumnName; using ECandidateKind::FolderName; using ECandidateKind::FunctionName; using ECandidateKind::HintName; @@ -83,7 +84,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) { }, }; - THashMap<TString, THashMap<TString, TVector<TFolderEntry>>> fs = { + THashMap<TString, THashMap<TString, TVector<TFolderEntry>>> folders = { {"", {{"/", {{"Folder", "local"}, {"Folder", "test"}, {"Folder", "prod"}, @@ -103,15 +104,18 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) { {{"/", {{"Table", "maxim"}}}}}, }; + THashMap<TString, THashMap<TString, TTableDetails>> tables = { + {"example", {{"/people", {{"name", "age"}}}}}}; + auto clustersIt = NFuncTools::Filter( - [](const auto& x) { return !x.empty(); }, IterateKeys(fs)); + [](const auto& x) { return !x.empty(); }, IterateKeys(folders)); TVector<TString> clusters(begin(clustersIt), end(clustersIt)); TFrequencyData frequency; TVector<INameService::TPtr> children = { MakeStaticNameService(std::move(names), frequency), - MakeSchemaNameService(MakeSimpleSchema(MakeStaticSimpleSchema(std::move(fs)))), + MakeSchemaNameService(MakeSimpleSchema(MakeStaticSimpleSchema(std::move(folders), std::move(tables)))), MakeClusterNameService(MakeStaticClusterDiscovery(std::move(clusters))), }; INameService::TPtr service = MakeUnionNameService( @@ -1045,6 +1049,31 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) { CompleteTop(1, engine, "SELECT Max(#)").at(0).Kind, FolderName); } + Y_UNIT_TEST(ColumnsAtSimpleSelect) { + auto engine = MakeSqlCompletionEngineUT(); + { + TVector<TCandidate> expected = { + {ColumnName, "age"}, + {ColumnName, "name"}, + }; + UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT # FROM example.`/people`"), expected); + } + { + TVector<TCandidate> expected = { + {ColumnName, "age"}, + {Keyword, "ALL"}, + }; + UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "SELECT a# FROM example.`/people`"), expected); + } + { + TVector<TCandidate> expected = { + {ColumnName, "age"}, + {ColumnName, "name"}, + }; + UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, "USE example; SELECT # FROM `/people`"), expected); + } + } + Y_UNIT_TEST(Typing) { const auto queryUtf16 = TUtf16String::FromUtf8( "SELECT \n" |