{"record":{"id":"bf7d2ee40806a24c","repo":"apache/seatunnel","slug":"unsupported-sql-type","errorCode":null,"errorMessage":"Unsupported SQL type: ","messagePattern":"Unsupported SQL type: ","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/debezium/row/SeaTunnelRowDebeziumDeserializationConverters.java","lineNumber":213,"sourceCode":"        switch (elementType.getSqlType()) {\n            case BOOLEAN:\n                return (dbzObj, schema) ->\n                        convertListToArray((List<Boolean>) dbzObj, Boolean.class);\n            case SMALLINT:\n                return (dbzObj, schema) -> convertListToArray((List<Short>) dbzObj, Short.class);\n            case INT:\n                return (dbzObj, schema) ->\n                        convertListToArray((List<Integer>) dbzObj, Integer.class);\n            case BIGINT:\n                return (dbzObj, schema) -> convertListToArray((List<Long>) dbzObj, Long.class);\n            case FLOAT:\n                return (dbzObj, schema) -> convertListToArray((List<Float>) dbzObj, Float.class);\n            case DOUBLE:\n                return (dbzObj, schema) -> convertListToArray((List<Double>) dbzObj, Double.class);\n            case STRING:\n                return (dbzObj, schema) -> convertListToArray((List<String>) dbzObj, String.class);\n            default:\n                throw new IllegalArgumentException(\n                        \"Unsupported SQL type: \" + elementType.getSqlType());\n        }\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private static <T> T[] convertListToArray(List<T> list, Class<T> clazz) {\n        T[] array = (T[]) java.lang.reflect.Array.newInstance(clazz, list.size());\n        for (int i = 0; i < list.size(); i++) {\n            array[i] = list.get(i);\n        }\n        return array;\n    }\n\n    private static DebeziumDeserializationConverter convertToBoolean() {\n        return new DebeziumDeserializationConverter() {\n            private static final long serialVersionUID = 1L;\n\n            @Override","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/debezium/row/SeaTunnelRowDebeziumDeserializationConverters.java#L195-L231","documentation":"createArrayConverter() maps the element SQL type of a SeaTunnel ARRAY column to a list-to-array converter. Only primitive/STRING element types are supported; any other element type throws IllegalArgumentException 'Unsupported SQL type'. This guards array deserialization for CDC values.","triggerScenarios":"Creating a converter for an ARRAY column whose element type is not BOOLEAN/TINYINT/SMALLINT/INT/BIGINT/FLOAT/DOUBLE/STRING (e.g. ARRAY<DATE>, ARRAY<ROW>).","commonSituations":"Configuring a CDC source schema with arrays of complex or temporal element types; catalog type mapping produces an element type the converter does not know.","solutions":["Change the array element type in the schema to a supported one (numeric primitive or STRING).","Serialize complex elements as STRING and decode downstream (e.g. JSON-stringified array).","Extend createArrayConverter with a branch for the desired element type if you control the build."],"exampleFix":"// before\nARRAY<DATE> tags // throws Unsupported SQL type: DATE\n// after\nARRAY<STRING> tags // ISO date strings","handlingStrategy":"validation","validationCode":"// Java\nstatic boolean isSupportedArrayElement(SeaTunnelRowType arrayType) {\n    switch (((SeaTunnelArrayType<?>) arrayType).getElementType().getSqlType()) {\n        case BOOLEAN: case TINYINT: case SMALLINT: case INT: case BIGINT:\n        case FLOAT: case DOUBLE: case STRING:\n            return true;\n        default:\n            return false;\n    }\n}","typeGuard":"SqlType elem = elementType.getSqlType();\nif (elem != SqlType.STRING && !elem.name().matches(\"BOOLEAN|TINYINT|SMALLINT|INT|BIGINT|FLOAT|DOUBLE\")) {\n    throw new IllegalArgumentException(\"ARRAY element not supported by CDC: \" + elem);\n}","tryCatchPattern":"try {\n    conv = createArrayConverter(type);\n} catch (IllegalArgumentException e) {\n    log.warn(\"array element {} unsupported, falling back to STRING\", elementType);\n    conv = createConverter(STRING_TYPE, timeZone, factory);\n}","preventionTips":["Restrict ARRAY columns to primitive/STRING element types","Represent complex array elements as JSON STRING and decode downstream","Add unit tests for every element type you plan to use"],"tags":["cdc","array","unsupported-type","schema"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}