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 17:50:00 UTC

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

Rui Wang created CALCITE-2517:
---------------------------------

             Summary: 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


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.

 



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