{"record":{"id":"4092594919d83cd8","repo":"apache/seatunnel","slug":"typeconverter-is-not-supported","errorCode":null,"errorMessage":"TypeConverter is not supported","messagePattern":"TypeConverter is not supported","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/JdbcDialect.java","lineNumber":96,"sourceCode":"     *\n     * @return the dialect name.\n     */\n    String dialectName();\n\n    /**\n     * Get converter that convert jdbc object to seatunnel internal object.\n     *\n     * @return a row converter for the database\n     */\n    JdbcRowConverter getRowConverter();\n\n    /**\n     * Get converter that convert type object to seatunnel internal type.\n     *\n     * @return a type converter for the database\n     */\n    default TypeConverter<BasicTypeDefine> getTypeConverter() {\n        throw new UnsupportedOperationException(\"TypeConverter is not supported\");\n    }\n\n    /**\n     * get jdbc meta-information type to seatunnel data type mapper.\n     *\n     * @return a type mapper for the database\n     */\n    JdbcDialectTypeMapper getJdbcDialectTypeMapper();\n\n    /**\n     * Whether this dialect can reliably read primary-key metadata through {@link\n     * java.sql.DatabaseMetaData#getPrimaryKeys(String, String, String)}.\n     */\n    default boolean supportsPrimaryKeyMetadata() {\n        return true;\n    }\n\n    default List<String> getPartitionKeys(Connection connection, TablePath tablePath)","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/JdbcDialect.java#L78-L114","documentation":"JdbcDialect.getTypeConverter() is a default interface method that throws UnsupportedOperationException('TypeConverter is not supported'). Dialects that do not implement the newer BasicTypeConverter-based type conversion surface inherit this default; calling it means the selected dialect cannot provide a TypeConverter<BasicTypeDefine> for mapping JDBC metadata types to SeaTunnel types.","triggerScenarios":"Catalog/typeDefine code calls getTypeConverter() on a dialect that has not overridden it — e.g. using a minimal/custom dialect implementation, or a database whose dialect predates the TypeConverter API — during table schema discovery or type resolution.","commonSituations":"Custom in-house dialect extending JdbcDialect without implementing getTypeConverter; older third-party dialect used with newer SeaTunnel catalog code that requires TypeConverter; choosing the wrong dialect class for the database.","solutions":["Implement getTypeConverter() in your custom dialect returning a proper TypeConverter<BasicTypeDefine>","Use the dialect class provided by SeaTunnel for your database instead of a generic/custom one","Upgrade SeaTunnel so your database's dialect implements the TypeConverter API","If only type mapping via getTypeMapper is needed, avoid the code path calling getTypeConverter (e.g. bypass typeDefine-based catalog operations)"],"exampleFix":"// before\nclass MyDialect implements JdbcDialect { /* no getTypeConverter override */ }\n// after\n@Override\npublic TypeConverter<BasicTypeDefine> getTypeConverter() {\n    return MyTypeConverter.INSTANCE;\n}","handlingStrategy":"type-guard","validationCode":"JdbcDialect d = ...;\nboolean supportsTypeConverter;\ntry { d.getTypeConverter(); supportsTypeConverter = true; }\ncatch (UnsupportedOperationException e) { supportsTypeConverter = false; }\nif (!supportsTypeConverter) throw new IllegalStateException(\"Dialect \" + d + \" lacks TypeConverter; pick another dialect or implement getTypeConverter\");","typeGuard":"boolean hasTypeConverter(JdbcDialect d) {\n    try { d.getTypeConverter(); return true; }\n    catch (UnsupportedOperationException e) { return false; }\n}","tryCatchPattern":"try {\n    TypeConverter<BasicTypeDefine> tc = dialect.getTypeConverter();\n} catch (UnsupportedOperationException e) {\n    LOG.error(\"Dialect {} does not support TypeConverter; use its dedicated dialect or implement getTypeConverter\", dialect.dialectName());\n    throw e;\n}","preventionTips":["When writing custom dialects, implement getTypeConverter along with getTypeMapper","Verify dialect capability at startup with the type guard above","Keep custom dialects in sync with the JdbcDialect interface of your SeaTunnel version","Prefer maintained dialect classes over generic fallbacks"],"tags":["jdbc","dialect","type-converter","unsupported-operation"],"backgroundTag":"method-not-implemented","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"}