• Tom Lane's avatar
    Make UtilityContainsQuery recurse until it finds a non-utility Query. · bde689f8
    Tom Lane authored
    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.
    bde689f8
utility.c 58 KB