slinkydeveloper commented on a change in pull request #17900:
URL: https://github.com/apache/flink/pull/17900#discussion_r765909731
##########
File path:
flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CastFunctionITCase.java
##########
@@ -153,11 +153,11 @@ protected Configuration configuration() {
.fromCase(STRING(), "Apache Flink", "Apache Flink")
.fromCase(STRING(), null, null)
.fromCase(BOOLEAN(), true, "true")
- .fromCase(BINARY(2), DEFAULT_BINARY, "\u0000\u0001")
- .fromCase(BINARY(3), DEFAULT_BINARY,
"\u0000\u0001\u0000")
- .fromCase(VARBINARY(3), DEFAULT_VARBINARY,
"\u0000\u0001\u0002")
- .fromCase(VARBINARY(5), DEFAULT_VARBINARY,
"\u0000\u0001\u0002")
- .fromCase(BYTES(), DEFAULT_BYTES,
"\u0000\u0001\u0002\u0003\u0004")
+ .fromCase(BINARY(2), DEFAULT_BINARY, "[0, 1]")
Review comment:
Is this the representation we're looking for @twalthr @matriv ?
##########
File path:
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/BinaryToStringCastRule.java
##########
@@ -20,16 +20,18 @@
import org.apache.flink.table.types.logical.LogicalType;
import org.apache.flink.table.types.logical.LogicalTypeFamily;
+import org.apache.flink.table.types.logical.TinyIntType;
-import java.nio.charset.StandardCharsets;
-
-import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.accessStaticField;
+import static
org.apache.flink.table.planner.codegen.CodeGenUtils.arrFieldAccess;
+import static org.apache.flink.table.planner.codegen.CodeGenUtils.className;
+import static org.apache.flink.table.planner.codegen.CodeGenUtils.newName;
+import static
org.apache.flink.table.planner.codegen.calls.BuiltInMethods.BINARY_STRING_DATA_FROM_STRING;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.accessField;
import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.constructorCall;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.methodCall;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.strLiteral;
-/**
- * {@link LogicalTypeFamily#BINARY_STRING} to {@link
LogicalTypeFamily#CHARACTER_STRING} cast rule.
- */
-class BinaryToStringCastRule extends AbstractCharacterFamilyTargetRule<byte[]>
{
+class BinaryToStringCastRule extends
AbstractNullAwareCodeGeneratorCastRule<byte[], String> {
Review comment:
The generic return value is `StringData`
##########
File path:
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/BinaryToStringCastRule.java
##########
@@ -20,16 +20,18 @@
import org.apache.flink.table.types.logical.LogicalType;
import org.apache.flink.table.types.logical.LogicalTypeFamily;
+import org.apache.flink.table.types.logical.TinyIntType;
-import java.nio.charset.StandardCharsets;
-
-import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.accessStaticField;
+import static
org.apache.flink.table.planner.codegen.CodeGenUtils.arrFieldAccess;
+import static org.apache.flink.table.planner.codegen.CodeGenUtils.className;
+import static org.apache.flink.table.planner.codegen.CodeGenUtils.newName;
+import static
org.apache.flink.table.planner.codegen.calls.BuiltInMethods.BINARY_STRING_DATA_FROM_STRING;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.accessField;
import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.constructorCall;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.methodCall;
+import static
org.apache.flink.table.planner.functions.casting.CastRuleUtils.strLiteral;
-/**
- * {@link LogicalTypeFamily#BINARY_STRING} to {@link
LogicalTypeFamily#CHARACTER_STRING} cast rule.
Review comment:
Can you revert this javadoc?
##########
File path:
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/BinaryToStringCastRule.java
##########
@@ -41,13 +43,72 @@ private BinaryToStringCastRule() {
.build());
}
+ /* Example generated code
+
+ isNull$0 = _myInputIsNull;
+ if (!isNull$0) {
+ builder$1.setLength(0);
+ builder$1.append("[");
+ for (int i$2 = 0; i$2 < _myInput.length; i$2++) {
+ if (i$2 != 0) {
+ builder$1.append(", ");
+ }
+ byte element$3 = -1;
+ element$3 = _myInput[i$2];
+ builder$1.append(element$3);
Review comment:
Perhaps simplify this code without declaring the element variable but
just generate `builder$1.append(_myInput[i$2])`
##########
File path:
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CastRuleUtils.java
##########
@@ -75,6 +75,10 @@ static String accessStaticField(Class<?> clazz, String
fieldName) {
return className(clazz) + "." + fieldName;
}
+ static String accessField(String name, String fieldName) {
Review comment:
rename parameter `name` in `term`
##########
File path:
flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGenUtils.scala
##########
@@ -737,6 +737,12 @@ object CodeGenUtils {
throw new IllegalArgumentException("Illegal type: " + t);
}
+ // ------------------------------- Array Access
----------------------------------------
+ def arrFieldAccess(index: Int, arrTerm: String): String =
+ arrFieldAccess(index.toString, arrTerm)
+
+ def arrFieldAccess(index: String, arrTerm: String): String =
s"$arrTerm[$index]"
+
Review comment:
Can we have these in `CastRuleUtils`? Also, swap the parameters
--
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]