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

TypeCoercion is not applied correctly to comparisons

    XMLWordPrintableJSON

Details

    Description

      The following statement:

      SELECT * FROM (VALUES (1, 2, 3), (5E0::REAL, 5E0, NULL)) AS foo 

      will provoke a ClassCastException between a Double and a BigDecimal, while it was working in 1.37.0.

      It's due to the fact that when trying to infer a collation on a Values tuples, the comparator still assumes that all numbers are of the same class, which changed with CALCITE-2067.

      Here is the full stack trace:

       

      Caused by: java.lang.ClassCastException: class java.lang.Double cannot be cast to class java.math.BigDecimal (java.lang.Double and java.math.BigDecimal are in module java.base of loader 'bootstrap')
          at java.base/java.math.BigDecimal.compareTo(BigDecimal.java:330)
          at org.apache.calcite.rel.RelFieldCollation.compare(RelFieldCollation.java:45)
          at org.apache.calcite.rel.metadata.RelMdCollation$1.compare(RelMdCollation.java:458)
          at org.apache.calcite.rel.metadata.RelMdCollation$1.compare(RelMdCollation.java:454)
          at com.google.common.collect.Ordering.isOrdered(Ordering.java:910)
          at org.apache.calcite.rel.metadata.RelMdCollation.values(RelMdCollation.java:434)
          at org.apache.calcite.rel.logical.LogicalValues.lambda$create$0(LogicalValues.java:111)
          at org.apache.calcite.plan.RelTraitSet.replaceIfs(RelTraitSet.java:246)
          at org.apache.calcite.rel.logical.LogicalValues.create(LogicalValues.java:110)
          at org.apache.calcite.rel.core.RelFactories$ValuesFactoryImpl.createValues(RelFactories.java:521)
          at org.apache.calcite.tools.RelBuilder.values(RelBuilder.java:3497)
          at org.apache.calcite.tools.RelBuilder.setOp(RelBuilder.java:2924)
          at org.apache.calcite.tools.RelBuilder.union(RelBuilder.java:2946)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertValuesImpl(SqlToRelConverter.java:5050)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2488)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2393)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertFrom(SqlToRelConverter.java:2355)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelectImpl(SqlToRelConverter.java:754)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertSelect(SqlToRelConverter.java:734)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertQueryRecursive(SqlToRelConverter.java:3905)
          at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:627)
       

       

      Attachments

        Issue Links

          Activity

            People

              mbudiu Mihai Budiu
              cbrisson Claude Brisson
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: