chucheng92 commented on code in PR #3579:
URL: https://github.com/apache/calcite/pull/3579#discussion_r1424808579
##########
testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java:
##########
@@ -10537,6 +10537,29 @@ private static void
checkArrayConcatAggFuncFails(SqlOperatorFixture t) {
"[null, foo]", "CHAR(3) ARRAY NOT NULL");
f2.checkScalar("array(null)",
"[null]", "NULL ARRAY NOT NULL");
+ // check complex type
+ f2.checkScalar("array(row(1))", "[{1}]",
+ "RecordType(INTEGER NOT NULL EXPR$0) NOT NULL ARRAY NOT NULL");
+ f2.checkScalar("array(row(1, null))", "[{1, null}]",
+ "RecordType(INTEGER NOT NULL EXPR$0, NULL EXPR$1) NOT NULL ARRAY NOT
NULL");
+ f2.checkScalar("array(row(null, 1))", "[{null, 1}]",
+ "RecordType(NULL EXPR$0, INTEGER NOT NULL EXPR$1) NOT NULL ARRAY NOT
NULL");
+ f2.checkScalar("array(row(1, 2))", "[{1, 2}]",
+ "RecordType(INTEGER NOT NULL EXPR$0, INTEGER NOT NULL EXPR$1) NOT NULL
ARRAY NOT NULL");
+ f2.checkFails("^array(row(1, 2), null)^",
+ "Parameters must be of the same type", false);
+ f2.checkFails("^array(null, row(1, 2))^",
Review Comment:
To be clearly:
In fact, the error here is because of the effect of `type1.isStruct() !=
type2.isStruct()`, which works with `OperandTypeChecker`. I understand what you
mean. You want `array(row(1, 2), null)` to return `RecordType(INTEGER EXPR $0,
INTEGER EXPR$1) ARRAY NOT NULL`, row(1,2) & null will deduce
leastRestrictive(or biggest) type row with nullable. In fact, it can indeed
return this form in `derivedReturnType`. We only need to call derivedReturnType
separately or comment out the line `type1.isStruct() != type2.isStruct()`.
But for the `SameOperandTypeChecker` of array, it needs to throw this error
during checkOperandTypes. I understand that our checkFail can completely check
the error of `OperandTypeChecker`. what do you think?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]