pgsql: Allow functions that return sets of tuples to return simple NULL

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Allow functions that return sets of tuples to return simple NULL
Date: 2016-07-27 01:34:18
Message-ID: E1bSDjm-0002E7-Nh@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Allow functions that return sets of tuples to return simple NULLs.

ExecMakeTableFunctionResult(), which is used in SELECT FROM function(...)
cases, formerly treated a simple NULL output from a function that both
returnsSet and returnsTuple as a violation of the SRF protocol. What seems
better is to treat a NULL output as equivalent to ROW(NULL,NULL,...).
Without this, cases such as SELECT FROM unnest(...) on an array of
composite are vulnerable to unexpected and not-very-helpful failures.
Old code comments here suggested an alternative of just ignoring
simple-NULL outputs, but that doesn't seem very principled.

This change had been hung up for a long time due to uncertainty about
how much we wanted to buy into the equivalence of simple NULL and
ROW(NULL,NULL,...). I think that's been mostly resolved by the discussion
around bug #14235, so let's go ahead and do it.

Per bug #7808 from Joe Van Dyk. Although this is a pretty old report,
fixing it smells a bit more like a new feature than a bug fix, and the
lack of other similar complaints suggests that we shouldn't take much risk
of destabilization by back-patching. (Maybe that could be revisited once
this patch has withstood some field usage.)

Andrew Gierth and Tom Lane

Report: <E1TurJE-0006Es-TK(at)wrigleys(dot)postgresql(dot)org>

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/d8411a6c8b6e5f74b362ef2496723f7f88593737

Modified Files
--------------
src/backend/executor/execQual.c | 125 ++++++++++++++++---------------
src/test/regress/expected/rangefuncs.out | 30 ++++++++
src/test/regress/sql/rangefuncs.sql | 11 +++
3 files changed, 106 insertions(+), 60 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2016-07-27 14:25:10 pgsql: Fix thinko in copyParamList.
Previous Message Bruce Momjian 2016-07-26 21:48:17 Re: pgsql: doc: mention dependency on collation libraries