Zhen Chen created CALCITE-7150:
----------------------------------
Summary: SORT pushdown JOIN did not correctly handle OFFSET.
Key: CALCITE-7150
URL: https://issues.apache.org/jira/browse/CALCITE-7150
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.40.0
Reporter: Zhen Chen
When running a RIGHT JOIN with OFFSET, enabling the SORT_JOIN_TRANSPOSE rule
returns fewer rows than expected. The reason is that after the SORT is pushed
down, the OFFSET from the upper SORT is not eliminated. This issue can be
reproduced by adding the following test in "planner.iq".
{code:java}
!use scott
!set planner-rules "
-CoreRules.SORT_JOIN_TRANSPOSE"
select d.deptno, empno from "scott"."DEPT" d
right join "scott"."EMP" e using (deptno) limit 10 offset 2;
+--------+-------+
| DEPTNO | EMPNO |
+--------+-------+
| 10 | 7934 |
| 20 | 7369 |
| 20 | 7566 |
| 20 | 7788 |
| 20 | 7876 |
| 20 | 7902 |
| 30 | 7499 |
| 30 | 7521 |
| 30 | 7654 |
| 30 | 7698 |
+--------+-------+
(10 rows)
!ok
EnumerableCalc(expr#0..2=[{inputs}], proj#0..1=[{exprs}])
EnumerableLimit(offset=[2], fetch=[10])
EnumerableHashJoin(condition=[=($0, $2)], joinType=[right])
EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
EnumerableTableScan(table=[[scott, DEPT]])
EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0], DEPTNO=[$t7])
EnumerableTableScan(table=[[scott, EMP]])
!plan
!set planner-rules original
select d.deptno, empno from "scott"."DEPT" d
right join "scott"."EMP" e using (deptno) limit 10 offset 2;
+--------+-------+
| DEPTNO | EMPNO |
+--------+-------+
| 20 | 7566 |
| 20 | 7788 |
| 20 | 7876 |
| 30 | 7521 |
| 30 | 7654 |
| 30 | 7698 |
| 30 | 7844 |
| 30 | 7900 |
+--------+-------+
(8 rows)
!ok
EnumerableCalc(expr#0..2=[{inputs}], proj#0..1=[{exprs}])
EnumerableLimit(offset=[2], fetch=[10]) <--- The OFFSET here should be
eliminated.
EnumerableHashJoin(condition=[=($0, $2)], joinType=[right])
EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0])
EnumerableTableScan(table=[[scott, DEPT]])
EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0], DEPTNO=[$t7])
EnumerableLimit(offset=[2], fetch=[10])
EnumerableTableScan(table=[[scott, EMP]])
!plan
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)