aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Stoyan <vvvv@ydb.tech>2024-04-10 20:38:14 +0300
committerGitHub <noreply@github.com>2024-04-10 20:38:14 +0300
commit2ea53ff425b2ff686f672afd14a28df35a388c7e (patch)
tree9af9ab034bb04d52cb217276e3be8fb646a50f9c
parent9ddf52ff7d1d30dce886f8d79ba2f9eb5a327d32 (diff)
downloadydb-2ea53ff425b2ff686f672afd14a28df35a388c7e.tar.gz
Warning on join hints for cross join (#3644)
-rw-r--r--ydb/library/yql/sql/v1/sql_select.cpp7
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp12
2 files changed, 19 insertions, 0 deletions
diff --git a/ydb/library/yql/sql/v1/sql_select.cpp b/ydb/library/yql/sql/v1/sql_select.cpp
index f63d6d963aa..2700ba0e99f 100644
--- a/ydb/library/yql/sql/v1/sql_select.cpp
+++ b/ydb/library/yql/sql/v1/sql_select.cpp
@@ -47,7 +47,10 @@ bool TSqlSelect::JoinOp(ISource* join, const TRule_join_source::TBlock3& block,
newStrategy = TJoinLinkSettings::EStrategy::SortedMerge;
} else if (canonizedName == "streamlookup") {
newStrategy = TJoinLinkSettings::EStrategy::StreamLookup;
+ } else {
+ Ctx.Warning(hint.Pos, TIssuesIds::YQL_UNUSED_HINT) << "Unsupported join strategy: " << hint.Name;
}
+
if (TJoinLinkSettings::EStrategy::Default == linkSettings.Strategy) {
linkSettings.Strategy = newStrategy;
} else if (newStrategy == linkSettings.Strategy) {
@@ -119,6 +122,10 @@ bool TSqlSelect::JoinOp(ISource* join, const TRule_join_source::TBlock3& block,
joinOp = NormalizeJoinOp(joinOp);
Ctx.IncrementMonCounter("sql_features", "Join");
Ctx.IncrementMonCounter("sql_join_operations", joinOp);
+ if (linkSettings.Strategy != TJoinLinkSettings::EStrategy::Default && joinOp == "Cross") {
+ Ctx.Warning(Ctx.Pos(), TIssuesIds::YQL_UNUSED_HINT) << "Non-default join strategy will not be used for CROSS JOIN";
+ linkSettings.Strategy = TJoinLinkSettings::EStrategy::Default;
+ }
TNodePtr joinKeyExpr;
if (block.HasBlock4()) {
diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp
index f34c4b10a2b..70631adffd2 100644
--- a/ydb/library/yql/sql/v1/sql_ut.cpp
+++ b/ydb/library/yql/sql/v1/sql_ut.cpp
@@ -535,6 +535,18 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
}
}
+ Y_UNIT_TEST(WarnCrossJoinStrategyHint) {
+ NYql::TAstParseResult res = SqlToYql("SELECT * FROM plato.Input AS a CROSS JOIN /*+ merge() */ plato.Input AS b;");
+ UNIT_ASSERT(res.Root);
+ UNIT_ASSERT_STRINGS_EQUAL(res.Issues.ToString(), "<main>:1:32: Warning: Non-default join strategy will not be used for CROSS JOIN, code: 4534\n");
+ }
+
+ Y_UNIT_TEST(WarnUnknownJoinStrategyHint) {
+ NYql::TAstParseResult res = SqlToYql("SELECT * FROM plato.Input AS a JOIN /*+ xmerge() */ plato.Input AS b USING (key);");
+ UNIT_ASSERT(res.Root);
+ UNIT_ASSERT_STRINGS_EQUAL(res.Issues.ToString(), "<main>:1:41: Warning: Unsupported join strategy: xmerge, code: 4534\n");
+ }
+
Y_UNIT_TEST(ReverseLabels) {
NYql::TAstParseResult res = SqlToYql("select in.key as subkey, subkey as key from plato.Input as in;");
UNIT_ASSERT(res.Root);