From 94a3c60324465f98850b60f548c1ea481ab4e52f Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 5 May 2003 17:57:47 +0000
Subject: [PATCH] Ditch ExecGetTupType() in favor of the much simpler
 ExecGetResultType(), which does the same thing.  Perhaps at one time there
 was a reason to allow plan nodes to store their result types in different
 places, but AFAICT that's been unnecessary for a good while.

---
 src/backend/executor/execMain.c      |   6 +-
 src/backend/executor/execProcnode.c  | 181 +--------------------------
 src/backend/executor/execUtils.c     |   6 +-
 src/backend/executor/nodeHashjoin.c  |   6 +-
 src/backend/executor/nodeMergejoin.c |  12 +-
 src/backend/executor/nodeNestloop.c  |   4 +-
 src/backend/executor/nodeSort.c      |   9 +-
 src/include/executor/executor.h      |   3 +-
 8 files changed, 21 insertions(+), 206 deletions(-)

diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index 485f1e03fa0..d70b3379217 100644
--- a/src/backend/executor/execMain.c
+++ b/src/backend/executor/execMain.c
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.205 2003/03/27 16:51:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.206 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -634,7 +634,7 @@ InitPlan(QueryDesc *queryDesc)
 	 * (this is especially important if we are creating a relation with
 	 * "SELECT INTO")
 	 */
