{"record":{"id":"5868ce34789493eb","repo":"OtterMind/Chat2DB","slug":"missing-jdbc-type-name-for-kylin-array-column-na","errorCode":null,"errorMessage":"Missing JDBC type name for Kylin ARRAY column: {name}","messagePattern":"Missing JDBC type name for Kylin ARRAY column: (.+?)","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":122,"sourceCode":"\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();\n        if (StringUtils.isBlank(jdbcTypeName)) {\n            throw new IllegalArgumentException(\"Missing JDBC type name for Kylin ARRAY column: \" + column.getName());\n        }\n\n        Matcher matcher = ARRAY_TYPE_NAME_PATTERN.matcher(jdbcTypeName);\n        if (!matcher.matches()) {\n            throw new IllegalArgumentException(\"Unsupported Kylin JDBC ARRAY type for column: \" + column.getName());\n        }\n        String elementType = matcher.group(1)\n                .replace(\" \", \"\")\n                .replace(\"\\t\", \"\")\n                .toUpperCase(Locale.ROOT);\n        return \"ARRAY<\" + elementType + '>';\n    }\n\n    private String buildCreateIndex(String tableName, TableIndex index) {\n        if (StringUtils.isBlank(index.getName()) || index.getColumnList() == null || index.getColumnList().isEmpty()) {\n            return \"\";\n        }\n","sourceCodeStart":104,"sourceCodeEnd":140,"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#L104-L140","documentation":"Thrown by KylinMetaData.renderArrayType when a column whose JDBC type is ARRAY has a blank columnType (the JDBC type name string). The ARRAY element type is derived from the type-name text, so a blank name leaves no way to render ARRAY<...>.","triggerScenarios":"Generating Kylin DDL for a column with dataType == Types.ARRAY but columnType (TYPE_NAME) blank/null. Reached when the JDBC metadata reader did not return a TYPE_NAME for an array column.","commonSituations":"A Kylin driver version that omits TYPE_NAME for ARRAY columns; a manually built array column without setting columnType; metadata inconsistency between DATA_TYPE and TYPE_NAME.","solutions":["Populate TableColumn.columnType (the JDBC TYPE_NAME) for any ARRAY column before generating DDL.","Filter ARRAY columns that lack a type name and report them rather than aborting.","Verify the Kylin JDBC driver returns TYPE_NAME for array columns; upgrade if needed."],"exampleFix":"// before\nTableColumn c = new TableColumn();\nc.setDataType(Types.ARRAY); // columnType blank\nkylinMetaData.tableDDL(...);\n\n// after\nTableColumn c = new TableColumn();\nc.setDataType(Types.ARRAY);\nc.setColumnType(\"INTEGER NOT NULL ARRAY\"); // JDBC TYPE_NAME text","handlingStrategy":"validation","validationCode":"static boolean arrayColumnHasTypeName(TableColumn c) {\n    return c != null && c.getDataType() != null && c.getDataType() == Types.ARRAY\n        && StringUtils.isNotBlank(c.getColumnType());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set TableColumn.columnType (JDBC TYPE_NAME) for all ARRAY columns.","Filter ARRAY columns lacking a type name and report them.","Verify the Kylin driver returns TYPE_NAME for array columns; upgrade if needed."],"tags":["kylin","metadata","ddl","jdbc","array","validation"],"backgroundTag":null,"analyzedSha":"5ee1e990e73fbcae1969dc554be254fedb3ab888","analyzedAt":"2026-08-14T07:05:03.077Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}