{"record":{"id":"0ddc8c3ca5cc8705","repo":"prestodb/presto","slug":"unsupported-table-properties-value-s-s-type","errorCode":null,"errorMessage":"Unsupported table properties value: %s = %s (type: %s)","messagePattern":"Unsupported table properties value: (.+?) = (.+?) \\(type: (.+?)\\)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-verifier/src/main/java/com/facebook/presto/verifier/rewrite/VerificationQueryRewriterFactory.java","lineNumber":118,"sourceCode":"\n    public static List<Property> constructProperties(Map<String, Object> propertiesMap)\n    {\n        ImmutableList.Builder<Property> properties = ImmutableList.builder();\n        for (Entry<String, Object> entry : propertiesMap.entrySet()) {\n            if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long) {\n                properties.add(new Property(new Identifier(entry.getKey()), new LongLiteral(String.valueOf(entry.getValue()))));\n            }\n            else if (entry.getValue() instanceof Double) {\n                properties.add(new Property(new Identifier(entry.getKey()), new DoubleLiteral(String.valueOf(entry.getValue()))));\n            }\n            else if (entry.getValue() instanceof String) {\n                properties.add(new Property(new Identifier(entry.getKey()), new StringLiteral((String) entry.getValue())));\n            }\n            else if (entry.getValue() instanceof Boolean) {\n                properties.add(new Property(new Identifier(entry.getKey()), ((Boolean) entry.getValue()) ? BooleanLiteral.TRUE_LITERAL : FALSE_LITERAL));\n            }\n            else {\n                throw new IllegalArgumentException(format(\"Unsupported table properties value: %s = %s (type: %s)\", entry.getKey(), entry.getValue(), entry.getValue().getClass()));\n            }\n        }\n        return properties.build();\n    }\n}\n","sourceCodeStart":100,"sourceCodeEnd":124,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-verifier/src/main/java/com/facebook/presto/verifier/rewrite/VerificationQueryRewriterFactory.java#L100-L124","documentation":"When building table Properties from the verifier configuration map, VerificationQueryRewriterFactory.constructProperties only maps String and Boolean values to literals. Any other value type (Integer, Long, Double, List, Map) triggers this IllegalArgumentException because there is no literal mapping for it.","triggerScenarios":"A table properties entry in the verifier JSON/config has a value that is neither String nor Boolean — e.g. a numeric property or a nested structure (arrays, objects).","commonSituations":"Config authors write table properties with unquoted numbers (\"num_rows\": 42) or nested values where the code expects strings/booleans; schema changes in the verifier JSON add typed properties the factory doesn't recognize; YAML/JSON parsing yields Integer where the author meant a String.","solutions":["Quote numeric values in the configuration so they are Strings (e.g. \"42\" instead of 42)","Convert the value to String/Boolean in the configuration source before it reaches the verifier","Extend constructProperties with branches for other types (Integer, Long, Double, List) mapping them to appropriate Literals"],"exampleFix":"// before\n\"transactional\": true,\n\"num_rows\": 42\n// after\n\"transactional\": true,\n\"num_rows\": \"42\"","handlingStrategy":"validation","validationCode":"for (Map.Entry<String, Object> e : tableProperties.entrySet()) {\n    if (!(e.getValue() instanceof String) && !(e.getValue() instanceof Boolean)) {\n        throw new IllegalArgumentException(\"Table property \" + e.getKey() + \" must be String or Boolean, got: \" + e.getValue().getClass());\n    }\n}","typeGuard":"boolean isSupportedPropertyValue(Object v) {\n    return v instanceof String || v instanceof Boolean;\n}","tryCatchPattern":"try {\n    List<Property> props = factory.constructProperties(rawProperties);\n} catch (IllegalArgumentException ex) {\n    if (ex.getMessage().startsWith(\"Unsupported table properties value\")) {\n        log.error(\"Fix verifier config: %s\", ex.getMessage());\n    }\n    throw ex;\n}","preventionTips":["Quote all non-boolean table property values in verifier JSON configs","Add a config schema validation step (JSON schema) for table properties before runtime","Cover table properties parsing in unit tests with representative configs"],"tags":["verifier","table-properties","config-validation","illegal-argument"],"backgroundTag":"unsupported-property-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"}