-	tupType = ExecGetTupType(planstate);
+	tupType = ExecGetResultType(planstate);
 
 	/*
 	 * Initialize the junk filter if needed.  SELECT and INSERT queries need a
@@ -713,7 +713,7 @@ InitPlan(QueryDesc *queryDesc)
 					JunkFilter *j;
 
 					j = ExecInitJunkFilter(subplan->plan->targetlist,
-										   ExecGetTupType(subplan),
+										   ExecGetResultType(subplan),
 							  ExecAllocTableSlot(estate->es_tupleTable));
 					resultRelInfo->ri_junkFilter = j;
 					resultRelInfo++;
diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c
index 8d2bc0f8bd9..f8dbb019c5d 100644
--- a/src/backend/executor/execProcnode.c
+++ b/src/backend/executor/execProcnode.c
@@ -12,7 +12,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.35 2003/02/09 00:30:39 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execProcnode.c,v 1.36 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -22,7 +22,6 @@
  *		ExecInitNode	-		initialize a plan node and its subplans
  *		ExecProcNode	-		get a tuple by executing the plan node
  *		ExecEndNode		-		shut down a plan node and its subplans
- *		ExecGetTupType	-		get result tuple type of a plan node
  *
  *	 NOTES
  *		This used to be three files.  It is now all combined into
@@ -602,181 +601,3 @@ ExecEndNode(PlanState *node)
 			break;
 	}
 }
-
-
-/* ----------------------------------------------------------------
- *		ExecGetTupType
- *
- *		this gives you the tuple descriptor for tuples returned
- *		by this node.  I really wish I could ditch this routine,
- *		but since not all nodes store their type info in the same
- *		place, we have to do something special for each node type.
- *
- * ----------------------------------------------------------------
- */
-TupleDesc
-ExecGetTupType(PlanState *node)
-{
-	TupleTableSlot *slot;
-
-	if (node == NULL)
-		return NULL;
-
-	switch (nodeTag(node))
-	{
-		case T_ResultState:
-			{
-				ResultState *resstate = (ResultState *) node;
-
-				slot = resstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_AppendState:
-			{
-				AppendState *appendstate = (AppendState *) node;
-
-				slot = appendstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_SeqScanState:
-			{
-				SeqScanState *scanstate = (SeqScanState *) node;
-
-				slot = scanstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_IndexScanState:
-			{
-				IndexScanState *scanstate = (IndexScanState *) node;
-
-				slot = scanstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_TidScanState:
-			{
-				TidScanState *scanstate = (TidScanState *) node;
-
-				slot = scanstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_SubqueryScanState:
-			{
-				SubqueryScanState *scanstate = (SubqueryScanState *) node;
-
-				slot = scanstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_FunctionScanState:
-			{
-				FunctionScanState *scanstate = (FunctionScanState *) node;
-
-				slot = scanstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_NestLoopState:
-			{
-				NestLoopState *nlstate = (NestLoopState *) node;
-
-				slot = nlstate->js.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_MergeJoinState:
-			{
-				MergeJoinState *mergestate = (MergeJoinState *) node;
-
-				slot = mergestate->js.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_HashJoinState:
-			{
-				HashJoinState *hashjoinstate = (HashJoinState *) node;
-
-				slot = hashjoinstate->js.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_MaterialState:
-			{
-				MaterialState *matstate = (MaterialState *) node;
-
-				slot = matstate->ss.ss_ScanTupleSlot;
-			}
-			break;
-
-		case T_SortState:
-			{
-				SortState  *sortstate = (SortState *) node;
-
-				slot = sortstate->ss.ss_ScanTupleSlot;
-			}
-			break;
-
-		case T_GroupState:
-			{
-				GroupState *grpstate = (GroupState *) node;
-
-				slot = grpstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_AggState:
-			{
-				AggState   *aggstate = (AggState *) node;
-
-				slot = aggstate->ss.ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_UniqueState:
-			{
-				UniqueState *uniquestate = (UniqueState *) node;
-
-				slot = uniquestate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_HashState:
-			{
-				HashState  *hashstate = (HashState *) node;
-
-				slot = hashstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_SetOpState:
-			{
-				SetOpState *setopstate = (SetOpState *) node;
-
-				slot = setopstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		case T_LimitState:
-			{
-				LimitState *limitstate = (LimitState *) node;
-
-				slot = limitstate->ps.ps_ResultTupleSlot;
-			}
-			break;
-
-		default:
-
-			/*
-			 * should never get here
-			 */
-			elog(ERROR, "ExecGetTupType: node type %d unsupported",
-				 (int) nodeTag(node));
-			return NULL;
-	}
-
-	return slot->ttc_tupleDescriptor;
-}
diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c
index 5341dbd347c..c06d951f91e 100644
--- a/src/backend/executor/execUtils.c
+++ b/src/backend/executor/execUtils.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.98 2003/02/09 06:56:27 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.99 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -413,7 +413,7 @@ ExecAssignResultTypeFromOuterPlan(PlanState *planstate)
 	TupleDesc	tupDesc;
 
 	outerPlan = outerPlanState(planstate);
-	tupDesc = ExecGetTupType(outerPlan);
+	tupDesc = ExecGetResultType(outerPlan);
 
 	ExecAssignResultType(planstate, tupDesc, false);
 }
@@ -606,7 +606,7 @@ ExecAssignScanTypeFromOuterPlan(ScanState *scanstate)
 	TupleDesc	tupDesc;
 
 	outerPlan = outerPlanState(scanstate);
-	tupDesc = ExecGetTupType(outerPlan);
+	tupDesc = ExecGetResultType(outerPlan);
 
 	ExecAssignScanType(scanstate, tupDesc, false);
 }
diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c
index 4bc1671801f..000063a8b7f 100644
--- a/src/backend/executor/nodeHashjoin.c
+++ b/src/backend/executor/nodeHashjoin.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.49 2003/03/27 16:51:27 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.50 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -374,7 +374,7 @@ ExecInitHashJoin(HashJoin *node, EState *estate)
 		case JOIN_LEFT:
 			hjstate->hj_NullInnerTupleSlot =
 				ExecInitNullTupleSlot(estate,
-									  ExecGetTupType(innerPlanState(hjstate)));
+									  ExecGetResultType(innerPlanState(hjstate)));
 			break;
 		default:
 			elog(ERROR, "ExecInitHashJoin: unsupported join type %d",
@@ -402,7 +402,7 @@ ExecInitHashJoin(HashJoin *node, EState *estate)
 	ExecAssignProjectionInfo(&hjstate->js.ps);
 
 	ExecSetSlotDescriptor(hjstate->hj_OuterTupleSlot,
-						  ExecGetTupType(outerPlanState(hjstate)),
+						  ExecGetResultType(outerPlanState(hjstate)),
 						  false);
 
 	/*
diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c
index d5dc7f421aa..864008dd17c 100644
--- a/src/backend/executor/nodeMergejoin.c
+++ b/src/backend/executor/nodeMergejoin.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v 1.56 2003/01/20 18:54:45 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v 1.57 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1453,7 +1453,7 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate)
 
 	mergestate->mj_MarkedTupleSlot = ExecInitExtraTupleSlot(estate);
 	ExecSetSlotDescriptor(mergestate->mj_MarkedTupleSlot,
-						  ExecGetTupType(innerPlanState(mergestate)),
+						  ExecGetResultType(innerPlanState(mergestate)),
 						  false);
 
 	switch (node->join.jointype)
@@ -1464,12 +1464,12 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate)
 		case JOIN_LEFT:
 			mergestate->mj_NullInnerTupleSlot =
 				ExecInitNullTupleSlot(estate,
-							   ExecGetTupType(innerPlanState(mergestate)));
+							   ExecGetResultType(innerPlanState(mergestate)));
 			break;
 		case JOIN_RIGHT:
 			mergestate->mj_NullOuterTupleSlot =
 				ExecInitNullTupleSlot(estate,
-							   ExecGetTupType(outerPlanState(mergestate)));
+							   ExecGetResultType(outerPlanState(mergestate)));
 
 			/*
 			 * Can't handle right or full join with non-nil extra
@@ -1481,10 +1481,10 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate)
 		case JOIN_FULL:
 			mergestate->mj_NullOuterTupleSlot =
 				ExecInitNullTupleSlot(estate,
-							   ExecGetTupType(outerPlanState(mergestate)));
+							   ExecGetResultType(outerPlanState(mergestate)));
 			mergestate->mj_NullInnerTupleSlot =
 				ExecInitNullTupleSlot(estate,
-							   ExecGetTupType(innerPlanState(mergestate)));
+							   ExecGetResultType(innerPlanState(mergestate)));
 
 			/*
 			 * Can't handle right or full join with non-nil extra
diff --git a/src/backend/executor/nodeNestloop.c b/src/backend/executor/nodeNestloop.c
index 8ccc0392057..bddce76b437 100644
--- a/src/backend/executor/nodeNestloop.c
+++ b/src/backend/executor/nodeNestloop.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeNestloop.c,v 1.31 2003/01/27 20:51:48 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeNestloop.c,v 1.32 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -330,7 +330,7 @@ ExecInitNestLoop(NestLoop *node, EState *estate)
 		case JOIN_LEFT:
 			nlstate->nl_NullInnerTupleSlot =
 				ExecInitNullTupleSlot(estate,
-							   ExecGetTupType(innerPlanState(nlstate)));
+							   ExecGetResultType(innerPlanState(nlstate)));
 			break;
 		default:
 			elog(ERROR, "ExecInitNestLoop: unsupported join type %d",
diff --git a/src/backend/executor/nodeSort.c b/src/backend/executor/nodeSort.c
index a37583241fb..2be31ce09e8 100644
--- a/src/backend/executor/nodeSort.c
+++ b/src/backend/executor/nodeSort.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.42 2002/12/15 16:17:46 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeSort.c,v 1.43 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -137,7 +137,7 @@ ExecSort(SortState *node)
 				   "calling tuplesort_begin");
 
 		outerNode = outerPlanState(node);
-		tupDesc = ExecGetTupType(outerNode);
+		tupDesc = ExecGetResultType(outerNode);
 
 		ExtractSortKeys(plannode, &sortOperators, &attNums);
 
@@ -173,11 +173,6 @@ ExecSort(SortState *node)
 		 */
 		estate->es_direction = dir;
 
-		/*
-		 * make sure the tuple descriptor is up to date (is this needed?)
-		 */
-		ExecAssignResultType(&node->ss.ps, tupDesc, false);
-
 		/*
 		 * finally set the sorted flag to true
 		 */
diff --git a/src/include/executor/executor.h b/src/include/executor/executor.h
index 40a696e2976..9693435977d 100644
--- a/src/include/executor/executor.h
+++ b/src/include/executor/executor.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: executor.h,v 1.91 2003/03/11 19:40:23 tgl Exp $
+ * $Id: executor.h,v 1.92 2003/05/05 17:57:47 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -101,7 +101,6 @@ extern PlanState *ExecInitNode(Plan *node, EState *estate);
 extern TupleTableSlot *ExecProcNode(PlanState *node);
 extern int	ExecCountSlotsNode(Plan *node);
 extern void ExecEndNode(PlanState *node);
-extern TupleDesc ExecGetTupType(PlanState *node);
 
 /*
  * prototypes from functions in execQual.c
-- 
GitLab