{"record":{"id":"a4d50235a8c64905","repo":"prestodb/presto","slug":"invalid-procedure-arguments","errorCode":"INVALID_PROCEDURE_ARGUMENTS","errorMessage":"Named and positional arguments cannot be mixed","messagePattern":"Named and positional arguments cannot be mixed","errorType":"error_code","errorClass":"SemanticException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java","lineNumber":147,"sourceCode":"        }\n\n        return immediateFuture(null);\n    }\n\n    public static Object[] extractParameterValuesInOrder(Call call, BaseProcedure<?> procedure, Metadata metadata, Session session, Map<NodeRef<Parameter>, Expression> parameterLookup)\n    {\n        // map declared argument names to positions\n        Map<String, Integer> positions = new HashMap<>();\n        for (int i = 0; i < procedure.getArguments().size(); i++) {\n            positions.put(procedure.getArguments().get(i).getName(), i);\n        }\n\n        // per specification, do not allow mixing argument types\n        Predicate<CallArgument> hasName = argument -> argument.getName().isPresent();\n        boolean anyNamed = call.getArguments().stream().anyMatch(hasName);\n        boolean allNamed = call.getArguments().stream().allMatch(hasName);\n        if (anyNamed && !allNamed) {\n            throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, call, \"Named and positional arguments cannot be mixed\");\n        }\n\n        // get the argument names in call order\n        Map<String, CallArgument> names = new LinkedHashMap<>();\n        for (int i = 0; i < call.getArguments().size(); i++) {\n            CallArgument argument = call.getArguments().get(i);\n            if (argument.getName().isPresent()) {\n                String name = argument.getName().get();\n                if (names.put(name, argument) != null) {\n                    throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, argument, \"Duplicate procedure argument: %s\", name);\n                }\n                if (!positions.containsKey(name)) {\n                    throw new SemanticException(INVALID_PROCEDURE_ARGUMENTS, argument, \"Unknown argument name: %s\", name);\n                }\n            }\n            else if (i < procedure.getArguments().size()) {\n                names.put(procedure.getArguments().get(i).getName(), argument);\n            }","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java#L129-L165","documentation":"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.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","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"}