From 913bbd88dc6b859c70ebb48107b38d693c4c6673 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 8 Jan 2020 11:07:53 -0500 Subject: 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 --- src/include/executor/functions.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/include') diff --git a/src/include/executor/functions.h b/src/include/executor/functions.h index 25e28519df9..cb13428a5a8 100644 --- a/src/include/executor/functions.h +++ b/src/include/executor/functions.h @@ -31,10 +31,10 @@ extern void sql_fn_parser_setup(struct ParseState *pstate, extern void check_sql_fn_statements(List *queryTreeList); -extern bool check_sql_fn_retval(Oid func_id, Oid rettype, - List *queryTreeList, - bool *modifyTargetList, - JunkFilter **junkFilter); +extern bool check_sql_fn_retval(List *queryTreeList, + Oid rettype, TupleDesc rettupdesc, + bool insertDroppedCols, + List **resultTargetList); extern DestReceiver *CreateSQLFunctionDestReceiver(void); -- cgit v1.2.3