[ https://issues.apache.org/jira/browse/FLINK-20578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17433476#comment-17433476 ]
Saad Ur Rahman edited comment on FLINK-20578 at 10/24/21, 10:38 PM: -------------------------------------------------------------------- As I understand the problem we would need to override [SqlMultisetValueConstructor.checkOperandTypes|https://github.com/apache/calcite/blob/77bb696d020bea4467151109ffed4ced53ff0c2d/core/src/main/java/org/apache/calcite/sql/fun/SqlMultisetValueConstructor.java#L87] in [SqlArrayConstructor|https://github.com/apache/flink/blob/2cb477343de5dce70978c0add5ec58edbaec157c/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/SqlArrayConstructor.java#L33] My solution would be to perform a check in the overridden _SqlArrayConstructor.checkOperandTypes_ for empty _argTypes_, pack the _callBinding_ with a value and pass it to the _super.checkOperandTypes_ to process it as it would before. The reason I want to pack it with a value is that there was a reason why an empty _argTypes_ was supposed to originally throw an error. Then the question becomes that which [~pensz] raised: what [argument type|https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/#constructured-data-types] should be used? If all you would like to do is suppress the error then something like this would probably suffice in [SqlArrayConstructor|https://github.com/apache/flink/blob/2cb477343de5dce70978c0add5ec58edbaec157c/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/SqlArrayConstructor.java#L33]: {noformat} @Override public boolean checkOperandTypes(SqlCallBinding callBinding, boolean throwOnFailure) { try { return super.checkOperandTypes(callBinding, throwOnFailure); } catch (CalciteException e) { if (e.getMessage().equals(RESOURCE.requireAtLeastOneArg())) { return true; } throw e; } }{noformat} was (Author: surahman): As I understand the problem we would need to override [SqlMultisetValueConstructor.checkOperandTypes|https://github.com/apache/calcite/blob/77bb696d020bea4467151109ffed4ced53ff0c2d/core/src/main/java/org/apache/calcite/sql/fun/SqlMultisetValueConstructor.java#L87] in [SqlArrayConstructor|https://github.com/apache/flink/blob/2cb477343de5dce70978c0add5ec58edbaec157c/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/SqlArrayConstructor.java#L33] My solution would be to perform a check in the overridden _SqlArrayConstructor.checkOperandTypes_ for empty _argTypes_, pack the _callBinding_ with a value and pass it to the _super.checkOperandTypes_ to process it as it would before. The reason I want to pack it with a value is that there was a reason why an empty _argTypes_ was supposed to originally throw an error. Then the question becomes that which [~pensz] raised: what [argument type|https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/types/#constructured-data-types] should be used? > Cannot create empty array using ARRAY[] > --------------------------------------- > > Key: FLINK-20578 > URL: https://issues.apache.org/jira/browse/FLINK-20578 > Project: Flink > Issue Type: Sub-task > Components: Table SQL / API > Affects Versions: 1.11.2 > Reporter: Fabian Hueske > Priority: Major > Labels: starter > Fix For: 1.15.0 > > > Calling the ARRAY function without an element (`ARRAY[]`) results in an error > message. > Is that the expected behavior? > How can users create empty arrays? -- This message was sent by Atlassian Jira (v8.3.4#803005)