You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org> on 2018/05/31 14:23:00 UTC
[jira] [Commented] (CALCITE-2346) UNION results with different
column types can cause ClassCastException
[ https://issues.apache.org/jira/browse/CALCITE-2346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16496624#comment-16496624 ]
Marc Prud'hommeaux commented on CALCITE-2346:
---------------------------------------------
I should mention that the two columns in question are a TINYINT NOT NULL (-6) and an INTEGER NOT NULL (4), which ought be compatible for the purposes of comparison, aggregation, and unioning purposes.
{{code}}
0: jdbc:calcite:model=inline:{"version":1.0,"> !columns "scott"."DEPT"
TABLE_CAT
TABLE_SCHEM scott
TABLE_NAME DEPT
COLUMN_NAME DEPTNO
DATA_TYPE -6
TYPE_NAME TINYINT NOT NULL
COLUMN_SIZE -1
BUFFER_LENGTH null
DECIMAL_DIGITS null
NUM_PREC_RADIX 10
NULLABLE 0
REMARKS
COLUMN_DEF
SQL_DATA_TYPE null
SQL_DATETIME_SUB null
CHAR_OCTET_LENGTH -1
ORDINAL_POSITION 1
IS_NULLABLE NO
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE null
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN
TABLE_CAT
TABLE_SCHEM scott
TABLE_NAME DEPT
COLUMN_NAME DNAME
DATA_TYPE 12
TYPE_NAME VARCHAR(14) CHARACTER SET "ISO-8859-1" COLLATE "ISO-8859-1$en_US$primary"
COLUMN_SIZE 14
BUFFER_LENGTH null
DECIMAL_DIGITS null
NUM_PREC_RADIX 10
NULLABLE 1
REMARKS
COLUMN_DEF
SQL_DATA_TYPE null
SQL_DATETIME_SUB null
CHAR_OCTET_LENGTH 14
ORDINAL_POSITION 2
IS_NULLABLE YES
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE null
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN
TABLE_CAT
TABLE_SCHEM scott
TABLE_NAME DEPT
COLUMN_NAME LOC
DATA_TYPE 12
TYPE_NAME VARCHAR(13) CHARACTER SET "ISO-8859-1" COLLATE "ISO-8859-1$en_US$primary"
COLUMN_SIZE 13
BUFFER_LENGTH null
DECIMAL_DIGITS null
NUM_PREC_RADIX 10
NULLABLE 1
REMARKS
COLUMN_DEF
SQL_DATA_TYPE null
SQL_DATETIME_SUB null
CHAR_OCTET_LENGTH 13
ORDINAL_POSITION 3
IS_NULLABLE YES
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE null
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN
0: jdbc:calcite:model=inline:{"version":1.0,"> !columns "foodmart"."department"
TABLE_CAT
TABLE_SCHEM foodmart
TABLE_NAME department
COLUMN_NAME department_id
DATA_TYPE 4
TYPE_NAME INTEGER NOT NULL
COLUMN_SIZE -1
BUFFER_LENGTH null
DECIMAL_DIGITS null
NUM_PREC_RADIX 10
NULLABLE 0
REMARKS
COLUMN_DEF
SQL_DATA_TYPE null
SQL_DATETIME_SUB null
CHAR_OCTET_LENGTH -1
ORDINAL_POSITION 1
IS_NULLABLE NO
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE null
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN
TABLE_CAT
TABLE_SCHEM foodmart
TABLE_NAME department
COLUMN_NAME department_description
DATA_TYPE 12
TYPE_NAME VARCHAR(30) CHARACTER SET "ISO-8859-1" COLLATE "ISO-8859-1$en_US$primary" NOT NULL
COLUMN_SIZE 30
BUFFER_LENGTH null
DECIMAL_DIGITS null
NUM_PREC_RADIX 10
NULLABLE 0
REMARKS
COLUMN_DEF
SQL_DATA_TYPE null
SQL_DATETIME_SUB null
CHAR_OCTET_LENGTH 30
ORDINAL_POSITION 2
IS_NULLABLE NO
SCOPE_CATALOG
SCOPE_SCHEMA
SCOPE_TABLE
SOURCE_DATA_TYPE null
IS_AUTOINCREMENT
IS_GENERATEDCOLUMN
{{code}}
> UNION results with different column types can cause ClassCastException
> ----------------------------------------------------------------------
>
> Key: CALCITE-2346
> URL: https://issues.apache.org/jira/browse/CALCITE-2346
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.16.0
> Environment: macOS 10.13.4 (17E202)
> openjdk version "10" 2018-03-20
> OpenJDK Runtime Environment 18.3 (build 10+46)
> OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)
> Reporter: Marc Prud'hommeaux
> Assignee: Julian Hyde
> Priority: Minor
>
> Trying to union results from two separate data types is throwing:
> {code:java}
> java.lang.ClassCastException: java.base/java.lang.Byte cannot be cast to java.base/java.lang.Integer
> at org.apache.calcite.avatica.util.AbstractCursor$IntAccessor.getInt(AbstractCursor.java:545)
> at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite.java:339)
> at org.apache.calcite.avatica.AvaticaResultSet.getObject(AvaticaResultSet.java:377)
> at sqlline.Rows$Row.<init>(Rows.java:157)
> at sqlline.IncrementalRows.hasNext(IncrementalRows.java:66)
> at sqlline.TableOutputFormat.print(TableOutputFormat.java:33)
> at sqlline.SqlLine.print(SqlLine.java:1648)
> {code}
> It can reproduced with the command:
> {code:java}
> coursier launch \
> sqlline:sqlline:1.4.0 \
> org.apache.calcite:calcite-core:1.16.0 \
> org.hsqldb:hsqldb:2.4.0 \
> net.hydromatic:scott-data-hsqldb:0.1 \
> net.hydromatic:foodmart-data-hsqldb:0.4 \
> -M sqlline.SqlLine -- \
> -d org.apache.calcite.jdbc.Driver \
> -u 'jdbc:calcite:model=inline:{"version":1.0,"schemas":[{"name":"scott","type":"jdbc","jdbcUrl":"jdbc:hsqldb:res:scott","jdbcUser":"SCOTT","jdbcPassword":"TIGER"},{"name":"foodmart","type":"jdbc","jdbcSchema":"foodmart","jdbcUrl":"jdbc:hsqldb:res:foodmart"}]}'
> {code}
> The following command works fine:
> {code:java}
> 0: jdbc:calcite:model=inline:{"version":1.0,"> select "DNAME" from "scott"."DEPT" union all select "department_description" from "foodmart"."department";
> +--------------------------------+
> | DNAME |
> +--------------------------------+
> | ACCOUNTING |
> | RESEARCH |
> | SALES |
> | OPERATIONS |
> | HQ General Management |
> | HQ Information Systems |
> | HQ Marketing |
> | HQ Human Resources |
> | HQ Finance and Accounting |
> | Store Management |
> | Store Information Systems |
> | Store Permanent Checkers |
> | Store Temporary Checkers |
> | Store Permanent Stockers |
> | Store Temporary Stockers |
> | Store Permanent Butchers |
> +--------------------------------+
> 16 rows selected (0.069 seconds)
> {code}
> But when unioning two different column types:
> {code:java}
> 0: jdbc:calcite:model=inline:{"version":1.0,"> select "DEPTNO", "DNAME" from "scott"."DEPT" union all select "department_id", "department_description" from "foodmart"."department";
> +------------+--------------------------------+
> | DEPTNO | DNAME |
> +------------+--------------------------------+
> java.lang.ClassCastException: java.base/java.lang.Byte cannot be cast to java.base/java.lang.Integer
> at org.apache.calcite.avatica.util.AbstractCursor$IntAccessor.getInt(AbstractCursor.java:545)
> at org.apache.calcite.avatica.AvaticaSite.get(AvaticaSite.java:339)
> at org.apache.calcite.avatica.AvaticaResultSet.getObject(AvaticaResultSet.java:377)
> at sqlline.Rows$Row.<init>(Rows.java:157)
> at sqlline.IncrementalRows.hasNext(IncrementalRows.java:66)
> at sqlline.TableOutputFormat.print(TableOutputFormat.java:33)
> at sqlline.SqlLine.print(SqlLine.java:1648)
> at sqlline.Commands.execute(Commands.java:834)
> at sqlline.Commands.sql(Commands.java:733)
> at sqlline.SqlLine.dispatch(SqlLine.java:795)
> {code}
> Possibly related: https://issues.apache.org/jira/browse/CALCITE-580
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)