[FLINK-20539][table-planner] Fix type mismatch when using ROW in comp…
What is the purpose of the change
This pr is cherry-picked from master. See more here: https://github.com/apache/flink/pull/23519
When using row as a computed column and select the computed column as a query, an exception will be thrown by calcite because of the type mismatch about ROW.
The cause is that in Flink, we always treat the ROW as a struct type PEEK_FIELDS_NO_EXPAND (refs to LogicalRelDataTypeConverter and FlinkTypeFactory), but in calcite, the struct type about ROW is FULLY_QUALIFIED (refs to SqlRowOperator#inferReturnType). And when selecting the column, the difference causes this bug.
Brief change log
- Modify the SqlRowOperator to return the true struct type about ROW
- Add tests about this pr
Verifying this change
Necessary tests have been added.
Does this pull request potentially affect one of the following parts:
- Dependencies (does it add or upgrade a dependency): no
- The public API, i.e., is any changed class annotated with
@Public(Evolving): no - The serializers: no
- The runtime per-record code paths (performance sensitive): no
- Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: no
- The S3 file system connector: no
Documentation
- Does this pull request introduce a new feature? no
- If yes, how is the feature documented? no
CI report:
- c225020b7f0cc3be21bc65b14f83e70c947fbd98 Azure: SUCCESS
Bot commands
The @flinkbot bot supports the following commands:@flinkbot run azurere-run the last Azure build
@flinkbot run azure
@xuyangzhong could you please rebase it to be sure it still passes the ci? Once it passes we could merge it
@snuyanzin Done! Thanks for driving this.
Thanks for the PR and for the quick rebase @xuyangzhong