dawidwys commented on code in PR #23829:
URL: https://github.com/apache/flink/pull/23829#discussion_r1409580486


##########
flink-table/flink-table-common/src/main/java/org/apache/flink/table/expressions/ValueLiteralExpression.java:
##########
@@ -219,6 +222,83 @@ public String asSummaryString() {
         return stringifyValue(value);
     }
 
+    @Override
+    public String asSerializableString() {
+        if (value == null && 
!dataType.getLogicalType().is(LogicalTypeRoot.NULL)) {
+            return String.format(
+                    "CAST(NULL AS %s)",
+                    // casting does not support nullability
+                    
dataType.getLogicalType().copy(true).asSerializableString());
+        }
+        final LogicalType logicalType = dataType.getLogicalType();
+        switch (logicalType.getTypeRoot()) {
+            case TINYINT:
+                return String.format("CAST(%s AS TINYINT)", value);
+            case SMALLINT:
+                return String.format("CAST(%s AS SMALLINT)", value);
+            case BIGINT:
+                return String.format("CAST(%s AS BIGINT)", value);
+            case FLOAT:
+                return String.format("CAST(%s AS FLOAT)", value);
+            case DOUBLE:
+                return String.format("CAST(%s AS DOUBLE)", value);
+            case CHAR:
+            case VARCHAR:
+            case DECIMAL:
+            case INTEGER:
+                return stringifyValue(value);
+            case BOOLEAN:
+            case SYMBOL:
+            case NULL:
+                return stringifyValue(value).toUpperCase(Locale.ROOT);
+            case BINARY:
+            case VARBINARY:
+                return String.format("X'%s'", 
StringUtils.byteToHexString((byte[]) value));
+            case DATE:
+                return String.format("DATE '%s'", 
getValueAs(LocalDate.class).get());
+            case TIME_WITHOUT_TIME_ZONE:
+                return String.format("TIME '%s'", 
getValueAs(LocalTime.class).get());
+            case TIMESTAMP_WITHOUT_TIME_ZONE:
+                final LocalDateTime localDateTime = 
getValueAs(LocalDateTime.class).get();
+                return String.format(
+                        "TIMESTAMP '%s %s'",
+                        localDateTime.toLocalDate(), 
localDateTime.toLocalTime());
+            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
+                final Instant instant = getValueAs(Instant.class).get();
+                return String.format("TO_TIMESTAMP_LTZ(%d, %d)", 
instant.toEpochMilli(), 3);

Review Comment:
   I added a check to throw an exception if provided a greater precision.



-- 
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: issues-unsubscr...@flink.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to