[ https://issues.apache.org/jira/browse/CALCITE-4617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17354875#comment-17354875 ]
Ruben Q L commented on CALCITE-4617: ------------------------------------ [~nobigo], I'm just describing the current behavior of the rule. There might be some scenarios where the rule is not applied that could theoretically be eligible, but we need to be careful that changing the rule will *not* produce wrong results for certain plans. IMHO, the scope of the current ticket should be limited to fixing the described issue (wrong results in certain plans when {{offset}} is involved), and not trying to enlarge the applicability of the rule (which may cause other issues as side effects). Of course, we can always create a separate for the latter. > Wrong offset when SortJoinTransposeRule pushes a sort node with an offset > ------------------------------------------------------------------------- > > Key: CALCITE-4617 > URL: https://issues.apache.org/jira/browse/CALCITE-4617 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.26.0 > Reporter: Sylvain Crozon > Assignee: Ruben Q L > Priority: Major > Labels: pull-request-available > Fix For: 1.28.0 > > Time Spent: 1h 50m > Remaining Estimate: 0h > > 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 > {code} > 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]]) > {code} > the SortJoinTransposeRule should convert to > {code} > 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]]) > {code} > Which will result in applying the offset twice. Instead the LogicalSort on > top of the join should just have a null offset -- This message was sent by Atlassian Jira (v8.3.4#803005)