diff options
author | lucius <[email protected]> | 2025-07-21 13:57:54 +0300 |
---|---|---|
committer | lucius <[email protected]> | 2025-07-21 14:13:37 +0300 |
commit | fea05ea76fdac14746236e14bda98ce8cc29fb00 (patch) | |
tree | 8c6fe4bf0602c2b77b9270bce0816e9ed3b19ba8 /yql/essentials/tests/sql/suites | |
parent | caefbb016b70b186bad0fa7f07a1524b3211fec4 (diff) |
YQL-19896: allow optional side in SingleInputPredicatePushdownOverEquiJoin in some cases
Разрешаем пушить на необязательную сторону предикат, который использует только ключевые колонки с обязательной стороны джоина.
1) рассматриваемый предикат зависит только 1 стороны и это обязательная сторона джоина
2) предикат зависит только от ключевых колонок джоина
3) все соответствующие по ключу джоина колонки в обязательном и необязательном инпутах должны полностью совпадать по типу
В этих случаях мы пушим предикат не только на обязательную, но и на необязательную сторону
commit_hash:1404e877fdd271dbe8342478a20b99b6f99a4fda
Diffstat (limited to 'yql/essentials/tests/sql/suites')
-rw-r--r-- | yql/essentials/tests/sql/suites/join/pushdown_all_sides.sql | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/yql/essentials/tests/sql/suites/join/pushdown_all_sides.sql b/yql/essentials/tests/sql/suites/join/pushdown_all_sides.sql new file mode 100644 index 00000000000..6abbd0890a9 --- /dev/null +++ b/yql/essentials/tests/sql/suites/join/pushdown_all_sides.sql @@ -0,0 +1,145 @@ +PRAGMA config.flags("OptimizerFlags", "PredicatePushdownOverEquiJoinBothSides"); + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +LEFT JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t1.k1 > 0 +; + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +RIGHT JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t2.k2 > 0 +; + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +LEFT SEMI JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t1.k1 > 0 +; + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +RIGHT SEMI JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t2.k2 > 0 +; + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +LEFT ONLY JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t1.k1 > 0 +; + +SELECT * +FROM AS_TABLE([ + <|k1: -2|>, + <|k1: -1|>, + <|k1: 0|>, + <|k1: 0|>, + <|k1: 1|>, + <|k1: 2|>, + <|k1: 3|>, + <|k1: 4|>, +]) AS t1 +RIGHT ONLY JOIN AS_TABLE([ + <|k2: -2|>, + <|k2: 0|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 2|>, + <|k2: 4|>, + <|k2: 6|>, +]) AS t2 +ON t1.k1 == t2.k2 +WHERE t2.k2 > 0 +; |