prestodb/presto · error · SemanticException
STANDALONE_LAMBDA
STANDALONE_LAMBDA
Error message
Lambda expression should always be used inside a function
What it means
Analysis error: a lambda expression appeared outside of a function call context. Lambdas in Presto only have meaning as arguments to higher-order functions (map/filter/transform etc.); a bare lambda in an expression list or standalone position is rejected by this guard in the analyzer.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java:1616
default:
throw new IllegalStateException(format("Unexpected comparison type: %s", node.getOperator()));
}
return setExpressionType(node, BOOLEAN);
}
@Override
public Type visitFieldReference(FieldReference node, StackableAstVisitorContext<Context> context)
{
Field field = baseScope.getRelationType().getFieldByIndex(node.getFieldIndex());
return handleResolvedField(node, new FieldId(baseScope.getRelationId(), node.getFieldIndex()), field, context);
}
@Override
protected Type visitLambdaExpression(LambdaExpression node, StackableAstVisitorContext<Context> context)
{
if (!context.getContext().isExpectingLambda()) {
throw new SemanticException(STANDALONE_LAMBDA, node, "Lambda expression should always be used inside a function");
}
List<Type> types = context.getContext().getFunctionInputTypes();
List<LambdaArgumentDeclaration> lambdaArguments = node.getArguments();
if (types.size() != lambdaArguments.size()) {
throw new SemanticException(INVALID_PARAMETER_USAGE, node,
format("Expected a lambda that takes %s argument(s) but got %s", types.size(), lambdaArguments.size()));
}
ImmutableList.Builder<Field> fields = ImmutableList.builder();
for (int i = 0; i < lambdaArguments.size(); i++) {
LambdaArgumentDeclaration lambdaArgument = lambdaArguments.get(i);
Type type = types.get(i);
fields.add(com.facebook.presto.sql.analyzer.Field.newUnqualified(lambdaArgument.getLocation(), lambdaArgument.getName().getValue(), type));
setExpressionType(lambdaArgument, type);
}
View on GitHub (pinned to 55bb57d202)
Solutions
- Place the lambda inside a higher-order function, e.g. filter(a, x -> x > 0)
- Replace the bare lambda with a regular expression
- Check for a missing function name or misplaced parenthesis
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/sql/analyzer/ExpressionAnalyzer.java:1616 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of prestodb/presto@55bb57d202 (2026-09-04).
Data as JSON: /api/errors/ff3314b7a8f73cf8.
Report an issue: GitHub.