in modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/type/IgniteTypeFactory.java [206:279]
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 relType.getPrecision() == PRECISION_NOT_SPECIFIED ? NativeTypes.time() :
NativeTypes.time(relType.getPrecision());
case TIMESTAMP:
return relType.getPrecision() == PRECISION_NOT_SPECIFIED ? NativeTypes.datetime() :
NativeTypes.datetime(relType.getPrecision());
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
return relType.getPrecision() == PRECISION_NOT_SPECIFIED ? NativeTypes.timestamp() :
NativeTypes.timestamp(relType.getPrecision());
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(Integer.MAX_VALUE)
: NativeTypes.stringOf(relType.getPrecision());
case BINARY:
case VARBINARY:
return relType.getPrecision() == PRECISION_NOT_SPECIFIED
? NativeTypes.blobOf(Integer.MAX_VALUE)
: NativeTypes.blobOf(relType.getPrecision());
case ANY:
if (relType instanceof IgniteCustomType) {
var customType = (IgniteCustomType) relType;
return customType.spec().nativeType();
}
// fallthrough
default:
throw new IllegalArgumentException("Type is not supported: " + relType);
}
}