pgsql: Improve the handling of result type coercions in SQL functions.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Improve the handling of result type coercions in SQL functions.
Date: 2020-01-08 16:08:27
Message-ID: E1ipDsh-0001nS-2d@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Improve the handling of result type coercions in SQL functions.

Use the parser's standard type coercion machinery to convert the
output column(s) of a SQL function's final SELECT or RETURNING
to the type(s) they should have according to the function's declared
result type. We'll allow any case where an assignment-level
coercion is available. Previously, we failed unless the required
coercion was a binary-compatible one (and the documentation ignored
this, falsely claiming that the types must match exactly).

Notably, the coercion now accounts for typmods, so that cases where
a SQL function is declared to return a composite type whose columns
are typmod-constrained now behave as one would expect. Arguably
this aspect is a bug fix, but the overall behavioral change here
seems too large to consider back-patching.

A nice side-effect is that functions can now be inlined in a
few cases where we previously failed to do so because of type
mismatches.

Discussion: https://postgr.es/m/18929.1574895430@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/913bbd88dc6b859c70ebb48107b38d693c4c6673

Modified Files
--------------
doc/src/sgml/xfunc.sgml | 44 ++-
src/backend/catalog/pg_proc.c | 11 +-
src/backend/executor/functions.c | 508 ++++++++++++++++++-------------
src/backend/optimizer/util/clauses.c | 131 +++-----
src/include/executor/functions.h | 8 +-
src/test/regress/expected/rangefuncs.out | 210 ++++++++++++-
src/test/regress/sql/rangefuncs.sql | 76 ++++-
7 files changed, 656 insertions(+), 332 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2020-01-08 17:34:18 pgsql: Reimplement nullification of walsender timestamp
Previous Message Stephen Frost 2020-01-08 15:57:33 pgsql: Improve GSSAPI Encryption startup comment in libpq