in modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java [173:250]
public Type getJavaClass(RelDataType type) {
if (type instanceof JavaType) {
return ((JavaType) type).getJavaClass();
} else if (type instanceof BasicSqlType || type instanceof IntervalSqlType || type instanceof IgniteCustomType) {
switch (type.getSqlTypeName()) {
case VARCHAR:
case CHAR:
return String.class;
case DATE:
case TIME:
case TIME_WITH_LOCAL_TIME_ZONE:
case INTEGER:
case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
case INTERVAL_MONTH:
return type.isNullable() ? Integer.class : int.class;
case TIMESTAMP:
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
case BIGINT:
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:
return type.isNullable() ? Long.class : long.class;
case SMALLINT:
return type.isNullable() ? Short.class : short.class;
case TINYINT:
return type.isNullable() ? Byte.class : byte.class;
case DECIMAL:
return BigDecimal.class;
case BOOLEAN:
return type.isNullable() ? Boolean.class : boolean.class;
case DOUBLE:
return type.isNullable() ? Double.class : double.class;
case REAL:
case FLOAT:
return type.isNullable() ? Float.class : float.class;
case BINARY:
case VARBINARY:
return ByteString.class;
case GEOMETRY:
throw new IllegalArgumentException("Type is not supported.");
case SYMBOL:
return Enum.class;
case ANY:
if (type instanceof IgniteCustomType) {
var customType = (IgniteCustomType) type;
return customType.spec().storageType();
}
// fallthrough
case OTHER:
return Object.class;
case NULL:
return Void.class;
case UUID:
return UUID.class;
default:
break;
}
}
switch (type.getSqlTypeName()) {
case ROW:
return Object[].class; // At now
case MAP:
return Map.class;
case ARRAY:
case MULTISET:
return List.class;
default:
return null;
}
}