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
pull/38/head
Peter Eisentraut 7 years ago
parent 793c736d69
commit cd5afd8175
  1. 2
      src/backend/parser/analyze.c
  2. 7
      src/test/regress/expected/create_procedure.out
  3. 11
      src/test/regress/sql/create_procedure.sql

@ -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);

@ -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

@ -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

Loading…
Cancel
Save