Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
None
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
- is caused by
-
CALCITE-2067 RexLiteral cannot represent accurately floating point values, including NaN, Infinity
- Closed
- relates to
-
CALCITE-6631 The common type for a comparison operator returns the wrong type when comparing a Java type long with a SQL type INTEGER
- Resolved
-
CALCITE-6620 VALUES created by RelBuilder do not have a homogeneous type
- Closed
- links to