You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Rui Wang (JIRA)" <ji...@apache.org> on 2018/08/31 20:06:00 UTC

[jira] [Updated] (CALCITE-2517) INSERT INTO a table with Row column type

     [ https://issues.apache.org/jira/browse/CALCITE-2517?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rui Wang updated CALCITE-2517:
------------------------------
    Description: 
When run this query:
{code:java}
CREATE TABLE table_test (payload ROW<id integer, name varchar>);
 
INSERT INTO table_test SELECT ROW(1, '2');
{code}
 

I have the following exception:

 
{code:java}
Error: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) (state=,code=0) java.sql.SQLException: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:56) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:41) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217) at sqlline.Commands.execute(Commands.java:823) at sqlline.Commands.sql(Commands.java:733) at sqlline.SqlLine.dispatch(SqlLine.java:795) at sqlline.SqlLine.begin(SqlLine.java:668) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.runSqlLine(BeamSqlLine.java:75) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.main(BeamSqlLine.java:39) Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.CalciteContextException: From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:783) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:768) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4774) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.checkTypeAssignment(SqlValidatorImpl.java:4476) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateInsert(SqlValidatorImpl.java:4236) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlInsert.validate(SqlInsert.java:148) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:920) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:552) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:264) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) ... 7 more Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorException: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572) ... 25 more
{code}
 

 

This query does not work when inserting into table, Calcite needs to validate whether source types match with target types. During the matching, this [code|https://github.com/amaliujia/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/type/SqlTypeUtil.java#L700] is supposed to return true. However, source row and target row columns cannot pass this matching, which implies the Row matching is not correctly implemented. So the query failed in source to target matching step.

 

  was:
When run this query:
{code:java}
CREATE TABLE table_test (payload ROW<id integer, name varchar>);
 
INSERT INTO table_test SELECT ROW(1, '2');
{code}
 

I have the following exception:

 
{code:java}
Error: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) (state=,code=0) java.sql.SQLException: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:56) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:41) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217) at sqlline.Commands.execute(Commands.java:823) at sqlline.Commands.sql(Commands.java:733) at sqlline.SqlLine.dispatch(SqlLine.java:795) at sqlline.SqlLine.begin(SqlLine.java:668) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.runSqlLine(BeamSqlLine.java:75) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.main(BeamSqlLine.java:39) Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.CalciteContextException: From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:783) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:768) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4774) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.checkTypeAssignment(SqlValidatorImpl.java:4476) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateInsert(SqlValidatorImpl.java:4236) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlInsert.validate(SqlInsert.java:148) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:920) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:552) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:264) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) ... 7 more Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorException: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572) ... 25 more
{code}
 

 

This query does not work when inserting into table, Calcite needs to validate whether source types match with target types. During the matching, this [code|https://github.com/amaliujia/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/type/SqlTypeUtil.java#L700] is supposed to return true. However, source row and target row columns cannot pass this matching, which implies the Row matching is not correctly implemented. So the query failed in this source to target matching step.

 


> INSERT INTO a table with Row column type
> ----------------------------------------
>
>                 Key: CALCITE-2517
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2517
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Rui Wang
>            Assignee: Julian Hyde
>            Priority: Major
>
> When run this query:
> {code:java}
> CREATE TABLE table_test (payload ROW<id integer, name varchar>);
>  
> INSERT INTO table_test SELECT ROW(1, '2');
> {code}
>  
> I have the following exception:
>  
> {code:java}
> Error: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) (state=,code=0) java.sql.SQLException: Error while executing SQL "INSERT INTO table_test SELECT ROW(1, '2')": From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:56) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.Helper.createException(Helper.java:41) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:163) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.execute(AvaticaStatement.java:217) at sqlline.Commands.execute(Commands.java:823) at sqlline.Commands.sql(Commands.java:733) at sqlline.SqlLine.dispatch(SqlLine.java:795) at sqlline.SqlLine.begin(SqlLine.java:668) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.runSqlLine(BeamSqlLine.java:75) at org.apache.beam.sdk.extensions.sql.jdbc.BeamSqlLine.main(BeamSqlLine.java:39) Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.CalciteContextException: From line 1, column 31 to line 1, column 41: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:783) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:768) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4774) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.checkTypeAssignment(SqlValidatorImpl.java:4476) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateInsert(SqlValidatorImpl.java:4236) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.SqlInsert.validate(SqlInsert.java:148) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:920) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:628) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:552) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:264) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:550) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156) ... 7 more Caused by: org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.sql.validate.SqlValidatorException: Cannot assign to target field 'payload' of type RecordType(INTEGER id, VARCHAR name) from source field 'EXPR$0' of type RecordType(INTEGER EXPR$0, CHAR(1) EXPR$1) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) at org.apache.beam.repackaged.beam_sdks_java_extensions_sql.org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572) ... 25 more
> {code}
>  
>  
> This query does not work when inserting into table, Calcite needs to validate whether source types match with target types. During the matching, this [code|https://github.com/amaliujia/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/type/SqlTypeUtil.java#L700] is supposed to return true. However, source row and target row columns cannot pass this matching, which implies the Row matching is not correctly implemented. So the query failed in source to target matching step.
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)