Skip to content

Commit 6b0570b

Browse files
authored
Fix invalid swap for LeftMark nested loops join (#13426)
1 parent 97045ec commit 6b0570b

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

datafusion/core/src/physical_optimizer/join_selection.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,9 @@ fn statistical_join_selection_subrule(
494494
} else if let Some(nl_join) = plan.as_any().downcast_ref::<NestedLoopJoinExec>() {
495495
let left = nl_join.left();
496496
let right = nl_join.right();
497-
if should_swap_join_order(&**left, &**right)? {
497+
if supports_swap(*nl_join.join_type())
498+
&& should_swap_join_order(&**left, &**right)?
499+
{
498500
swap_nl_join(nl_join).map(Some)?
499501
} else {
500502
None

datafusion/sqllogictest/test_files/join.slt

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1226,3 +1226,89 @@ select t1.v1 from t1 join t1 using(v1) cross join (select struct('foo' as v1) as
12261226

12271227
statement ok
12281228
drop table t1;
1229+
1230+
1231+
statement ok
1232+
CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER, e INTEGER);
1233+
1234+
statement ok
1235+
INSERT INTO t1(e,c,b,d,a) VALUES(103,102,100,101,104);
1236+
1237+
statement ok
1238+
INSERT INTO t1(a,c,d,e,b) VALUES(107,106,108,109,105);
1239+
1240+
statement ok
1241+
INSERT INTO t1(d,c,e,a,b) VALUES(116,119,117,115,118);
1242+
1243+
statement ok
1244+
INSERT INTO t1(c,d,b,e,a) VALUES(123,122,124,120,121);
1245+
1246+
statement ok
1247+
INSERT INTO t1(b,a,e,d,c) VALUES(145,149,146,148,147);
1248+
1249+
statement ok
1250+
INSERT INTO t1(b,c,a,d,e) VALUES(151,150,153,154,152);
1251+
1252+
statement ok
1253+
INSERT INTO t1(c,b,a,d,e) VALUES(161,160,163,164,162);
1254+
1255+
statement ok
1256+
INSERT INTO t1(b,d,a,e,c) VALUES(167,169,168,165,166);
1257+
1258+
statement ok
1259+
INSERT INTO t1(d,b,c,e,a) VALUES(171,170,172,173,174);
1260+
1261+
statement ok
1262+
INSERT INTO t1(e,c,a,d,b) VALUES(177,176,179,178,175);
1263+
1264+
statement ok
1265+
INSERT INTO t1(b,e,a,d,c) VALUES(181,180,182,183,184);
1266+
1267+
statement ok
1268+
INSERT INTO t1(c,e,a,b,d) VALUES(208,209,205,206,207);
1269+
1270+
statement ok
1271+
INSERT INTO t1(c,e,a,d,b) VALUES(214,210,213,212,211);
1272+
1273+
statement ok
1274+
INSERT INTO t1(b,c,a,d,e) VALUES(218,215,216,217,219);
1275+
1276+
statement ok
1277+
INSERT INTO t1(e,c,b,a,d) VALUES(242,244,240,243,241);
1278+
1279+
statement ok
1280+
INSERT INTO t1(e,d,c,b,a) VALUES(246,248,247,249,245);
1281+
1282+
# Regression test for https://github.com/apache/datafusion/issues/13425
1283+
query IIIIII
1284+
SELECT a+b*2,
1285+
a+b*2+c*3+d*4,
1286+
CASE WHEN a<b-3 THEN 111 WHEN a<=b THEN 222
1287+
WHEN a<b+3 THEN 333 ELSE 444 END,
1288+
b,
1289+
c-d,
1290+
a+b*2+c*3+d*4+e*5
1291+
FROM t1
1292+
WHERE (e>c OR e<d)
1293+
OR EXISTS(SELECT 1 FROM t1 AS x WHERE x.b<t1.b)
1294+
ORDER BY 3,5,2,1,4,6;
1295+
----
1296+
743 2476 111 249 -1 3706
1297+
652 2165 222 218 -2 3260
1298+
369 1226 222 124 1 1826
1299+
617 2069 222 206 1 3114
1300+
351 1172 222 118 3 1757
1301+
455 1521 333 151 -4 2281
1302+
502 1676 333 167 -3 2501
1303+
317 1067 333 105 -2 1612
1304+
544 1828 333 181 1 2728
1305+
635 2125 333 211 2 3175
1306+
483 1622 444 160 -3 2432
1307+
529 1769 444 175 -2 2654
1308+
439 1472 444 145 -1 2202
1309+
304 1014 444 100 1 1529
1310+
514 1714 444 170 1 2579
1311+
723 2419 444 240 3 3629
1312+
1313+
statement ok
1314+
drop table t1;

0 commit comments

Comments
 (0)