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)

Reply via email to