• D
    Fix subquery pullup to wrap a PlaceHolderVar around the entire RowExpr · ac66ca53
    Dhanashree Kashid 提交于
    commit 2bdd765f79df947b46a8b5a22e3b993b58cd6d32
    Author: Tom Lane <tgl@sss.pgh.pa.us>
    Date:   Wed Sep 2 17:52:33 2009 +0000
    
        Fix subquery pullup to wrap a PlaceHolderVar around the entire RowExpr
        that's generated for a whole-row Var referencing the subquery, when the
        subquery is in the nullable side of an outer join.  The previous coding
        instead put PlaceHolderVars around the elements of the RowExpr.  The effect
        was that when the outer join made the subquery outputs go to null, the
        whole-row Var produced ROW(NULL,NULL,...) rather than just NULL.  There
        are arguments afoot about whether those things ought to be semantically
        indistinguishable, but for the moment they are not entirely so, and the
        planner needs to take care that its machinations preserve the difference.
        Per bug #5025.
    
        Making this feasible required refactoring ResolveNew() to allow more caller
        control over what is substituted for a Var.  I chose to make ResolveNew()
        a wrapper around a new general-purpose function replace_rte_variables().
        I also fixed the ancient bogosity that ResolveNew might fail to set
        a query's hasSubLinks field after inserting a SubLink in it.  Although
        all current callers make sure that happens anyway, we've had bugs of that
        sort before, and it seemed like a good time to install a proper solution.
    
        Back-patch to 8.4.  The problem can be demonstrated clear back to 8.0,
        but the fix would be too invasive in earlier branches; not to mention
        that people may be depending on the subtly-incorrect behavior.  The
        8.4 series is new enough that fixing this probably won't cause complaints,
        but it might in older branches.  Also, 8.4 shows the incorrect behavior
        in more cases than older branches do, because it is able to flatten
        subqueries in more cases.
    Signed-off-by: NEkta Khanna <ekhanna@pivotal.io>
    ac66ca53
prepjointree.c 67.1 KB