From e8137295b3fe8a38a579b402512a4442bc992250 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sat, 7 Jul 2018 11:17:04 +0200 Subject: [PATCH] Add separate error message for procedure does not exist While we probably don't want to split up all error messages into function and procedure variants, this one is a very prominent one, so it's helpful to be more specific here. --- src/backend/parser/parse_func.c | 35 ++++++++++++++----- .../regress/expected/create_procedure.out | 4 +-- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index abe1dbc521..c2feaf371f 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -542,14 +542,24 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, if (is_column) return NULL; - ereport(ERROR, - (errcode(ERRCODE_AMBIGUOUS_FUNCTION), - errmsg("function %s is not unique", - func_signature_string(funcname, nargs, argnames, - actual_arg_types)), - errhint("Could not choose a best candidate function. " - "You might need to add explicit type casts."), - parser_errposition(pstate, location))); + if (proc_call) + ereport(ERROR, + (errcode(ERRCODE_AMBIGUOUS_FUNCTION), + errmsg("procedure %s is not unique", + func_signature_string(funcname, nargs, argnames, + actual_arg_types)), + errhint("Could not choose a best candidate procedure. " + "You might need to add explicit type casts."), + parser_errposition(pstate, location))); + else + ereport(ERROR, + (errcode(ERRCODE_AMBIGUOUS_FUNCTION), + errmsg("function %s is not unique", + func_signature_string(funcname, nargs, argnames, + actual_arg_types)), + errhint("Could not choose a best candidate function. " + "You might need to add explicit type casts."), + parser_errposition(pstate, location))); } else { @@ -591,6 +601,15 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs, "after all regular arguments of the aggregate."), parser_errposition(pstate, location))); } + else if (proc_call) + ereport(ERROR, + (errcode(ERRCODE_UNDEFINED_FUNCTION), + errmsg("procedure %s does not exist", + func_signature_string(funcname, nargs, argnames, + actual_arg_types)), + errhint("No procedure matches the given name and argument types. " + "You might need to add explicit type casts."), + parser_errposition(pstate, location))); else ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION), diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out index 0acea7bd8c..90e8f3c5ff 100644 --- a/src/test/regress/expected/create_procedure.out +++ b/src/test/regress/expected/create_procedure.out @@ -1,8 +1,8 @@ CALL nonexistent(); -- error -ERROR: function nonexistent() does not exist +ERROR: procedure nonexistent() does not exist LINE 1: CALL nonexistent(); ^ -HINT: No function matches the given name and argument types. You might need to add explicit type casts. +HINT: No procedure matches the given name and argument types. You might need to add explicit type casts. CALL random(); -- error ERROR: random() is not a procedure LINE 1: CALL random(); -- 2.40.0