prestodb/presto · error · SemanticException
INVALID_PROCEDURE_ARGUMENTS
INVALID_PROCEDURE_ARGUMENTS
Error message
Named and positional arguments cannot be mixed
What it means
Validation in extractParameterValuesInOrder enforcing the SQL procedure-call specification: a CALL statement's arguments must be either all positional (call proc(a, b)) or all named (call proc(x => a)). Mixing the two styles in one invocation is rejected before arguments are bound.
Source
Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java:147
}
return immediateFuture(null);
}
public static Object[] extractParameterValuesInOrder(Call call, BaseProcedure<?> procedure, Metadata metadata, Session session, Map<NodeRef<Parameter>, Expression> parameterLookup)
{
// map declared argument names to positions
Map<String, Integer> positions = new HashMap<>();
for (int i = 0; i < procedure.getArguments().size(); i++) {
positions.put(procedure.getArguments().get(i).getName(), i);
}
// per specification, do not allow mixing argument types
Predicate<CallArgument> hasName = argument -> argument.getName().isPresent();
boolean anyNamed = call.getArguments().stream().anyMatch(hasName);
boolean allNamed = call.getArguments().stream().allMatch(hasName);
if (anyNamed && !allNamed) {
throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, call, "Named and positional arguments cannot be mixed");
}
// get the argument names in call order
Map<String, CallArgument> names = new LinkedHashMap<>();
for (int i = 0; i < call.getArguments().size(); i++) {
CallArgument argument = call.getArguments().get(i);
if (argument.getName().isPresent()) {
String name = argument.getName().get();
if (names.put(name, argument) != null) {
throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, argument, "Duplicate procedure argument: %s", name);
}
if (!positions.containsKey(name)) {
throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, argument, "Unknown argument name: %s", name);
}
}
else if (i < procedure.getArguments().size()) {
names.put(procedure.getArguments().get(i).getName(), argument);
}View on GitHub (pinned to 55bb57d202)
Solutions
- Rewrite the CALL using only positional arguments
- Rewrite the CALL using only named arguments
- Check for a trailing named argument after positional ones, the most common cause of this error
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java:147 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/a4d50235a8c64905.
Report an issue: GitHub.