{"record":{"id":"891a90749bca0828","repo":"apache/flink","slug":"a-predicate-on-a-boolean-column-requires-a-boolean","errorCode":null,"errorMessage":"A predicate on a BOOLEAN column requires a Boolean literal.","messagePattern":"A predicate on a BOOLEAN column requires a Boolean literal\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-formats/flink-orc/src/main/java/org/apache/flink/orc/OrcFilters.java","lineNumber":453,"sourceCode":"                        return ((BigDecimal) literal).doubleValue();\n                    } else {\n                        throw new IllegalArgumentException(\n                                \"A predicate on a FLOAT column requires a floating \"\n                                        + \"literal, i.e., Float or Double.\");\n                    }\n                case STRING:\n                    if (literal instanceof String) {\n                        return literal;\n                    } else {\n                        throw new IllegalArgumentException(\n                                \"A predicate on a STRING column requires a floating \"\n                                        + \"literal, i.e., Float or Double.\");\n                    }\n                case BOOLEAN:\n                    if (literal instanceof Boolean) {\n                        return literal;\n                    } else {\n                        throw new IllegalArgumentException(\n                                \"A predicate on a BOOLEAN column requires a Boolean literal.\");\n                    }\n                case DATE:\n                    if (literal instanceof Date) {\n                        return literal;\n                    } else {\n                        throw new IllegalArgumentException(\n                                \"A predicate on a DATE column requires a java.sql.Date literal.\");\n                    }\n                case TIMESTAMP:\n                    if (literal instanceof Timestamp) {\n                        return literal;\n                    } else {\n                        throw new IllegalArgumentException(\n                                \"A predicate on a TIMESTAMP column requires a java.sql.Timestamp literal.\");\n                    }\n                case DECIMAL:\n                    if (literal instanceof BigDecimal) {","sourceCodeStart":435,"sourceCodeEnd":471,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-formats/flink-orc/src/main/java/org/apache/flink/orc/OrcFilters.java#L435-L471","documentation":"For an ORC BOOLEAN-typed column, the pushed-down literal must be a java Boolean; anything else (String 'true', Integer 1/0, etc.) throws IllegalArgumentException, since SearchArgument stores boolean predicates as Boolean objects.","triggerScenarios":"A predicate like flag = 1 or flag = 'true' on a BOOLEAN ORC column via the legacy OrcFilters pushdown; programmatic filter construction passing a numeric or string representation of a boolean.","commonSituations":"Systems encoding booleans as 0/1 (JDBC sources, Parquet-to-ORC conversions) feeding filters unconverted; configuration-driven filter values arriving as strings.","solutions":["Convert the literal to Boolean before building the predicate (e.g. value == 1, Boolean.parseBoolean(s), with explicit handling for 0/1 encodings).","Write SQL predicates against BOOLEAN columns as flag = true, not flag = 1.","Use the modern ORC filesystem connector pushdown which applies proper literal conversion."],"exampleFix":"-- before\nSELECT * FROM orc_t WHERE flag = 1;\n-- after\nSELECT * FROM orc_t WHERE flag = true;","handlingStrategy":"type-guard","validationCode":"Object lit;\nif (value instanceof Boolean) lit = value;\nelse if (value instanceof Number) lit = ((Number) value).intValue() != 0;\nelse if (value instanceof String) lit = Boolean.parseBoolean((String) value);\nelse throw new IllegalArgumentException(\"BOOLEAN column needs a Boolean literal\");","typeGuard":"static boolean isBooleanPushable(Object v) { return v instanceof Boolean; }","tryCatchPattern":null,"preventionTips":["Compare BOOLEAN columns with TRUE/FALSE, never 1/0 or 'true'.","Normalize 0/1 boolean encodings at the ingestion boundary."],"tags":["flink","orc","predicate-pushdown","type-mismatch","boolean"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}