Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-3997

Problem with MERGE JOIN: java.lang.AssertionError: cannot merge join: left input is not sorted on left keys

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Blocker
    • Resolution: Fixed
    • Affects Version/s: 1.23.0
    • Fix Version/s: 1.23.0
    • Component/s: core
    • Labels:
      None

      Description

      I have a couple of problems with HerdDB.

      1) JOIN order unsorted columns in presence of a WHERE over other columns
      This is my case:

      CREATE TABLE tblspace1.table1 (k1 string primary key,n1 int,s1 string)
      CREATE TABLE tblspace1.table3 (k1 string primary key,n3 int,s3 string)
      SELECT t1.k1 as first, t2.k1 as second
      FROM tblspace1.table1 t1
      INNER JOIN tblspace1.table3 t2 ON t1.k1=t2.k1
      WHERE t1.n1 + 1 = t2.n3

      In this case for table1 and table3 no column is physically sorted (no column with a collation)

      I have this Planner error:
      java.lang.AssertionError: cannot merge join: left input is not sorted on left keys
      at org.apache.calcite.rel.metadata.RelMdCollation.mergeJoin(RelMdCollation.java:457)
      at org.apache.calcite.rel.metadata.RelMdCollation.collations(RelMdCollation.java:153)
      at GeneratedMetadataHandler_Collation.collations_$(Unknown Source)
      at GeneratedMetadataHandler_Collation.collations(Unknown Source)
      at org.apache.calcite.rel.metadata.RelMetadataQuery.collations(RelMetadataQuery.java:539)
      at org.apache.calcite.rel.metadata.RelMdCollation.project(RelMdCollation.java:273)
      at org.apache.calcite.rel.logical.LogicalProject.lambda$create$0(LogicalProject.java:122)
      at org.apache.calcite.plan.RelTraitSet.replaceIfs(RelTraitSet.java:242)
      at org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:121)
      at org.apache.calcite.rel.logical.LogicalProject.create(LogicalProject.java:111)
      at org.apache.calcite.rel.core.RelFactories$ProjectFactoryImpl.createProject(RelFactories.java:172)
      at org.apache.calcite.tools.RelBuilder.project_(RelBuilder.java:1464)
      at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1258)
      at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1230)
      at org.apache.calcite.tools.RelBuilder.project(RelBuilder.java:1219)
      at org.apache.calcite.plan.RelOptUtil.pushDownJoinConditions(RelOptUtil.java:3620)
      at org.apache.calcite.rel.rules.JoinPushExpressionsRule.onMatch(JoinPushExpressionsRule.java:59)
      at org.apache.calcite.plan.volcano.VolcanoRuleCall.onMatch(VolcanoRuleCall.java:221)
      at org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:519)
      at herddb.sql.CalcitePlanner.runPlanner(CalcitePlanner.java:535)
      at herddb.sql.CalcitePlanner.translate(CalcitePlanner.java:292)

      If I remove the "WHERE" clause then no error is reported.
      we have many other test cases about JOINs and this one is the only one that fails

      This is the failing test case on HerdDB
      https://github.com/diennea/herddb/blob/vote-calcite-123/herddb-core/src/test/java/herddb/core/SimpleJoinTest.java#L522

      We are using the default set of rules Programs.ofRules(Programs.RULE_SET)

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              eolivelli Enrico Olivelli
            • Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 2h 40m
                2h 40m