OtterMind/Chat2DB · error · IllegalArgumentException
Unsupported Kylin JDBC column type: {jdbcType}
Error message
Unsupported Kylin JDBC column type: {jdbcType} What it means
Thrown by KylinMetaData.renderColumnType in the default branch of the JDBC type switch when column.dataType is a java.sql.Types code this builder does not map (e.g. BLOB, CLOB, DISTINCT, STRUCT, REF, ROWID, SQLXML). Only a fixed set of Kylin-supported types has a case.
Source
Thrown at chat2db-community-server/chat2db-community-plugins/chat2db-community-kylin/src/main/java/ai/chat2db/plugin/kylin/KylinMetaData.java:102
String typeName = switch (jdbcType) {
case Types.BIT, Types.BOOLEAN -> "BOOLEAN";
case Types.TINYINT -> "TINYINT";
case Types.SMALLINT -> "SMALLINT";
case Types.INTEGER -> "INTEGER";
case Types.BIGINT -> "BIGINT";
case Types.FLOAT -> "FLOAT";
case Types.REAL -> "REAL";
case Types.DOUBLE -> "DOUBLE";
case Types.NUMERIC, Types.DECIMAL -> "DECIMAL";
case Types.CHAR, Types.NCHAR -> "CHAR";
case Types.VARCHAR, Types.LONGVARCHAR, Types.NVARCHAR, Types.LONGNVARCHAR -> "VARCHAR";
case Types.DATE -> "DATE";
case Types.TIME -> "TIME";
case Types.TIMESTAMP -> "TIMESTAMP";
case Types.JAVA_OBJECT -> "ANY";
case Types.ARRAY -> renderArrayType(column);
default -> throw new IllegalArgumentException("Unsupported Kylin JDBC column type: " + jdbcType);
};
Integer columnSize = column.getColumnSize();
if (StringUtils.equalsAny(typeName, "VARCHAR", "CHAR") && columnSize != null && columnSize > 0) {
return typeName + '(' + columnSize.toString() + ')';
}
if ("DECIMAL".equals(typeName) && columnSize != null && columnSize > 0) {
Integer decimalDigits = column.getDecimalDigits();
if (decimalDigits != null && decimalDigits >= 0) {
return typeName + '(' + columnSize.toString() + ',' + decimalDigits + ')';
}
return typeName + '(' + columnSize.toString() + ')';
}
return typeName;
}
private String renderArrayType(TableColumn column) {
String jdbcTypeName = column.getColumnType();View on GitHub (pinned to 5ee1e990e7)
Solutions
- Use only Kylin-supported JDBC types in the modeled columns.
- Map unsupported types to a Kylin-compatible type (e.g. ANY for JAVA_OBJECT) at the metadata-read layer, or drop the column with a warning.
- Extend the switch with a new case if a real Kylin type exists for that JDBC code.
Example fix
// before column.setDataType(Types.BLOB); // no case -> default throws kylinMetaData.tableDDL(...); // after column.setDataType(Types.VARBINARY); // map to a supported Kylin type // or drop the column from the DDL build
Defensive patterns
Strategy: validation
Validate before calling
static final Set<Integer> KYLIN_SUPPORTED = Set.of(
Types.BIT, Types.BOOLEAN, Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT,
Types.FLOAT, Types.REAL, Types.DOUBLE, Types.NUMERIC, Types.DECIMAL,
Types.CHAR, Types.NCHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NVARCHAR, Types.LONGNVARCHAR,
Types.DATE, Types.TIME, Types.TIMESTAMP, Types.JAVA_OBJECT, Types.ARRAY);
static boolean isKylinSupportedType(Integer t) {
return t != null && KYLIN_SUPPORTED.contains(t);
} Prevention
- Model Kylin columns only with supported JDBC types.
- Map unsupported types (BLOB/CLOB/STRUCT) to a Kylin-compatible type or drop them.
- Add a switch case only when a real Kylin type exists for that JDBC code.
When it happens
Trigger: Generating Kylin DDL for a column whose JDBC DATA_TYPE is outside the supported set (BIT/BOOLEAN, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, REAL, DOUBLE, NUMERIC/DECIMAL, CHAR/NCHAR, VARCHAR family, DATE, TIME, TIMESTAMP, JAVA_OBJECT, ARRAY).
Common situations: A Kylin column reported by the driver as BLOB/CLOB/STRUCT; a schema using a type Kylin does not support; a driver returning an unusual Types constant.
Related errors
- Missing JDBC type for Kylin column: {name}
- Missing JDBC type name for Kylin ARRAY column: {name}
- Unsupported Kylin JDBC ARRAY type for column: {name}
- Unsafe column type name from metadata: {typeName}
- Unsafe H2 column default from metadata: {columnDefault}
AI-assisted analysis of OtterMind/Chat2DB@5ee1e990e7 (2026-08-14).
Data as JSON: /api/errors/81762b2127eb7152.
Report an issue: GitHub.