diff options
author | pilik <pudge1000-7@ydb.tech> | 2024-10-02 20:43:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-02 20:43:00 +0300 |
commit | ac7e20cc3c1d2a1910b95a0822183be6ca2e1f87 (patch) | |
tree | fa199a660dc557e50b169442e1363405f0d209ad | |
parent | e552def618e91f70afcbf6821836b09a9e33c33f (diff) | |
download | ydb-ac7e20cc3c1d2a1910b95a0822183be6ca2e1f87.tar.gz |
[CBO] Fix LeftOnly (LeftAntiJoin) algebraic matrix (#9974)
-rw-r--r-- | ydb/library/yql/core/cbo/cbo_optimizer_new.h | 4 | ||||
-rw-r--r-- | ydb/library/yql/dq/opt/dq_opt_conflict_rules_collector.cpp | 19 |
2 files changed, 11 insertions, 12 deletions
diff --git a/ydb/library/yql/core/cbo/cbo_optimizer_new.h b/ydb/library/yql/core/cbo/cbo_optimizer_new.h index 7f009a61d5..0a564e4c35 100644 --- a/ydb/library/yql/core/cbo/cbo_optimizer_new.h +++ b/ydb/library/yql/core/cbo/cbo_optimizer_new.h @@ -47,8 +47,8 @@ enum EJoinKind: ui32 LeftJoin, RightJoin, OuterJoin, - LeftOnly, - RightOnly, + LeftOnly /* == LeftAntiJoin */, + RightOnly /* == RightAntiJoin */, LeftSemi, RightSemi, Cross, diff --git a/ydb/library/yql/dq/opt/dq_opt_conflict_rules_collector.cpp b/ydb/library/yql/dq/opt/dq_opt_conflict_rules_collector.cpp index 266553a433..68d702aa3b 100644 --- a/ydb/library/yql/dq/opt/dq_opt_conflict_rules_collector.cpp +++ b/ydb/library/yql/dq/opt/dq_opt_conflict_rules_collector.cpp @@ -8,8 +8,6 @@ EJoinKind GetEquivalentJoinByAlgebraicProperties(EJoinKind joinKind) { switch (joinKind) { case EJoinKind::Exclusion: return EJoinKind::OuterJoin; - case EJoinKind::LeftOnly: - return EJoinKind::LeftJoin; default: return joinKind; } @@ -34,9 +32,9 @@ bool OperatorsAreAssociative(EJoinKind lhs, EJoinKind rhs) { rhs = GetEquivalentJoinByAlgebraicProperties(rhs); static THashMap<EJoinKind, THashSet<EJoinKind>> ASSOC_TABLE = { - {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin}}, - {EJoinKind::InnerJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin}}, - {EJoinKind::LeftJoin, {EJoinKind::LeftJoin}}, + {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::InnerJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::LeftJoin, {EJoinKind::LeftJoin}}, {EJoinKind::OuterJoin, {EJoinKind::LeftJoin, EJoinKind::OuterJoin}} }; @@ -52,10 +50,11 @@ bool OperatorsAreLeftAsscom(EJoinKind lhs, EJoinKind rhs) { rhs = GetEquivalentJoinByAlgebraicProperties(rhs); static THashMap<EJoinKind, THashSet<EJoinKind>> LASSCOM_TABLE = { - {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin}}, - {EJoinKind::InnerJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin}}, - {EJoinKind::LeftSemi, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin}}, - {EJoinKind::LeftJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin, EJoinKind::OuterJoin}}, + {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::InnerJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::LeftSemi, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::LeftOnly, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftOnly, EJoinKind::LeftJoin}}, + {EJoinKind::LeftJoin, {EJoinKind::Cross, EJoinKind::InnerJoin, EJoinKind::LeftSemi, EJoinKind::LeftJoin, EJoinKind::OuterJoin}}, {EJoinKind::OuterJoin, {EJoinKind::LeftJoin, EJoinKind::OuterJoin}} }; @@ -71,7 +70,7 @@ bool OperatorsAreRightAsscom(EJoinKind lhs, EJoinKind rhs) { rhs = GetEquivalentJoinByAlgebraicProperties(rhs); static THashMap<EJoinKind, THashSet<EJoinKind>> RASSCOM_TABLE = { - {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin}}, + {EJoinKind::Cross, {EJoinKind::Cross, EJoinKind::InnerJoin}}, {EJoinKind::InnerJoin, {EJoinKind::Cross, EJoinKind::InnerJoin}}, {EJoinKind::OuterJoin, {EJoinKind::OuterJoin}} }; |