in modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java [258:330]
public static NativeType relDataTypeToNative(RelDataType relType) {
assert relType instanceof BasicSqlType
|| relType instanceof IntervalSqlType
|| relType instanceof IgniteCustomType : "Not supported:" + relType;
switch (relType.getSqlTypeName()) {
case BOOLEAN:
return NativeTypes.BOOLEAN;
case TINYINT:
return NativeTypes.INT8;
case SMALLINT:
return NativeTypes.INT16;
case INTEGER:
return NativeTypes.INT32;
case BIGINT:
return NativeTypes.INT64;
case DECIMAL:
assert relType.getPrecision() != PRECISION_NOT_SPECIFIED;
return NativeTypes.decimalOf(relType.getPrecision(), relType.getScale());
case FLOAT:
case REAL:
return NativeTypes.FLOAT;
case DOUBLE:
return NativeTypes.DOUBLE;
case DATE:
return NativeTypes.DATE;
case TIME:
case TIME_WITH_LOCAL_TIME_ZONE:
return NativeTypes.time(precisionOrDefault(relType));
case TIMESTAMP:
return NativeTypes.datetime(precisionOrDefault(relType));
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return NativeTypes.timestamp(precisionOrDefault(relType));
case INTERVAL_YEAR:
case INTERVAL_YEAR_MONTH:
case INTERVAL_MONTH:
// TODO: https://issues.apache.org/jira/browse/IGNITE-17373
throw new IllegalArgumentException("Type is not supported yet: " + relType);
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:
// TODO: https://issues.apache.org/jira/browse/IGNITE-17373
throw new IllegalArgumentException("Type is not supported yet:" + relType);
case VARCHAR:
case CHAR:
return relType.getPrecision() == PRECISION_NOT_SPECIFIED
? NativeTypes.stringOf(DEFAULT_VARLEN_LENGTH)
: NativeTypes.stringOf(relType.getPrecision());
case BINARY:
case VARBINARY:
return relType.getPrecision() == PRECISION_NOT_SPECIFIED
? NativeTypes.blobOf(DEFAULT_VARLEN_LENGTH)
: NativeTypes.blobOf(relType.getPrecision());
case UUID:
return NativeTypes.UUID;
case ANY:
if (relType instanceof IgniteCustomType) {
var customType = (IgniteCustomType) relType;
return customType.spec().nativeType();
}
// fallthrough
default:
throw new IllegalArgumentException("Type is not supported: " + relType);
}
}