diff options
author | Vitaly Stoyan <vvvv@ydb.tech> | 2024-04-10 20:38:14 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-10 20:38:14 +0300 |
commit | 2ea53ff425b2ff686f672afd14a28df35a388c7e (patch) | |
tree | 9af9ab034bb04d52cb217276e3be8fb646a50f9c | |
parent | 9ddf52ff7d1d30dce886f8d79ba2f9eb5a327d32 (diff) | |
download | ydb-2ea53ff425b2ff686f672afd14a28df35a388c7e.tar.gz |
Warning on join hints for cross join (#3644)
-rw-r--r-- | ydb/library/yql/sql/v1/sql_select.cpp | 7 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql_ut.cpp | 12 |
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); |