in core/src/main/java/org/apache/calcite/rex/RexLiteral.java [642:768]
private static void appendAsJava(@Nullable Comparable value, StringBuilder sb,
SqlTypeName typeName, RelDataType type, boolean java,
RexDigestIncludeType includeType) {
switch (typeName) {
case CHAR:
NlsString nlsString = (NlsString) castNonNull(value);
if (java) {
Util.printJavaString(
sb,
nlsString.getValue(),
true);
} else {
boolean includeCharset =
(nlsString.getCharsetName() != null)
&& !nlsString.getCharsetName().equals(
CalciteSystemProperty.DEFAULT_CHARSET.value());
sb.append(nlsString.asSql(includeCharset, false));
}
break;
case BOOLEAN:
assert value instanceof Boolean;
sb.append(value);
break;
case DECIMAL:
assert value instanceof BigDecimal;
sb.append(value);
break;
case DOUBLE:
case FLOAT:
if (value instanceof BigDecimal) {
sb.append(Util.toScientificNotation((BigDecimal) value));
} else {
assert value instanceof Double;
Double d = (Double) value;
String repr = Util.toScientificNotation(d);
sb.append(repr);
}
break;
case BIGINT:
assert value instanceof BigDecimal;
long narrowLong = ((BigDecimal) value).longValue();
sb.append(narrowLong);
sb.append('L');
break;
case BINARY:
assert value instanceof ByteString;
sb.append("X'");
sb.append(((ByteString) value).toString(16));
sb.append("'");
break;
case NULL:
assert value == null;
sb.append("null");
break;
case SARG:
assert value instanceof Sarg;
//noinspection unchecked,rawtypes
Util.asStringBuilder(sb, sb2 ->
printSarg(sb2, (Sarg) value, type));
break;
case UUID:
assert value instanceof UUID;
sb.append(value);
break;
case SYMBOL:
assert value instanceof Enum;
sb.append("FLAG(");
sb.append(value);
sb.append(")");
break;
case DATE:
assert value instanceof DateString;
sb.append(value);
break;
case TIME:
case TIME_WITH_LOCAL_TIME_ZONE:
assert value instanceof TimeString;
sb.append(value);
break;
case TIME_TZ:
assert value instanceof TimeWithTimeZoneString;
sb.append(value);
break;
case TIMESTAMP:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
assert value instanceof TimestampString;
sb.append(value);
break;
case TIMESTAMP_TZ:
assert value instanceof TimestampWithTimeZoneString;
sb.append(value);
break;
case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
case INTERVAL_MONTH:
case INTERVAL_DAY:
case INTERVAL_DAY_HOUR:
case INTERVAL_DAY_MINUTE:
case INTERVAL_DAY_SECOND:
case INTERVAL_HOUR:
case INTERVAL_HOUR_MINUTE:
case INTERVAL_HOUR_SECOND:
case INTERVAL_MINUTE:
case INTERVAL_MINUTE_SECOND:
case INTERVAL_SECOND:
assert value instanceof BigDecimal;
sb.append(value);
break;
case MULTISET:
case ROW:
case ARRAY:
assert value instanceof List : "value must implement List: " + value;
@SuppressWarnings("unchecked") final List<RexLiteral> list =
(List<RexLiteral>) castNonNull(value);
Util.asStringBuilder(sb, sb2 ->
Util.printList(sb, list.size(), (sb3, i) ->
sb3.append(list.get(i).computeDigest(includeType))));
break;
case GEOMETRY:
final String wkt = SpatialTypeFunctions.ST_AsWKT((Geometry) castNonNull(value));
sb.append(wkt);
break;
default:
assert valueMatchesType(value, typeName, true);
throw Util.needToImplement(typeName);
}
}