*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
* (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
JunkFilter *j;
j = ExecInitJunkFilter(subplan->plan->targetlist,
- ExecGetTupType(subplan),
+ ExecGetResultType(subplan),
ExecAllocTableSlot(estate->es_tupleTable));
resultRelInfo->ri_junkFilter = j;
resultRelInfo++;
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
* 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
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;
-}
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
TupleDesc tupDesc;
outerPlan = outerPlanState(planstate);
- tupDesc = ExecGetTupType(outerPlan);
+ tupDesc = ExecGetResultType(outerPlan);
ExecAssignResultType(planstate, tupDesc, false);
}
TupleDesc tupDesc;
outerPlan = outerPlanState(scanstate);
- tupDesc = ExecGetTupType(outerPlan);
+ tupDesc = ExecGetResultType(outerPlan);
ExecAssignScanType(scanstate, tupDesc, false);
}
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
case JOIN_LEFT:
hjstate->hj_NullInnerTupleSlot =
ExecInitNullTupleSlot(estate,
- ExecGetTupType(innerPlanState(hjstate)));
+ ExecGetResultType(innerPlanState(hjstate)));
break;
default:
elog(ERROR, "ExecInitHashJoin: unsupported join type %d",
ExecAssignProjectionInfo(&hjstate->js.ps);
ExecSetSlotDescriptor(hjstate->hj_OuterTupleSlot,
- ExecGetTupType(outerPlanState(hjstate)),
+ ExecGetResultType(outerPlanState(hjstate)),
false);
/*
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
mergestate->mj_MarkedTupleSlot = ExecInitExtraTupleSlot(estate);
ExecSetSlotDescriptor(mergestate->mj_MarkedTupleSlot,
- ExecGetTupType(innerPlanState(mergestate)),
+ ExecGetResultType(innerPlanState(mergestate)),
false);
switch (node->join.jointype)
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
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
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
case JOIN_LEFT:
nlstate->nl_NullInnerTupleSlot =
ExecInitNullTupleSlot(estate,
- ExecGetTupType(innerPlanState(nlstate)));
+ ExecGetResultType(innerPlanState(nlstate)));
break;
default:
elog(ERROR, "ExecInitNestLoop: unsupported join type %d",
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
"calling tuplesort_begin");
outerNode = outerPlanState(node);
- tupDesc = ExecGetTupType(outerNode);
+ tupDesc = ExecGetResultType(outerNode);
ExtractSortKeys(plannode, &sortOperators, &attNums);
*/
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
*/
* 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 $
*
*-------------------------------------------------------------------------
*/
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