pgsql: Make UtilityContainsQuery recurse until it finds a non-utility Q

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Make UtilityContainsQuery recurse until it finds a non-utility Q
Date: 2012-06-28 03:19:00
Message-ID: E1Sk5G0-0004xN-Ut@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Make UtilityContainsQuery recurse until it finds a non-utility Query.

The callers of UtilityContainsQuery want it to return a non-utility Query
if it returns anything at all. However, since we made CREATE TABLE
AS/SELECT INTO into a utility command instead of a variant of SELECT,
a command like "EXPLAIN SELECT INTO" results in two nested utility
statements. So what we need UtilityContainsQuery to do is drill down
to the bottom non-utility Query.

I had thought of this possibility in setrefs.c, and fixed it there by
looping around the UtilityContainsQuery call; but overlooked that the call
sites in plancache.c have a similar issue. In those cases it's
notationally inconvenient to provide an external loop, so let's redefine
UtilityContainsQuery as recursing down to a non-utility Query instead.

Noted by Rushabh Lathia. This is a somewhat cleaned-up version of his
proposed patch.

Branch
------
master

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

Modified Files
--------------
src/backend/optimizer/plan/setrefs.c | 2 +-
src/backend/tcop/utility.c | 26 ++++++++++++++++++++------
2 files changed, 21 insertions(+), 7 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2012-06-28 12:16:04 pgsql: Add missing space in event_source GUC description.
Previous Message Peter Eisentraut 2012-06-27 18:23:11 pgsql: Fix install program detection