{"record":{"id":"642e4b889991b737","repo":"prestodb/presto","slug":"invalid-arguments-642e4b","errorCode":"INVALID_ARGUMENTS","errorMessage":"Missing field reference for expression","messagePattern":"Missing field reference for expression","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/ExpressionTreeUtils.java","lineNumber":177,"sourceCode":"        }\n        return Optional.empty();\n    }\n\n    public static Object resolveEnumLiteral(DereferenceExpression node, Type nodeType)\n    {\n        QualifiedName qualifiedName = DereferenceExpression.getQualifiedName(node);\n\n        EnumType enumType = (EnumType) ((TypeWithName) nodeType).getType();\n        String enumKey = qualifiedName.getSuffix().toUpperCase(ENGLISH);\n        checkArgument(enumType.getEnumMap().containsKey(enumKey), format(\"No key '%s' in enum '%s'\", enumKey, nodeType.getDisplayName()));\n        Object enumValue = enumType.getEnumMap().get(enumKey);\n        return enumValue instanceof String ? utf8Slice((String) enumValue) : enumValue;\n    }\n\n    public static FieldId checkAndGetColumnReferenceField(Expression expression, Multimap<NodeRef<Expression>, FieldId> columnReferences)\n    {\n        if (!columnReferences.containsKey(NodeRef.of(expression))) {\n            throw new PrestoException(INVALID_ARGUMENTS, \"Missing field reference for expression\");\n        }\n        if (columnReferences.get(NodeRef.of(expression)).size() != 1) {\n            throw new PrestoException(INVALID_ARGUMENTS, \"Multiple field references for expression\");\n        }\n\n        return columnReferences.get(NodeRef.of(expression)).iterator().next();\n    }\n\n    public static boolean isNonNullConstant(Expression expression)\n    {\n        Expression tempExpression = expression;\n        while (tempExpression instanceof Cast) {\n            tempExpression = ((Cast) tempExpression).getExpression();\n        }\n\n        if (tempExpression instanceof NullLiteral) {\n            return false;\n        }","sourceCodeStart":159,"sourceCodeEnd":195,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/ExpressionTreeUtils.java#L159-L195","documentation":"checkAndGetColumnReferenceField looks up the FieldId recorded for an expression node in the analysis-produced columnReferences multimap. If the expression node is absent from that map — it was never resolved as a column reference — it throws PrestoException INVALID_ARGUMENTS 'Missing field reference for expression'. This is an internal consistency check, typically reached via GROUPING or similar operations that require column references.","triggerScenarios":"Calling checkAndGetColumnReferenceField with an expression that is not a resolved column reference (e.g. an arbitrary expression or an alias, not a plain column), often via GROUPING argument processing where arguments must be grouping columns.","commonSituations":"GROUPING(<expr>) applied to something that is not a column listed in GROUP BY; optimizer/planner code (or plugins) invoking the helper on non-column expressions.","solutions":["Ensure the argument is a plain column reference that appears in GROUP BY / GROUPING SETS","Verify the analysis produced columnReferences containing the node (NodeRef.of(expression))","In custom code, guard with columnReferences.containsKey(NodeRef.of(expression)) before calling"],"exampleFix":"// before\nFieldId id = checkAndGetColumnReferenceField(someDerivedExpr, columnReferences);\n// after\nNodeRef<Expression> ref = NodeRef.of(someDerivedExpr);\nif (!columnReferences.containsKey(ref)) {\n    throw new PrestoException(INVALID_ARGUMENTS, \"expression is not a grouping column\");\n}\nFieldId id = checkAndGetColumnReferenceField(someDerivedExpr, columnReferences);","handlingStrategy":"validation","validationCode":"NodeRef<Expression> ref = NodeRef.of(expr);\nif (!columnReferences.containsKey(ref)) {\n    throw new PrestoException(INVALID_ARGUMENTS, \"expression has no resolved column reference\");\n}","typeGuard":"boolean hasSingleField(Expression e, Multimap<NodeRef<Expression>, FieldId> refs) {\n    return refs.containsKey(NodeRef.of(e));\n}","tryCatchPattern":"try {\n    FieldId id = checkAndGetColumnReferenceField(expr, columnReferences);\n} catch (PrestoException e) {\n    if (e.getErrorCode().getCode() == INVALID_ARGUMENTS.toErrorCode().getCode()) {\n        throw new IllegalStateException(\"Expected a resolved grouping column, got: \" + expr, e);\n    }\n    throw e;\n}","preventionTips":["Only pass plain column references that appear in GROUP BY","Re-derive columnReferences after any AST rewrite before reusing it","Guard with containsKey before the strict helper"],"tags":["invalid-arguments","column-reference","presto"],"backgroundTag":"missing-column-reference","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"}