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);
}