wenhuitang commented on issue #1881: [CALCITE-3216] ClassCastException when running aggregate function and window function over Union URL: https://github.com/apache/calcite/pull/1881#issuecomment-610904642 > 1. Legal type pairs that is assignable in validation but illegal in runtime. The detail information like below: Target SqlTypeName | JavaTypeName | Source SqlTypeName | JavaTypeName -- | -- | -- | -- SMALLINT | Short.class , short.class | TINYINT | Byte.class , byte.class INTEGER | Integer.class , int.class | SMALLINT | Short.class , short.class INTEGER | Integer.class , int.class | TINYINT | Byte.class , byte.class BIGINT | Long.class , long.class | INTEGER | Integer.class , int.class BIGINT | Long.class , long.class | SMALLINT | Short.class , short.class BIGINT | Long.class , long.class | TINYINT | Byte.class , byte.class FLOAT | Double.class, double.class | TINYINT | Byte.class , byte.class FLOAT | Double.class, double.class | INTEGER | Integer.class , int.class FLOAT | Double.class, double.class | SMALLINT | Short.class , short.class FLOAT | Double.class, double.class | DECIMAL | BigDecimal.class FLOAT | Double.class, double.class | BIGINT | Long.class , long.class REAL | Float.class , float.class | FLOAT | Double.class, double.class REAL | Float.class , float.class | DECIMAL | BigDecimal.class REAL | Float.class , float.class | BIGINT | Long.class , long.class REAL | Float.class , float.class | SMALLINT | Short.class , short.class REAL | Float.class , float.class | TINYINT | Byte.class , byte.class REAL | Float.class , float.class | INTEGER | Integer.class , int.class DOUBLE | Double.class , double.class | REAL | Float.class , float.class DOUBLE | Double.class , double.class | FLOAT | Double.class, double.class DOUBLE | Double.class , double.class | DECIMAL | BigDecimal.class DOUBLE | Double.class , double.class | BIGINT | Long.class , long.class DOUBLE | Double.class , double.class | SMALLINT | Short.class , short.class DOUBLE | Double.class , double.class | TINYINT | Byte.class , byte.class DOUBLE | Double.class , double.class | INTEGER | Integer.class , int.class DECIMAL | BigDecimal.class | DOUBLE | Double.class , double.class DECIMAL | BigDecimal.class | REAL | Float.class , float.class DECIMAL | BigDecimal.class | BIGINT | Long.class , long.class DECIMAL | BigDecimal.class | SMALLINT | Short.class , short.class DECIMAL | BigDecimal.class | TINYINT | Byte.class , byte.class DECIMAL | BigDecimal.class | INTEGER | Integer.class , int.class DATE | Integer.class , int.class | TIMESTAMP | Long.class , long.class TIME | Integer.class , int.class | TIMESTAMP | Long.class , long.class As for DATE and TIME, it is related to issue [CALCITE-3894](https://issues.apache.org/jira/browse/CALCITE-3894). It should be processed individually. > 2. Apart from Union, other SetOps (e.g., Intersect) have the same problem? As for Intersect, sql like that "select count(*) as C from (\n select \"id\" from (VALUES(CAST(2 AS TINYINT))) \"foo\"(\"id\")\n intersect\n select \"id\" from (VALUES(2)) \"foo\"(\"id\"))" would not throw exception, but the result of it is 0. If we take a cast for its input, the result is 1. As for Except, same as Union, it would throw ClassCastException. I will improve this PR later. > 3. According to the context and discussion in [CALCITE-3565](https://issues.apache.org/jira/browse/CALCITE-3565) and [CALCITE-3414](https://issues.apache.org/jira/browse/CALCITE-3414), can we use `EnumUtils.convert`? I have tried use `EnumUtils.convert` to take a cast for Union's child expression. CompileException was thrown during compiling generated code. It seems `EnumUtils.convert` can not handle with Enumerator.
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services