aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2019-02-05 15:08:53 +0100
committerPeter Eisentraut <peter@eisentraut.org>2019-02-07 08:25:47 +0100
commitcd5afd8175e256fa401cf440d06304df746abe62 (patch)
treea29f6d3f0937e9892b8475879e6d736ea6697143 /src
parent793c736d69091d385a967b2740cc93cfb7a7b076 (diff)
downloadpostgresql-cd5afd8175e256fa401cf440d06304df746abe62.tar.gz
postgresql-cd5afd8175e256fa401cf440d06304df746abe62.zip
Add collation assignment to CALL statement
Otherwise functions that require collation information will not have it if they are called in arguments to a CALL statement. Reported-by: Jean-Marc Voillequin <Jean-Marc.Voillequin@moodys.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/1EC8157EB499BF459A516ADCF135ADCE39FFAC54%40LON-WGMSX712.ad.moodys.net
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/analyze.c2
-rw-r--r--src/test/regress/expected/create_procedure.out7
-rw-r--r--src/test/regress/sql/create_procedure.sql11
3 files changed, 20 insertions, 0 deletions
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 7f5773582b0..e3544efb6fe 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -2636,6 +2636,8 @@ transformCallStmt(ParseState *pstate, CallStmt *stmt)
true,
stmt->funccall->location);
+ assign_expr_collations(pstate, node);
+
stmt->funcexpr = castNode(FuncExpr, node);
result = makeNode(Query);
diff --git a/src/test/regress/expected/create_procedure.out b/src/test/regress/expected/create_procedure.out
index 5b9b83839cf..211a42cefa0 100644
--- a/src/test/regress/expected/create_procedure.out
+++ b/src/test/regress/expected/create_procedure.out
@@ -139,6 +139,13 @@ AS $$
SELECT NULL::int;
$$;
CALL ptest6(1, 2);
+-- collation assignment
+CREATE PROCEDURE ptest7(a text, b text)
+LANGUAGE SQL
+AS $$
+SELECT a = b;
+$$;
+CALL ptest7(least('a', 'b'), 'a');
-- various error cases
CALL version(); -- error: not a procedure
ERROR: version() is not a procedure
diff --git a/src/test/regress/sql/create_procedure.sql b/src/test/regress/sql/create_procedure.sql
index b64293ed669..89b96d580ff 100644
--- a/src/test/regress/sql/create_procedure.sql
+++ b/src/test/regress/sql/create_procedure.sql
@@ -101,6 +101,17 @@ $$;
CALL ptest6(1, 2);
+-- collation assignment
+
+CREATE PROCEDURE ptest7(a text, b text)
+LANGUAGE SQL
+AS $$
+SELECT a = b;
+$$;
+
+CALL ptest7(least('a', 'b'), 'a');
+
+
-- various error cases
CALL version(); -- error: not a procedure