{"record":{"id":"74f2a56d5dff6615","repo":"apache/seatunnel","slug":"common-17-74f2a5","errorCode":"COMMON-17","errorMessage":"'${identifier}' unsupported convert type '${dataType}' of '${field}' to SeaTunnel data type.","messagePattern":"'(.+?)' unsupported convert type '(.+?)' of '(.+?)' to SeaTunnel data type\\.","errorType":"error_code","errorClass":"SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlite/SqliteTypeMapper.java","lineNumber":169,"sourceCode":"            case SQLITE_TIME:\n            case SQLITE_DATETIME:\n            case SQLITE_TIMESTAMP:\n                return BasicType.STRING_TYPE;\n\n            case SQLITE_TINYBLOB:\n            case SQLITE_MEDIUMBLOB:\n            case SQLITE_BLOB:\n            case SQLITE_LONGBLOB:\n            case SQLITE_VARBINARY:\n            case SQLITE_BINARY:\n            case SQLITE_LONGVARBINARY:\n                return PrimitiveByteArrayType.INSTANCE;\n\n                // Doesn't support yet\n            case SQLITE_UNKNOWN:\n            default:\n                final String jdbcColumnName = metadata.getColumnName(colIndex);\n                throw CommonError.convertToSeaTunnelTypeError(\n                        DatabaseIdentifier.SQLITE, columnTypeName, jdbcColumnName);\n        }\n    }\n}\n","sourceCodeStart":151,"sourceCodeEnd":174,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/sqlite/SqliteTypeMapper.java#L151-L174","documentation":"SqliteTypeMapper.mapping() converts a SQLite JDBC column type to a SeaTunnel type while reading. SQLite is dynamically typed; the mapper recognizes a fixed set of type constants. SQLITE_UNKNOWN (or any unrecognized type name) hits the default branch and throws CommonError.convertToSeaTunnelTypeError with the column name from ResultSetMetaData.","triggerScenarios":"Reading a SQLite table whose declared column type is unrecognized (e.g. BLOB-ish/custom declared type like 'NVARCHAR(20)', 'MONEY', or empty declared type resolved to SQLITE_UNKNOWN).","commonSituations":"SQLite databases created by other tools using non-standard column declared types; untyped columns (declared with no type); migrating legacy SQLite schemas.","solutions":["ALTER TABLE / recreate the table with standard declared types (TEXT, INTEGER, REAL, BLOB, NUMERIC).","Read from a view that casts the column, e.g. CREATE VIEW v AS SELECT CAST(col AS TEXT) AS col FROM t.","Explicitly set the query to CAST the offending column in the connector's query config.","Add a mapping case for the type in SqliteTypeMapper if it is safe to represent."],"exampleFix":"// before: CREATE TABLE t (id INTEGER, price MONEY)\n// after\nCREATE TABLE t (id INTEGER, price NUMERIC);","handlingStrategy":"validation","validationCode":"-- Audit SQLite declared types before reading\nSELECT name, type FROM pragma_table_info('my_table');\n-- ensure every 'type' is one of: TEXT, INTEGER, REAL, BLOB, NUMERIC","typeGuard":null,"tryCatchPattern":"try {\n    sourceReader.read();\n} catch (SeaTunnelRuntimeException e) {\n    if (e.getMessage().contains(\"unsupported convert type\")) {\n        // create a view with CAST(col AS TEXT) and point the connector at it\n    } else { throw e; }\n}","preventionTips":["Always declare SQLite column types explicitly when creating tables.","Avoid non-standard declared types (MONEY, NVARCHAR(20), etc.) in SQLite schemas.","Query pragma_table_info as part of pipeline onboarding for new tables.","Use CAST in the connector query for legacy untyped columns."],"tags":["jdbc","sqlite","type-conversion","source","unsupported-type"],"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"}