in modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/type/IgniteTypeFactory.java [175:255]
public Type getResultClass(RelDataType type) {
if (type instanceof JavaType)
return ((JavaType)type).getJavaClass();
else if (type instanceof BasicSqlType || type instanceof IntervalSqlType) {
switch (type.getSqlTypeName()) {
case VARCHAR:
case CHAR:
return String.class;
case DATE:
return java.sql.Date.class;
case TIME:
return java.sql.Time.class;
case TIMESTAMP:
return Timestamp.class;
case TIME_WITH_LOCAL_TIME_ZONE:
return LocalTime.class;
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return LocalDateTime.class;
case INTEGER:
return type.isNullable() ? Integer.class : int.class;
case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
case INTERVAL_MONTH:
return Period.class;
case BIGINT:
return type.isNullable() ? Long.class : long.class;
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 Duration.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 byte[].class;
case GEOMETRY:
throw new IllegalStateException("Unsupported data type: " + type);
case SYMBOL:
return Enum.class;
case ANY:
case OTHER:
return Object.class;
case NULL:
return Void.class;
default:
break;
}
}
else if (type instanceof IgniteCustomType)
return ((IgniteCustomType)type).storageType();
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;
}
}