{"record":{"id":"8659a39844657542","repo":"prestodb/presto","slug":"expecting-specialformexpression-dereference-but","errorCode":null,"errorMessage":"expecting SpecialFormExpression(DEREFERENCE), but got: ","messagePattern":"expecting SpecialFormExpression\\(DEREFERENCE\\), but got: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"presto-parquet/src/main/java/com/facebook/presto/parquet/rule/ParquetDereferencePushDown.java","lineNumber":162,"sourceCode":"                    {\n                        if (allExpressions.contains(reference)) {\n                            referenceCount[0] += 1;\n                        }\n                        return null;\n                    }\n                }, referenceCount);\n\n        return referenceCount[0] > 1;\n    }\n\n    private Subfield createNestedColumn(\n            Map<String, ColumnHandle> baseColumnHandles,\n            RowExpression rowExpression,\n            ExpressionOptimizer expressionOptimizer,\n            ConnectorSession session)\n    {\n        if (!(rowExpression instanceof SpecialFormExpression) || ((SpecialFormExpression) rowExpression).getForm() != DEREFERENCE) {\n            throw new IllegalArgumentException(\"expecting SpecialFormExpression(DEREFERENCE), but got: \" + rowExpression);\n        }\n\n        RowExpression currentRowExpression = rowExpression;\n        List<Subfield.PathElement> elements = new ArrayList<>();\n        while (true) {\n            if (currentRowExpression instanceof VariableReferenceExpression) {\n                Collections.reverse(elements);\n                String name = ((VariableReferenceExpression) currentRowExpression).getName();\n                ColumnHandle handle = baseColumnHandles.get(name);\n                checkArgument(handle != null, \"Missing Column handle: \" + name);\n                String originalColumnName = getColumnName(handle);\n                return new Subfield(originalColumnName, unmodifiableList(elements));\n            }\n\n            if (currentRowExpression instanceof SpecialFormExpression && ((SpecialFormExpression) currentRowExpression).getForm() == DEREFERENCE) {\n                SpecialFormExpression dereferenceExpression = (SpecialFormExpression) currentRowExpression;\n                RowExpression base = dereferenceExpression.getArguments().get(0);\n                RowType baseType = (RowType) base.getType();","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-parquet/src/main/java/com/facebook/presto/parquet/rule/ParquetDereferencePushDown.java#L144-L180","documentation":"Internal shape check in createNestedColumn: the optimizer handed this pass an expression it expected to be a SpecialFormExpression of DEREFERENCE but is not — a planner invariant violation, not a user data problem. Indicates a change in expression shape upstream or a bug in the pushdown rule.","triggerScenarios":"Thrown at presto-parquet/src/main/java/com/facebook/presto/parquet/rule/ParquetDereferencePushDown.java:162 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Report as a Presto planner bug with the query and explain plan","Work around by disabling the parquet dereference pushdown rule","Upgrade to a version where the rule handles the expression shape"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}