aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-09-11 16:24:34 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-09-11 16:24:43 -0400
commitb8060e41b5994a3cffb3ececaab10ed39b8d5dfd (patch)
treeded5584672b1560be319add3165d12df8c6ea92d /src
parent3612019a7925012445af29b9ea7af84bd68a5932 (diff)
downloadpostgresql-b8060e41b5994a3cffb3ececaab10ed39b8d5dfd.tar.gz
postgresql-b8060e41b5994a3cffb3ececaab10ed39b8d5dfd.zip
Prefer argument name over "$n" for the refname of a plpgsql argument.
If a function argument has a name, use that as the "refname" of the PLpgSQL_datum representing the argument, instead of $n as before. This allows better error messages in some cases. Pavel Stehule, reviewed by Jeevan Chalke Discussion: https://postgr.es/m/CAFj8pRB9GyU2U1Sb2ssgP26DZ_yq-FYDfpvUvGQ=k4R=yOPVjg@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/pl/plpgsql/src/pl_comp.c11
-rw-r--r--src/test/regress/expected/plpgsql.out11
-rw-r--r--src/test/regress/sql/plpgsql.sql9
3 files changed, 28 insertions, 3 deletions
diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c
index e9d7ef55e97..9931ee038fe 100644
--- a/src/pl/plpgsql/src/pl_comp.c
+++ b/src/pl/plpgsql/src/pl_comp.c
@@ -433,9 +433,14 @@ do_compile(FunctionCallInfo fcinfo,
errmsg("PL/pgSQL functions cannot accept type %s",
format_type_be(argtypeid))));
- /* Build variable and add to datum list */
- argvariable = plpgsql_build_variable(buf, 0,
- argdtype, false);
+ /*
+ * Build variable and add to datum list. If there's a name
+ * for the argument, use that as refname, else use $n name.
+ */
+ argvariable = plpgsql_build_variable((argnames &&
+ argnames[i][0] != '\0') ?
+ argnames[i] : buf,
+ 0, argdtype, false);
if (argvariable->dtype == PLPGSQL_DTYPE_VAR)
{
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out
index 71099969a47..7d3e9225bb2 100644
--- a/src/test/regress/expected/plpgsql.out
+++ b/src/test/regress/expected/plpgsql.out
@@ -6029,3 +6029,14 @@ SELECT * FROM list_partitioned_table() AS t;
2
(2 rows)
+--
+-- Check argument name is used instead of $n in error message
+--
+CREATE FUNCTION fx(x WSlot) RETURNS void AS $$
+BEGIN
+ GET DIAGNOSTICS x = ROW_COUNT;
+ RETURN;
+END; $$ LANGUAGE plpgsql;
+ERROR: "x" is not a scalar variable
+LINE 3: GET DIAGNOSTICS x = ROW_COUNT;
+ ^
diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql
index 771d68282ee..6c9399696bf 100644
--- a/src/test/regress/sql/plpgsql.sql
+++ b/src/test/regress/sql/plpgsql.sql
@@ -4811,3 +4811,12 @@ BEGIN
END; $$ LANGUAGE plpgsql;
SELECT * FROM list_partitioned_table() AS t;
+
+--
+-- Check argument name is used instead of $n in error message
+--
+CREATE FUNCTION fx(x WSlot) RETURNS void AS $$
+BEGIN
+ GET DIAGNOSTICS x = ROW_COUNT;
+ RETURN;
+END; $$ LANGUAGE plpgsql;