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

Reply via email to