twalthr commented on code in PR #28777:
URL: https://github.com/apache/flink/pull/28777#discussion_r3614141832
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/MapToMapAndMultisetToMultisetCastRule.java:
##########
@@ -166,38 +173,57 @@ protected String generateCodeBlockInternal(
.declStmt(innerTargetKeyTypeTerm, key,
null)
.declStmt(innerTargetValueTypeTerm, value,
null);
if (innerTargetKeyType.isNullable()) {
- codeWriter.ifStmt(
- "!" + methodCall(keyArrayTerm,
"isNullAt", index),
- thenWriter ->
- thenWriter
- .append(keyCodeBlock)
- .assignStmt(
- key,
keyCodeBlock.getReturnTerm()));
+ iterateOverElements(
+ index, codeWriter, keyArray,
keyCodeBlock, key, false);
} else {
- codeWriter
- .append(keyCodeBlock)
- .assignStmt(key,
keyCodeBlock.getReturnTerm());
+ iterateOverElements(
+ index, codeWriter, keyArray,
keyCodeBlock, key, true);
}
if (inputLogicalType.is(LogicalTypeRoot.MAP)
&& innerTargetValueType.isNullable()) {
- codeWriter.ifStmt(
- "!" + methodCall(valueArrayTerm,
"isNullAt", index),
- thenWriter ->
- thenWriter
- .append(valueCodeBlock)
- .assignStmt(
- value,
-
valueCodeBlock.getReturnTerm()));
+ iterateOverElements(
+ index,
+ codeWriter,
+ valueArray,
+ valueCodeBlock,
+ value,
+ false);
} else {
- codeWriter
- .append(valueCodeBlock)
- .assignStmt(value,
valueCodeBlock.getReturnTerm());
+ iterateOverElements(
+ index, codeWriter, valueArray,
valueCodeBlock, value, true);
}
codeWriter.stmt(methodCall(map, "put", key,
value));
},
codeGeneratorContext)
.assignStmt(returnVariable,
constructorCall(GenericMapData.class, map))
.toString();
}
+
+ private static void iterateOverElements(
+ String index,
+ CastRuleUtils.CodeWriter codeWriter,
+ String keyArray,
+ CastCodeBlock keyCodeBlock,
+ String key,
+ boolean throwIfNull) {
+ if (throwIfNull) {
+ codeWriter.ifStmt(
+ "!" + methodCall(keyArray, "isNullAt", index),
+ thenWriter ->
+ thenWriter
+ .append(keyCodeBlock)
+ .assignStmt(key,
keyCodeBlock.getReturnTerm()),
+ elseWriter ->
+ elseWriter.throwStmt(
+ "new
org.apache.flink.table.api.TableRuntimeException(\"Value is not nullable but a
NULL was found\")"));
Review Comment:
```suggestion
"new
org.apache.flink.table.api.TableRuntimeException(\"Target is not nullable but a
NULL was found.\")"));
```
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/ArrayToArrayCastRule.java:
##########
@@ -97,10 +97,18 @@ protected String generateCodeBlockInternal(
index,
codeBlock.getReturnTerm()));
} else {
- loopWriter
- .append(codeBlock)
- .assignArrayStmt(
- objArrayTerm, index,
codeBlock.getReturnTerm());
+ loopWriter.ifStmt(
+ "!" + methodCall(inputTerm,
"isNullAt", index),
+ thenWriter ->
+ thenWriter
+ .append(codeBlock)
+ .assignArrayStmt(
+ objArrayTerm,
+ index,
+
codeBlock.getReturnTerm()),
+ elseWriter ->
+ elseWriter.throwStmt(
+ "new
org.apache.flink.table.api.TableRuntimeException(\"Value is not nullable but a
NULL was found\")"));
Review Comment:
```suggestion
"new
org.apache.flink.table.api.TableRuntimeException(\"Target is not nullable but a
NULL was found.\")"));
```
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/MapToMapAndMultisetToMultisetCastRule.java:
##########
@@ -166,38 +173,57 @@ protected String generateCodeBlockInternal(
.declStmt(innerTargetKeyTypeTerm, key,
null)
.declStmt(innerTargetValueTypeTerm, value,
null);
if (innerTargetKeyType.isNullable()) {
- codeWriter.ifStmt(
- "!" + methodCall(keyArrayTerm,
"isNullAt", index),
- thenWriter ->
- thenWriter
- .append(keyCodeBlock)
- .assignStmt(
- key,
keyCodeBlock.getReturnTerm()));
+ iterateOverElements(
+ index, codeWriter, keyArray,
keyCodeBlock, key, false);
Review Comment:
```suggestion
index, codeWriter, keyArray,
keyCodeBlock, key, innerTargetKeyType.isNullable());
```
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/MapToMapAndMultisetToMultisetCastRule.java:
##########
@@ -166,38 +173,57 @@ protected String generateCodeBlockInternal(
.declStmt(innerTargetKeyTypeTerm, key,
null)
.declStmt(innerTargetValueTypeTerm, value,
null);
if (innerTargetKeyType.isNullable()) {
- codeWriter.ifStmt(
- "!" + methodCall(keyArrayTerm,
"isNullAt", index),
- thenWriter ->
- thenWriter
- .append(keyCodeBlock)
- .assignStmt(
- key,
keyCodeBlock.getReturnTerm()));
+ iterateOverElements(
+ index, codeWriter, keyArray,
keyCodeBlock, key, false);
} else {
- codeWriter
- .append(keyCodeBlock)
- .assignStmt(key,
keyCodeBlock.getReturnTerm());
+ iterateOverElements(
+ index, codeWriter, keyArray,
keyCodeBlock, key, true);
}
if (inputLogicalType.is(LogicalTypeRoot.MAP)
&& innerTargetValueType.isNullable()) {
- codeWriter.ifStmt(
- "!" + methodCall(valueArrayTerm,
"isNullAt", index),
- thenWriter ->
- thenWriter
- .append(valueCodeBlock)
- .assignStmt(
- value,
-
valueCodeBlock.getReturnTerm()));
+ iterateOverElements(
+ index,
+ codeWriter,
+ valueArray,
+ valueCodeBlock,
+ value,
+ false);
Review Comment:
nit: move `inputLogicalType.is(LogicalTypeRoot.MAP)
&& innerTargetValueType.isNullable()`
here
--
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]