{"record":{"id":"20ce03d13c2c4284","repo":"t8y2/dbx","slug":"unsupported-firebird-field-type-fieldtype","errorCode":null,"errorMessage":"Unsupported Firebird field type: {fieldType}","messagePattern":"Unsupported Firebird field type: (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java","lineNumber":214,"sourceCode":"            case 7 -> numericType(\"SMALLINT\", subType, parameter);\n            case 8 -> numericType(\"INTEGER\", subType, parameter);\n            case 10 -> \"FLOAT\";\n            case 11, 27 -> \"DOUBLE PRECISION\";\n            case 12 -> \"DATE\";\n            case 13 -> \"TIME\";\n            case 14 -> characterType(\"CHAR\", \"BINARY\", subType, parameter);\n            case 16 -> numericType(\"BIGINT\", subType, parameter);\n            case 23 -> \"BOOLEAN\";\n            case 24 -> \"DECFLOAT(16)\";\n            case 25 -> \"DECFLOAT(34)\";\n            case 26 -> numericType(\"INT128\", subType, parameter);\n            case 28 -> \"TIME WITH TIME ZONE\";\n            case 29 -> \"TIMESTAMP WITH TIME ZONE\";\n            case 35 -> \"TIMESTAMP\";\n            case 37 -> characterType(\"VARCHAR\", \"VARBINARY\", subType, parameter);\n            case 40 -> sizedType(\"CSTRING\", characterLength(parameter));\n            case 261 -> blobType(subType);\n            default -> throw new IllegalStateException(\"Unsupported Firebird field type: \" + fieldType);\n        };\n    }\n\n    private static String numericType(String integerType, int subType, ProcedureParameter parameter) {\n        int scale = valueOrZero(parameter.scale());\n        if (subType != 1 && subType != 2 && scale >= 0) {\n            return integerType;\n        }\n        String exactType = subType == 2 ? \"DECIMAL\" : \"NUMERIC\";\n        int precision = valueOrZero(parameter.precision());\n        if (precision <= 0) {\n            return exactType;\n        }\n        return exactType + \"(\" + precision + \",\" + Math.abs(scale) + \")\";\n    }\n\n    private static String characterType(\n        String characterType,","sourceCodeStart":196,"sourceCodeEnd":232,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java#L196-L232","documentation":"FirebirdAgent.parameterType maps Firebird blob-field type codes (BLR/RDB$FIELD_TYPE values) to SQL type strings. Unknown codes reach the default branch and throw IllegalStateException. This fires when a field type code is outside the known set (7, 8, 9..35, 37, 40, 261).","triggerScenarios":"A procedure parameter carries a fieldType integer not covered by the switch, e.g. a corrupted value or a Firebird type code the driver does not yet map.","commonSituations":"Running against a Firebird version or dialect that reports new/renamed type codes; metadata queried from the wrong system table yielding mismatched codes; decoding a non-blob field type as a parameter.","solutions":["Upgrade or patch the driver to map the missing field type code","Log the raw fieldType/subType/scale from RDB$FIELDS and add the missing case","Verify metadata extraction reads the correct RDB$FIELD_TYPE column"],"exampleFix":"// before\ncase 261 -> blobType(subType);\ndefault -> throw new IllegalStateException(\"Unsupported Firebird field type: \" + fieldType);\n// after\ncase 261 -> blobType(subType);\ncase 16 -> \"BIGINT\"; // newly mapped code\ndefault -> throw new IllegalStateException(\"Unsupported Firebird field type: \" + fieldType);","handlingStrategy":"try-catch","validationCode":"Set<Integer> known = Set.of(7,8,9,10,12,16,23,24,27,28,29,35,37,40,261); if (p.fieldType() == null || !known.contains(p.fieldType())) { skip(p); }","typeGuard":"static boolean isKnownFirebirdFieldType(Integer code) { return code != null && KNOWN_FIELD_TYPES.contains(code); }","tryCatchPattern":"try { ddl = agent.getProcedureDdl(name); } catch (IllegalStateException e) { log.warn(\"Unmapped Firebird field type: {}\", e.getMessage()); fallbackToRawMetadata(name); }","preventionTips":["Test DDL generation against all Firebird versions you support","Log fieldType/subType/scale for unknown codes to request driver support","Keep the driver updated when new Firebird type codes are introduced"],"tags":["firebird","type-mapping","state","metadata"],"backgroundTag":"unsupported-type-code","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}