Yunfeng Zhou created FLINK-32464:
------------------------------------
Summary: AssertionError when converting between Table and SQL with
selection and type cast
Key: FLINK-32464
URL: https://issues.apache.org/jira/browse/FLINK-32464
Project: Flink
Issue Type: Bug
Components: Table SQL / API
Affects Versions: 1.16.1
Reporter: Yunfeng Zhou
In an attempt to convert table between Table API and SQL API using the
following program
```java
public static void main(String[] args) {
StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
StreamTableEnvironment tEnv = StreamTableEnvironment.create(env);
Table table = tEnv.fromValues(1, 2, 3);
tEnv.createTemporaryView("input_table", table);
table = tEnv.sqlQuery("SELECT MAP[f0, 1] AS f1 from input_table");
table = table.select($("f1").cast(DataTypes.MAP(DataTypes.INT(),
DataTypes.INT())));
tEnv.createTemporaryView("input_table_2", table);
tEnv.sqlQuery("SELECT * from input_table_2");
}
```
The following exception is thrown.
```
Exception in thread "main" java.lang.AssertionError: Conversion to relational
algebra failed to preserve datatypes:
validated type:
RecordType((INTEGER, INTEGER) MAP NOT NULL f1-MAP<INT, INT>) NOT NULL
converted type:
RecordType((INTEGER, INTEGER) MAP f1-MAP<INT, INT>) NOT NULL
rel:
LogicalProject(f1-MAP<INT, INT>=[CAST(MAP($0, 1)):(INTEGER, INTEGER) MAP])
LogicalValues(tuples=[[{ 1 }, { 2 }, { 3 }]])
at
org.apache.calcite.sql2rel.SqlToRelConverter.checkConvertedType(SqlToRelConverter.java:470)
at
org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:582)
at
org.apache.flink.table.planner.calcite.FlinkPlannerImpl.org$apache$flink$table$planner$calcite$FlinkPlannerImpl$$rel(FlinkPlannerImpl.scala:215)
at
org.apache.flink.table.planner.calcite.FlinkPlannerImpl.rel(FlinkPlannerImpl.scala:191)
at
org.apache.flink.table.planner.operations.SqlToOperationConverter.toQueryOperation(SqlToOperationConverter.java:1498)
at
org.apache.flink.table.planner.operations.SqlToOperationConverter.convertSqlQuery(SqlToOperationConverter.java:1253)
at
org.apache.flink.table.planner.operations.SqlToOperationConverter.convertValidatedSqlNode(SqlToOperationConverter.java:374)
at
org.apache.flink.table.planner.operations.SqlToOperationConverter.convert(SqlToOperationConverter.java:262)
at
org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:106)
at
org.apache.flink.table.api.internal.TableEnvironmentImpl.sqlQuery(TableEnvironmentImpl.java:703)
at org.apache.flink.streaming.connectors.redis.RedisSinkITCase.main
```
It seems that there is a bug with the Table-SQL conversion and selection
process when type cast is involved.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)