{"record":{"id":"1220db101a879c93","repo":"prestodb/presto","slug":"enum-definition-expected-got-s","errorCode":null,"errorMessage":"Enum definition expected, got %s","messagePattern":"Enum definition expected, got (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-common/src/main/java/com/facebook/presto/common/type/BigintEnumParametricType.java","lineNumber":47,"sourceCode":"    {\n        return StandardTypes.BIGINT_ENUM;\n    }\n\n    @Override\n    public Type createType(List<TypeParameter> parameters)\n    {\n        checkArgument(parameters.size() == 1, \"Enum type expects exactly one parameter, got %s\", parameters);\n        checkArgument(\n                parameters.get(0).getKind() == ParameterKind.LONG_ENUM,\n                \"Enum definition expected, got %s\",\n                parameters);\n        return new BigintEnumType(parameters.get(0).getLongEnumMap());\n    }\n\n    private static void checkArgument(boolean argument, String format, Object... args)\n    {\n        if (!argument) {\n            throw new IllegalArgumentException(format(format, args));\n        }\n    }\n}\n","sourceCodeStart":29,"sourceCodeEnd":51,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-common/src/main/java/com/facebook/presto/common/type/BigintEnumParametricType.java#L29-L51","documentation":"BigintEnumParametricType.createType expects its single type parameter to be a long enum map definition; if the parameter is anything else (not an enum definition), the private checkArgument helper throws IllegalArgumentException with 'Enum definition expected, got %s'. This ensures BIGINT ENUM types are only constructed from a proper enum map parameter.","triggerScenarios":"Registering or creating a BIGINT ENUM type whose TypeSignatureParameter is not a LongEnumMap (e.g. a plain long, a variable name, or a different parameter kind is passed to createType).","commonSituations":"Plugin or connector code hand-building TypeSignatures for enum types instead of using the enum helpers; a serialized/round-tripped type signature losing its enum map parameter; version mismatch where a plugin sends parameters in a different order/kind.","solutions":["Build BIGINT ENUM signatures via the LongEnumMap-based TypeSignatureParameter.of(...) helpers","Inspect the TypeSignature being passed and confirm parameter 0 is an enum definition","Update/align plugin and server versions so the parameter encoding matches"],"exampleFix":"// before\nTypeSignature sig = new TypeSignature(\"BIGINT ENUM\", singletonList(TypeSignatureParameter.of(42L)));\n// after\nTypeSignature sig = new TypeSignature(\"BIGINT ENUM\", singletonList(TypeSignatureParameter.of(longEnumMap))); // longEnumMap is a LongEnumMap definition","handlingStrategy":"type-guard","validationCode":"TypeSignatureParameter p = signature.getParameters().get(0);\nif (p.getKind() != ParameterKind.LONG_ENUM_MAP) {\n    throw new IllegalArgumentException(\"BIGINT ENUM requires a LongEnumMap parameter, got \" + p.getKind());\n}","typeGuard":"public static boolean isEnumDefinition(TypeSignatureParameter p) {\n    return p != null && p.getKind() == ParameterKind.LONG_ENUM_MAP;\n}","tryCatchPattern":"try {\n    Type t = bigintEnumParametricType.createType(parameters);\n} catch (IllegalArgumentException e) {\n    logger.error(\"Bad enum parameter: %s\", e.getMessage());\n    // rebuild signature with proper LongEnumMap\n}","preventionTips":["Always construct enum signatures via LongEnumMap-based helpers","Round-trip test serialized signatures to ensure the enum parameter survives","Keep plugin and server versions aligned"],"tags":["presto","type-system","enum","argument-validation"],"backgroundTag":"invalid-parameter-type","analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}