diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2019-02-05 15:08:53 +0100 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2019-02-07 08:25:47 +0100 |
commit | cd5afd8175e256fa401cf440d06304df746abe62 (patch) | |
tree | a29f6d3f0937e9892b8475879e6d736ea6697143 /src | |
parent | 793c736d69091d385a967b2740cc93cfb7a7b076 (diff) | |
download | postgresql-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.c | 2 | ||||
-rw-r--r-- | src/test/regress/expected/create_procedure.out | 7 | ||||
-rw-r--r-- | src/test/regress/sql/create_procedure.sql | 11 |
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 |