{"record":{"id":"6b5d3c24e5f4e232","repo":"prestodb/presto","slug":"invalid-procedure-argument-6b5d3c","errorCode":"INVALID_PROCEDURE_ARGUMENT","errorMessage":"Procedure argument cannot be null: ","messagePattern":"Procedure argument cannot be null: ","errorType":"error_code","errorClass":"PrestoException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java","lineNumber":104,"sourceCode":"            throw new PrestoException(NOT_SUPPORTED, \"Procedures cannot be called within a transaction (use autocommit mode)\");\n        }\n\n        QualifiedObjectName procedureName = createQualifiedObjectName(session, call, call.getName(), metadata);\n        ConnectorId connectorId = getConnectorIdOrThrow(session, metadata, procedureName.getCatalogName(), call, catalogError);\n        BaseProcedure procedure = metadata.getProcedureRegistry().resolve(connectorId, toSchemaTableName(procedureName));\n        accessControl.checkCanCallProcedure(session.getRequiredTransactionId(), session.getIdentity(), session.getAccessControlContext(), procedureName);\n\n        Map<NodeRef<Parameter>, Expression> parameterLookup = parameterExtractor(call, parameters);\n        checkArgument(procedure instanceof Procedure, \"Must call an inner procedure in CallTask\");\n        Procedure innerProcedure = (Procedure) procedure;\n        Object[] values = extractParameterValuesInOrder(call, innerProcedure, metadata, session, parameterLookup);\n\n        // validate arguments\n        MethodType methodType = innerProcedure.getMethodHandle().type();\n        for (int i = 0; i < innerProcedure.getArguments().size(); i++) {\n            if ((values[i] == null) && methodType.parameterType(i).isPrimitive()) {\n                String name = innerProcedure.getArguments().get(i).getName();\n                throw new PrestoException(INVALID_PROCEDURE_ARGUMENT, \"Procedure argument cannot be null: \" + name);\n            }\n        }\n\n        // insert session argument\n        List<Object> arguments = new ArrayList<>();\n        Iterator<Object> valuesIterator = asList(values).iterator();\n        for (Class<?> type : methodType.parameterList()) {\n            if (ConnectorSession.class.isAssignableFrom(type)) {\n                arguments.add(session.toConnectorSession(connectorId));\n            }\n            else {\n                arguments.add(valuesIterator.next());\n            }\n        }\n\n        try {\n            innerProcedure.getMethodHandle().invokeWithArguments(arguments);\n        }","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java#L86-L122","documentation":"A generic argument guard in CallTask.execute that rejects NULL values passed for any procedure argument. Procedure signatures declare non-nullable parameters, so a null literal, unbound parameter marker, or null-producing expression for one of the arguments triggers this error.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/execution/CallTask.java:104 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Replace the null argument with a concrete non-null value","Use COALESCE(expr, default) so the argument can never evaluate to null","If nulls are legitimate for this procedure, ask the procedure author to accept and handle nullable arguments"],"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"}