pgsql: Teach parser to transform "x IS [NOT] DISTINCT FROM NULL" to a N

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Teach parser to transform "x IS [NOT] DISTINCT FROM NULL" to a N
Date: 2016-07-28 21:23:37
Message-ID: E1bSsmH-0003SW-Cp@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Teach parser to transform "x IS [NOT] DISTINCT FROM NULL" to a NullTest.

Now that we've nailed down the principle that NullTest with !argisrow
is fully equivalent to SQL's IS [NOT] DISTINCT FROM NULL, let's teach
the parser about it. This produces a slightly more compact parse tree
and is much more amenable to optimization than a DistinctExpr, since
the planner knows a good deal about NullTest and next to nothing about
DistinctExpr.

I'm not sure that there are all that many queries in the wild that could
be improved by this, but at least one source of such cases is the patch
just made to postgres_fdw to emit IS [NOT] DISTINCT FROM NULL when
IS [NOT] NULL isn't semantically correct.

No back-patch, since to the extent that this does affect planning results,
it might be considered undesirable plan destabilization.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/8d19d0e139238cdcb3f1f7e1adc4ff959562822f

Modified Files
--------------
src/backend/nodes/outfuncs.c | 4 +++
src/backend/parser/gram.y | 8 ++---
src/backend/parser/parse_expr.c | 68 +++++++++++++++++++++++++++++++++++------
src/include/nodes/parsenodes.h | 1 +
4 files changed, 65 insertions(+), 16 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2016-07-28 22:58:30 pgsql: Guard against empty buffer in gets_fromFile()'s check for a newl
Previous Message Peter Eisentraut 2016-07-28 20:34:51 pgsql: Message style improvements