Get rid of ExecAssignResultTypeFromOuterPlan() and make all plan node types
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 23 Nov 2005 20:27:58 +0000 (20:27 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 23 Nov 2005 20:27:58 +0000 (20:27 +0000)
generate their output tuple descriptors from their target lists (ie, using
ExecAssignResultTypeFromTL()).  We long ago fixed things so that all node
types have minimally valid tlists, so there's no longer any good reason to
have two different ways of doing it.  This change is needed to fix bug
reported by Hayden James: the fix of 2005-11-03 to emit the correct column
names after optimizing away a SubqueryScan node didn't work if the new
top-level plan node used ExecAssignResultTypeFromOuterPlan to generate its
tupdesc, since the next plan node down won't have the correct column labels.

src/backend/executor/execUtils.c
src/backend/executor/nodeHash.c
src/backend/executor/nodeLimit.c
src/backend/executor/nodeMaterial.c
src/backend/executor/nodeSetOp.c
src/backend/executor/nodeSort.c
src/backend/executor/nodeUnique.c
src/include/executor/executor.h

index 5ab4a5e98fcb6e3dfddbb2c393598bd48e77c6aa..5221624fc7dd197cff1d8951dfb3473fc5343638 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.128 2005/11/22 18:17:10 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/execUtils.c,v 1.129 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -435,22 +435,6 @@ ExecAssignResultType(PlanState *planstate,
    ExecSetSlotDescriptor(slot, tupDesc, shouldFree);
 }
 
-/* ----------------
- *     ExecAssignResultTypeFromOuterPlan
- * ----------------
- */
-void
-ExecAssignResultTypeFromOuterPlan(PlanState *planstate)
-{
-   PlanState  *outerPlan;
-   TupleDesc   tupDesc;
-
-   outerPlan = outerPlanState(planstate);
-   tupDesc = ExecGetResultType(outerPlan);
-
-   ExecAssignResultType(planstate, tupDesc, false);
-}
-
 /* ----------------
  *     ExecAssignResultTypeFromTL
  * ----------------
index c843c2448c05a79f0990aec9f9ffd99cc850560b..82f05855e668d9f8cf93116d891be96d67f0ec33 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.98 2005/11/22 18:17:10 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.99 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -164,7 +164,7 @@ ExecInitHash(Hash *node, EState *estate)
     * initialize tuple type. no need to initialize projection info because
     * this node doesn't do projections
     */
-   ExecAssignResultTypeFromOuterPlan(&hashstate->ps);
+   ExecAssignResultTypeFromTL(&hashstate->ps);
    hashstate->ps.ps_ProjInfo = NULL;
 
    return hashstate;
index 462db0aee9d15e09d8d6c450db4b39208978a2b8..f9397dc475c0239737db3ea29d65e5c5511f1771 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.22 2005/10/15 02:49:17 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.23 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -327,7 +327,7 @@ ExecInitLimit(Limit *node, EState *estate)
     * limit nodes do no projections, so initialize projection info for this
     * node appropriately
     */
-   ExecAssignResultTypeFromOuterPlan(&limitstate->ps);
+   ExecAssignResultTypeFromTL(&limitstate->ps);
    limitstate->ps.ps_ProjInfo = NULL;
 
    return limitstate;
index 750f355b0ee09cd81ded509ebf9f371236d4844e..558797c380dc779fc327a660a6f483c8817191a7 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeMaterial.c,v 1.50 2005/10/15 02:49:17 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeMaterial.c,v 1.51 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -195,7 +195,7 @@ ExecInitMaterial(Material *node, EState *estate)
     * initialize tuple type.  no need to initialize projection info because
     * this node doesn't do projections.
     */
-   ExecAssignResultTypeFromOuterPlan(&matstate->ss.ps);
+   ExecAssignResultTypeFromTL(&matstate->ss.ps);
    ExecAssignScanTypeFromOuterPlan(&matstate->ss);
    matstate->ss.ps.ps_ProjInfo = NULL;
 
index a5ca58354c6a8f4b04c37421cee78c3e0a6e83e3..2a7d254287058fcb5b73ac96f7575b1fb61ec984 100644 (file)
@@ -21,7 +21,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeSetOp.c,v 1.18 2005/10/15 02:49:17 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeSetOp.c,v 1.19 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -258,7 +258,7 @@ ExecInitSetOp(SetOp *node, EState *estate)
     * setop nodes do no projections, so initialize projection info for this
     * node appropriately
     */
-   ExecAssignResultTypeFromOuterPlan(&setopstate->ps);
+   ExecAssignResultTypeFromTL(&setopstate->ps);
    setopstate->ps.ps_ProjInfo = NULL;
 
    /*
index d3e4fb5e0b3eb4e5bc97263e29c1cccac0fc926a..a67326c60b2f03eaae88e0bb697f619535a90538 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeSort.c,v 1.51 2005/10/15 02:49:17 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeSort.c,v 1.52 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -193,7 +193,7 @@ ExecInitSort(Sort *node, EState *estate)
     * initialize tuple type.  no need to initialize projection info because
     * this node doesn't do projections.
     */
-   ExecAssignResultTypeFromOuterPlan(&sortstate->ss.ps);
+   ExecAssignResultTypeFromTL(&sortstate->ss.ps);
    ExecAssignScanTypeFromOuterPlan(&sortstate->ss);
    sortstate->ss.ps.ps_ProjInfo = NULL;
 
index 47cc4afe558fb05da07b218042a2cfadff8bebfb..0c033502c39365420d4543cc09b5c512b54bd617 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/executor/nodeUnique.c,v 1.49 2005/11/22 18:17:10 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/executor/nodeUnique.c,v 1.50 2005/11/23 20:27:57 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -150,7 +150,7 @@ ExecInitUnique(Unique *node, EState *estate)
     * unique nodes do no projections, so initialize projection info for this
     * node appropriately
     */
-   ExecAssignResultTypeFromOuterPlan(&uniquestate->ps);
+   ExecAssignResultTypeFromTL(&uniquestate->ps);
    uniquestate->ps.ps_ProjInfo = NULL;
 
    /*
index 31228e114ba918cd28186968e59f873776687d7a..39c76c60aa5e1c6eff04ce04906178a2dd3563dc 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.120 2005/10/15 02:49:44 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/executor/executor.h,v 1.121 2005/11/23 20:27:58 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -218,7 +218,6 @@ extern ExprContext *MakePerTupleExprContext(EState *estate);
 extern void ExecAssignExprContext(EState *estate, PlanState *planstate);
 extern void ExecAssignResultType(PlanState *planstate,
                     TupleDesc tupDesc, bool shouldFree);
-extern void ExecAssignResultTypeFromOuterPlan(PlanState *planstate);
 extern void ExecAssignResultTypeFromTL(PlanState *planstate);
 extern TupleDesc ExecGetResultType(PlanState *planstate);
 extern ProjectionInfo *ExecBuildProjectionInfo(List *targetList,