pgsql: Improve the handling of result type coercions in SQL functions.
От | Tom Lane |
---|---|
Тема | pgsql: Improve the handling of result type coercions in SQL functions. |
Дата | |
Msg-id | E1ipDsh-0001nS-2d@gemulon.postgresql.org обсуждение исходный текст |
Список | 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(-)
В списке pgsql-committers по дате отправления: