{"record":{"id":"81762b2127eb7152","repo":"OtterMind/Chat2DB","slug":"unsupported-kylin-jdbc-column-type-jdbctype","errorCode":null,"errorMessage":"Unsupported Kylin JDBC column type: {jdbcType}","messagePattern":"Unsupported Kylin JDBC column type: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"chat2db-community-server/chat2db-community-plugins/chat2db-community-kylin/src/main/java/ai/chat2db/plugin/kylin/KylinMetaData.java","lineNumber":102,"sourceCode":"\n        String typeName = switch (jdbcType) {\n            case Types.BIT, Types.BOOLEAN -> \"BOOLEAN\";\n            case Types.TINYINT -> \"TINYINT\";\n            case Types.SMALLINT -> \"SMALLINT\";\n            case Types.INTEGER -> \"INTEGER\";\n            case Types.BIGINT -> \"BIGINT\";\n            case Types.FLOAT -> \"FLOAT\";\n            case Types.REAL -> \"REAL\";\n            case Types.DOUBLE -> \"DOUBLE\";\n            case Types.NUMERIC, Types.DECIMAL -> \"DECIMAL\";\n            case Types.CHAR, Types.NCHAR -> \"CHAR\";\n            case Types.VARCHAR, Types.LONGVARCHAR, Types.NVARCHAR, Types.LONGNVARCHAR -> \"VARCHAR\";\n            case Types.DATE -> \"DATE\";\n            case Types.TIME -> \"TIME\";\n            case Types.TIMESTAMP -> \"TIMESTAMP\";\n            case Types.JAVA_OBJECT -> \"ANY\";\n            case Types.ARRAY -> renderArrayType(column);\n            default -> throw new IllegalArgumentException(\"Unsupported Kylin JDBC column type: \" + jdbcType);\n        };\n\n        Integer columnSize = column.getColumnSize();\n        if (StringUtils.equalsAny(typeName, \"VARCHAR\", \"CHAR\") && columnSize != null && columnSize > 0) {\n            return typeName + '(' + columnSize.toString() + ')';\n        }\n        if (\"DECIMAL\".equals(typeName) && columnSize != null && columnSize > 0) {\n            Integer decimalDigits = column.getDecimalDigits();\n            if (decimalDigits != null && decimalDigits >= 0) {\n                return typeName + '(' + columnSize.toString() + ',' + decimalDigits + ')';\n            }\n            return typeName + '(' + columnSize.toString() + ')';\n        }\n        return typeName;\n    }\n\n    private String renderArrayType(TableColumn column) {\n        String jdbcTypeName = column.getColumnType();","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/OtterMind/Chat2DB/blob/5ee1e990e73fbcae1969dc554be254fedb3ab888/chat2db-community-server/chat2db-community-plugins/chat2db-community-kylin/src/main/java/ai/chat2db/plugin/kylin/KylinMetaData.java#L84-L120","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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."],"exampleFix":"// before\ncolumn.setDataType(Types.BLOB); // no case -> default throws\nkylinMetaData.tableDDL(...);\n\n// after\ncolumn.setDataType(Types.VARBINARY); // map to a supported Kylin type\n// or drop the column from the DDL build","handlingStrategy":"validation","validationCode":"static final Set<Integer> KYLIN_SUPPORTED = Set.of(\n    Types.BIT, Types.BOOLEAN, Types.TINYINT, Types.SMALLINT, Types.INTEGER, Types.BIGINT,\n    Types.FLOAT, Types.REAL, Types.DOUBLE, Types.NUMERIC, Types.DECIMAL,\n    Types.CHAR, Types.NCHAR, Types.VARCHAR, Types.LONGVARCHAR, Types.NVARCHAR, Types.LONGNVARCHAR,\n    Types.DATE, Types.TIME, Types.TIMESTAMP, Types.JAVA_OBJECT, Types.ARRAY);\nstatic boolean isKylinSupportedType(Integer t) {\n    return t != null && KYLIN_SUPPORTED.contains(t);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["kylin","metadata","ddl","jdbc","type","validation"],"backgroundTag":null,"analyzedSha":"5ee1e990e73fbcae1969dc554be254fedb3ab888","analyzedAt":"2026-08-14T07:05:03.077Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}