in adapter/jdbc/src/main/java/org/apache/arrow/adapter/jdbc/JdbcToArrowUtils.java [162:224]
public static ArrowType getArrowTypeFromJdbcType(
final JdbcFieldInfo fieldInfo, final Calendar calendar) {
switch (fieldInfo.getJdbcType()) {
case Types.BOOLEAN:
case Types.BIT:
return new ArrowType.Bool();
case Types.TINYINT:
return new ArrowType.Int(8, true);
case Types.SMALLINT:
return new ArrowType.Int(16, true);
case Types.INTEGER:
return new ArrowType.Int(32, true);
case Types.BIGINT:
return new ArrowType.Int(64, true);
case Types.NUMERIC:
case Types.DECIMAL:
int precision = fieldInfo.getPrecision();
int scale = fieldInfo.getScale();
if (precision > 38) {
return new ArrowType.Decimal(precision, scale, 256);
} else {
return new ArrowType.Decimal(precision, scale, 128);
}
case Types.REAL:
case Types.FLOAT:
return new ArrowType.FloatingPoint(SINGLE);
case Types.DOUBLE:
return new ArrowType.FloatingPoint(DOUBLE);
case Types.CHAR:
case Types.NCHAR:
case Types.VARCHAR:
case Types.NVARCHAR:
case Types.LONGVARCHAR:
case Types.LONGNVARCHAR:
case Types.CLOB:
return new ArrowType.Utf8();
case Types.DATE:
return new ArrowType.Date(DateUnit.DAY);
case Types.TIME:
return new ArrowType.Time(TimeUnit.MILLISECOND, 32);
case Types.TIMESTAMP:
final String timezone;
if (calendar != null) {
timezone = calendar.getTimeZone().getID();
} else {
timezone = null;
}
return new ArrowType.Timestamp(TimeUnit.MILLISECOND, timezone);
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
case Types.BLOB:
return new ArrowType.Binary();
case Types.ARRAY:
return new ArrowType.List();
case Types.NULL:
return new ArrowType.Null();
case Types.STRUCT:
return new ArrowType.Struct();
default:
throw new UnsupportedOperationException("Unmapped JDBC type: " + fieldInfo.getJdbcType());
}
}