git.postgresql.org Git - postgresql.git/commit

git projects / postgresql.git / commit
? search:
summary | shortlog | log | commit | commitdiff | tree
(parent: 8dd1511) | patch
Improve the handling of result type coercions in SQL functions.
Wed, 8 Jan 2020 16:07:53 +0000 (11:07 -0500)
Wed, 8 Jan 2020 16:07:59 +0000 (11:07 -0500)
commit 913bbd88dc6b859c70ebb48107b38d693c4c6673
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
doc/src/sgml/xfunc.sgml diff | blob | blame | history
src/backend/catalog/pg_proc.c diff | blob | blame | history
src/backend/executor/functions.c diff | blob | blame | history
src/backend/optimizer/util/clauses.c diff | blob | blame | history
src/include/executor/functions.h diff | blob | blame | history
src/test/regress/expected/rangefuncs.out diff | blob | blame | history
src/test/regress/sql/rangefuncs.sql diff | blob | blame | history
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /