summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/complete/sql_complete_ut.cpp
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-06-17 12:45:20 +0300
committervitya-smirnov <[email protected]>2025-06-17 13:12:27 +0300
commit633ab50dd51d6f17810f71559ccf6e5bfebe2044 (patch)
treeebb85b4dff775656e3b5ee1937c1ced01db0f853 /yql/essentials/sql/v1/complete/sql_complete_ut.cpp
parentbacec6cbd87d14bf55c256f17797537ae8c2bbed (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.cpp35
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"