{"record":{"id":"67a95ad09f72c174","repo":"t8y2/dbx","slug":"unsupported-object-type-objecttype-67a95a","errorCode":null,"errorMessage":"Unsupported object type: \" + objectType","messagePattern":"Unsupported object type: \" \\+ objectType","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java","lineNumber":285,"sourceCode":"                    while (rs.next()) {\n                        result.add(new ObjectInfo(rs.getString(1), normalizeTableType(rs.getString(2)), schema, null));\n                    }\n                }\n            }\n            return constraints.withoutPaging().filterObjects(result);\n        });\n    }\n\n    @Override\n    public ObjectSource getObjectSource(String schema, String name, String objectType) {\n        return unchecked(() -> {\n            String effectiveSchema = resolveSchema(schema);\n            String sql = switch (objectType.toUpperCase(Locale.ROOT)) {\n                case \"VIEW\" -> \"SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?\";\n                case \"FUNCTION\", \"PROCEDURE\" -> isVersion2OrLater()\n                    ? \"SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = ? AND ROUTINE_NAME = ?\"\n                    : \"SELECT SOURCE FROM INFORMATION_SCHEMA.FUNCTION_ALIASES WHERE ALIAS_SCHEMA = ? AND ALIAS_NAME = ?\";\n                default -> throw new IllegalArgumentException(\"Unsupported object type: \" + objectType);\n            };\n\n            String source = \"\";\n            try (var stmt = requireConnected().prepareStatement(sql)) {\n                stmt.setString(1, effectiveSchema);\n                stmt.setString(2, name);\n                try (ResultSet rs = stmt.executeQuery()) {\n                    if (rs.next()) {\n                        String value = rs.getString(1);\n                        source = value == null ? \"\" : value;\n                    }\n                }\n            }\n            return new ObjectSource(name, objectType, schema, source);\n        });\n    }\n\n    @Override","sourceCodeStart":267,"sourceCodeEnd":303,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java#L267-L303","documentation":"H2Agent.getObjectSource generates an INFORMATION_SCHEMA query based on the object type; only VIEW, FUNCTION, and PROCEDURE are accepted. Other types hit the switch default and throw IllegalArgumentException. On H2 1.x, functions/procedures are read from FUNCTION_ALIASES; on 2.x from ROUTINES.","triggerScenarios":"Calling getObjectSource with a type like 'TABLE', 'CONSTRAINT', 'DOMAIN', or an untrimmed string; null type would NPE at toUpperCase before the switch.","commonSituations":"Passing types from other databases' metadata (tables via this API); tooling enumerating all object kinds uniformly; case/whitespace differences in type strings.","solutions":["Pass only VIEW, FUNCTION, or PROCEDURE (case-insensitive)","Trim the type string before calling","Use table-specific DDL APIs for tables and other kinds"],"exampleFix":"// before\nagent.getObjectSource(schema, name, \" TABLE \");\n// after\nString t = objectType.trim().toUpperCase(Locale.ROOT);\nif (t.equals(\"VIEW\") || t.equals(\"FUNCTION\") || t.equals(\"PROCEDURE\")) {\n    agent.getObjectSource(schema, name, objectType.trim());\n} else {\n    throw new IllegalArgumentException(\"H2 source supports only VIEW/FUNCTION/PROCEDURE\");\n}","handlingStrategy":"validation","validationCode":"if (objectType == null) throw new IllegalArgumentException(\"objectType required\"); String t = objectType.trim().toUpperCase(Locale.ROOT); if (!List.of(\"VIEW\",\"FUNCTION\",\"PROCEDURE\").contains(t)) throw new IllegalArgumentException(\"H2 source supports only VIEW/FUNCTION/PROCEDURE\");","typeGuard":"static boolean isSupportedH2ObjectType(String t) { return t != null && List.of(\"VIEW\",\"FUNCTION\",\"PROCEDURE\").contains(t.trim().toUpperCase(Locale.ROOT)); }","tryCatchPattern":"try { src = agent.getObjectSource(schema, name, type); } catch (IllegalArgumentException e) { log.warn(\"Unsupported H2 object type: {}\", type); return Optional.empty(); }","preventionTips":["Normalize and trim object types before calling","Use table-specific DDL for tables; this API covers views/routines only","Guard against null types (would NPE before the switch throws)"],"tags":["h2","unsupported-object-type","argument-validation","information-schema"],"backgroundTag":"unsupported-object-type","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"}