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

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Fixed
    • 1.23.0
    • 1.23.0
    • core
    • 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

            Unassigned Unassigned
            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