summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/complete/sql_complete_ut.cpp
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-08-19 13:09:59 +0300
committervitya-smirnov <[email protected]>2025-08-19 13:26:01 +0300
commit6a26c68959783a009309949f61530030de259dc3 (patch)
treec8eb449414c3216485c26eea0a48ce7b7878ec46 /yql/essentials/sql/v1/complete/sql_complete_ut.cpp
parenta464bc70a160ce64c653b1b79969b59d7f65d4f9 (diff)
YQL-19747: Infer table path from CONCAT and RANGE
Table function `RANGE` is commonly used, so some support for a table path inference is required. It is done by doing ``` `prefix` || '/' || `min` ```. commit_hash:4bec2a84a0ee8f6d97c92a46b4c4ebc7b41c4d7c
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_complete_ut.cpp')
-rw-r--r--yql/essentials/sql/v1/complete/sql_complete_ut.cpp59
1 files changed, 53 insertions, 6 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp
index 2d5e12627e0..e8140e3b17f 100644
--- a/yql/essentials/sql/v1/complete/sql_complete_ut.cpp
+++ b/yql/essentials/sql/v1/complete/sql_complete_ut.cpp
@@ -128,6 +128,22 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
"Y Q L": {},
"o``o": {}
}}
+ }},
+ "loggy": { "type": "Folder", "entries": {
+ "yql": { "type": "Folder", "entries": {
+ "2025-01": { "type": "Table", "columns": {
+ "timestamp": {},
+ "message": {}
+ }},
+ "2025-02": { "type": "Table", "columns": {
+ "timestamp": {},
+ "message": {}
+ }},
+ "2025-03": { "type": "Table", "columns": {
+ "timestamp": {},
+ "message": {}
+ }}
+ }}
}}
})";
@@ -219,6 +235,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
Y_UNIT_TEST(Use) {
TVector<TCandidate> expected = {
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
};
auto engine = MakeSqlCompletionEngineUT();
@@ -242,10 +259,11 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{BindingName, "$cluster_name"},
{TableName, "`maxim`"},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
};
- UNIT_ASSERT_VALUES_EQUAL(CompleteTop(4, engine, query, env), expected);
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(5, engine, query, env), expected);
}
{
TVector<TCandidate> expected = {
@@ -254,12 +272,13 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{FolderName, "`prod/`", 1},
{FolderName, "`test/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
};
UNIT_ASSERT_VALUES_EQUAL(
CompleteTop(
- 7,
+ 8,
engine,
"USE yt:$cluster_name; SELECT * FROM ",
{.Parameters = {}}),
@@ -320,6 +339,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{FolderName, "`prod/`", 1},
{FolderName, "`test/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "IF NOT EXISTS"},
};
@@ -369,6 +389,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{FolderName, "`prod/`", 1},
{FolderName, "`test/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "IF EXISTS"},
};
@@ -568,6 +589,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{FolderName, "`prod/`", 1},
{FolderName, "`test/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
{FunctionName, "CONCAT()", 1},
@@ -677,6 +699,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{
TVector<TCandidate> expected = {
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
};
UNIT_ASSERT_VALUES_EQUAL(Complete(engine, "SELECT * FROM yt:"), expected);
@@ -713,10 +736,11 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
TVector<TCandidate> expected = {
{TableName, "`maxim`"},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
};
- UNIT_ASSERT_VALUES_EQUAL(CompleteTop(4, engine, "USE yt:saurus; SELECT * FROM "), expected);
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(5, engine, "USE yt:saurus; SELECT * FROM "), expected);
}
{
TVector<TCandidate> expected = {
@@ -729,20 +753,22 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
TVector<TCandidate> expected = {
{TableName, "`maxim`"},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
};
- UNIT_ASSERT_VALUES_EQUAL(CompleteTop(4, engine, "USE example; USE yt:saurus; SELECT * FROM "), expected);
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(5, engine, "USE example; USE yt:saurus; SELECT * FROM "), expected);
}
{
TVector<TCandidate> expected = {
{BindingName, "$hello"},
{TableName, "`maxim`"},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
};
- UNIT_ASSERT_VALUES_EQUAL(CompleteTop(5, engine, R"(
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(6, engine, R"(
USE example;
DEFINE ACTION $hello() AS
USE yt:saurus;
@@ -756,10 +782,11 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{TableName, "`people`"},
{FolderName, "`yql/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
{Keyword, "ANY"},
};
- UNIT_ASSERT_VALUES_EQUAL(CompleteTop(6, engine, R"(
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(7, engine, R"(
USE example;
DEFINE ACTION $action() AS
@@ -832,6 +859,7 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
{FolderName, "`prod/`", 1},
{FolderName, "`test/`", 1},
{ClusterName, "example"},
+ {ClusterName, "loggy"},
{ClusterName, "saurus"},
};
UNIT_ASSERT_VALUES_EQUAL(Complete(engine, "UPSERT INTO "), expected);
@@ -1411,6 +1439,25 @@ Y_UNIT_TEST_SUITE(SqlCompleteTests) {
}
}
+ Y_UNIT_TEST(ColumnFromTableFunction) {
+ auto engine = MakeSqlCompletionEngineUT();
+
+ TVector<TString> input = {
+ R"sql(SELECT # FROM loggy.CONCAT(`yql/2025-01`))sql",
+ R"sql(SELECT # FROM loggy.CONCAT(`yql/2025-01`, `yql/2025-02`))sql",
+ R"sql(SELECT # FROM loggy.RANGE(`yql`, `2025-01`, `2025-03`))sql",
+ };
+
+ TVector<TCandidate> expected = {
+ {ColumnName, "message"},
+ {ColumnName, "timestamp"},
+ };
+
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, input[0]), expected);
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, input[1]), expected);
+ UNIT_ASSERT_VALUES_EQUAL(CompleteTop(2, engine, input[2]), expected);
+ }
+
Y_UNIT_TEST(ColumnPositions) {
auto engine = MakeSqlCompletionEngineUT();