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]

Reply via email to