multirange constructor strictness

Peter Eisentraut <peter.eisentraut@enterprisedb.com>

From: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
To: PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2021-04-21T20:56:54Z
Lists: pgsql-hackers
The multirange constructors created in makeMultirangeConstructors() are:

multirange_constructor0 -> not strict
multirange_constructor1 -> strict
multirange_constructor2 -> not strict

And both multirange_constructor1 and multirange_constructor2 contain 
code like

/*
  * These checks should be guaranteed by our signature, but let's do them
  * just in case.
  */
if (PG_ARGISNULL(0))
     ereport(ERROR,
             (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
              errmsg("multirange values cannot contain NULL members")));

In case of multirange_constructor2 the "should be guaranteed" comment is 
not actually true right now.  In case of multirange_constructor1, maybe 
this should be downgraded to an elog or assert or just removed.

Is there a reason why we can't make them all three strict or all not 
strict?  (Obviously, it doesn't matter for multirange_constructor0.)  Is 
the fact that multirange_constructor2 is variadic the issue?  Maybe at 
least some more comments would be helpful.



Commits

  1. Mark multirange_constructor0() and multirange_constructor2() strict