Details
-
Bug
-
Status: In Progress
-
Major
-
Resolution: Unresolved
-
1.26.0
-
None
Description
The SortJoinTransposeRule will push a sort node past a join, and then duplicate the sort node on top of the join. When the sort node has an offset, we should only apply it once, otherwise we end up skipping twice as many rows as we should. The sort node added on top of the join should have a null offset.
For example the testSortJoinTranspose6 test checks that for this initial plan
LogicalProject(DEPTNO=[$0], EMPNO=[$2]) LogicalSort(offset=[2], fetch=[10]) LogicalJoin(condition=[=($0, $9)], joinType=[right]) LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) LogicalTableScan(table=[[CATALOG, SALES, EMP]])
the SortJoinTransposeRule should convert to
LogicalProject(DEPTNO=[$0], EMPNO=[$2]) LogicalSort(offset=[2], fetch=[10]) LogicalJoin(condition=[=($0, $9)], joinType=[right]) LogicalTableScan(table=[[CATALOG, SALES, DEPT]]) LogicalSort(offset=[2], fetch=[10]) LogicalTableScan(table=[[CATALOG, SALES, EMP]])
Which will result in applying the offset twice. Instead the LogicalSort on top of the join should just have a null offset
Attachments
Issue Links
- relates to
-
CALCITE-1507 OFFSET cannot be pushed through a JOIN if the non-preserved side of outer join is not count-preserving
-
- Closed
-
- links to