public static Object toFlinkInternalValue()

in flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/utils/RexLiteralUtil.java [80:195]


    public static Object toFlinkInternalValue(Comparable<?> value, LogicalType valueType) {
        if (value == null) {
            return null;
        }
        switch (valueType.getTypeRoot()) {
            case CHAR:
            case VARCHAR:
                if (value instanceof NlsString) {
                    return BinaryStringData.fromString(((NlsString) value).getValue());
                }
                if (value instanceof String) {
                    return BinaryStringData.fromString((String) value);
                }
                break;
            case BOOLEAN:
                if (value instanceof Boolean) {
                    return value;
                }
                break;
            case BINARY:
            case VARBINARY:
                if (value instanceof ByteString) {
                    return ((ByteString) value).getBytes();
                }
                break;
            case DECIMAL:
                if (value instanceof BigDecimal) {
                    return DecimalData.fromBigDecimal(
                            (BigDecimal) value,
                            LogicalTypeChecks.getPrecision(valueType),
                            LogicalTypeChecks.getScale(valueType));
                }
                break;
            case TINYINT:
                if (value instanceof Number) {
                    return ((Number) value).byteValue();
                }
                break;
            case SMALLINT:
                if (value instanceof Number) {
                    return ((Number) value).shortValue();
                }
                break;
            case INTEGER:
            case INTERVAL_YEAR_MONTH:
                if (value instanceof Number) {
                    return ((Number) value).intValue();
                }
                break;
            case BIGINT:
            case INTERVAL_DAY_TIME:
                if (value instanceof Number) {
                    return ((Number) value).longValue();
                }
                break;
            case FLOAT:
                if (value instanceof Number) {
                    return ((Number) value).floatValue();
                }
                break;
            case DOUBLE:
                if (value instanceof Number) {
                    return ((Number) value).doubleValue();
                }
                break;
            case DATE:
                if (value instanceof DateString) {
                    return ((DateString) value).getDaysSinceEpoch();
                }
                if (value instanceof Number) {
                    return ((Number) value).intValue();
                }
                break;
            case TIME_WITHOUT_TIME_ZONE:
                if (value instanceof TimeString) {
                    return ((TimeString) value).getMillisOfDay();
                }
                if (value instanceof Number) {
                    return ((Number) value).intValue();
                }
                break;
            case TIMESTAMP_WITHOUT_TIME_ZONE:
                if (value instanceof TimestampString) {
                    return TimestampData.fromLocalDateTime(
                            toLocalDateTime((TimestampString) value));
                }
                break;
            case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
                if (value instanceof TimestampString) {
                    return TimestampData.fromInstant(
                            toLocalDateTime((TimestampString) value)
                                    .atOffset(ZoneOffset.UTC)
                                    .toInstant());
                }
                break;
            case DISTINCT_TYPE:
                return toFlinkInternalValue(value, ((DistinctType) valueType).getSourceType());
            case SYMBOL:
                if (value instanceof Enum) {
                    return value;
                }
                break;
            case TIMESTAMP_WITH_TIME_ZONE:
            case ARRAY:
            case MULTISET:
            case MAP:
            case ROW:
            case STRUCTURED_TYPE:
            case NULL:
            case UNRESOLVED:
            case DESCRIPTOR:
                throw new CodeGenException("Type not supported: " + valueType);
        }
        throw new IllegalStateException(
                "Unexpected class " + value.getClass() + " for value of type " + valueType);
    }