Commit ffb087ce authored by Bruce Momjian's avatar Bruce Momjian

This patch refactors execTuples.c in two ways.

Neil Conway
parent 8f61184d
......@@ -15,7 +15,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/executor/execTuples.c,v 1.73 2003/11/29 19:51:48 pgsql Exp $
* $PostgreSQL: pgsql/src/backend/executor/execTuples.c,v 1.74 2003/12/01 23:09:02 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -112,6 +112,8 @@
#include "executor/executor.h"
#include "utils/lsyscache.h"
static TupleDesc ExecTypeFromTLInternal(List *targetList,
bool hasoid, bool skipjunk);
/* ----------------------------------------------------------------
* tuple table create/delete functions
......@@ -469,13 +471,6 @@ ExecSetSlotDescriptorIsNew(TupleTableSlot *slot, /* slot to change */
* is used for initializing special-purpose slots.
* --------------------------------
*/
#define INIT_SLOT_DEFS \
TupleTable tupleTable; \
TupleTableSlot* slot
#define INIT_SLOT_ALLOC \
tupleTable = (TupleTable) estate->es_tupleTable; \
slot = ExecAllocTableSlot(tupleTable);
/* ----------------
* ExecInitResultTupleSlot
......@@ -484,9 +479,7 @@ ExecSetSlotDescriptorIsNew(TupleTableSlot *slot, /* slot to change */
void
ExecInitResultTupleSlot(EState *estate, PlanState *planstate)
{
INIT_SLOT_DEFS;
INIT_SLOT_ALLOC;
planstate->ps_ResultTupleSlot = slot;
planstate->ps_ResultTupleSlot = ExecAllocTableSlot(estate->es_tupleTable);
}
/* ----------------
......@@ -496,9 +489,7 @@ ExecInitResultTupleSlot(EState *estate, PlanState *planstate)
void
ExecInitScanTupleSlot(EState *estate, ScanState *scanstate)
{
INIT_SLOT_DEFS;
INIT_SLOT_ALLOC;
scanstate->ss_ScanTupleSlot = slot;
scanstate->ss_ScanTupleSlot = ExecAllocTableSlot(estate->es_tupleTable);
}
/* ----------------
......@@ -508,9 +499,7 @@ ExecInitScanTupleSlot(EState *estate, ScanState *scanstate)
TupleTableSlot *
ExecInitExtraTupleSlot(EState *estate)
{
INIT_SLOT_DEFS;
INIT_SLOT_ALLOC;
return slot;
return ExecAllocTableSlot(estate->es_tupleTable);
}
/* ----------------
......@@ -560,34 +549,7 @@ ExecInitNullTupleSlot(EState *estate, TupleDesc tupType)
TupleDesc
ExecTypeFromTL(List *targetList, bool hasoid)
{
TupleDesc typeInfo;
List *tlitem;
int len;
/*
* allocate a new typeInfo
*/
len = ExecTargetListLength(targetList);
typeInfo = CreateTemplateTupleDesc(len, hasoid);
/*
* scan list, generate type info for each entry
*/
foreach(tlitem, targetList)
{
TargetEntry *tle = lfirst(tlitem);
Resdom *resdom = tle->resdom;
TupleDescInitEntry(typeInfo,
resdom->resno,
resdom->resname,
resdom->restype,
resdom->restypmod,
0,
false);
}
return typeInfo;
return ExecTypeFromTLInternal(targetList, hasoid, false);
}
/* ----------------------------------------------------------------
......@@ -599,30 +561,32 @@ ExecTypeFromTL(List *targetList, bool hasoid)
TupleDesc
ExecCleanTypeFromTL(List *targetList, bool hasoid)
{
TupleDesc typeInfo;
List *tlitem;
int len;
int cleanresno;
return ExecTypeFromTLInternal(targetList, hasoid, true);
}
/*
* allocate a new typeInfo
*/
len = ExecCleanTargetListLength(targetList);
static TupleDesc
ExecTypeFromTLInternal(List *targetList, bool hasoid, bool skipjunk)
{
TupleDesc typeInfo;
List *l;
int len;
int cur_resno = 1;
if (skipjunk)
len = ExecCleanTargetListLength(targetList);
else
len = ExecTargetListLength(targetList);
typeInfo = CreateTemplateTupleDesc(len, hasoid);
/*
* scan list, generate type info for each entry
*/
cleanresno = 1;
foreach(tlitem, targetList)
foreach(l, targetList)
{
TargetEntry *tle = lfirst(tlitem);
Resdom *resdom = tle->resdom;
TargetEntry *tle = lfirst(l);
Resdom *resdom = tle->resdom;
if (resdom->resjunk)
if (skipjunk && resdom->resjunk)
continue;
TupleDescInitEntry(typeInfo,
cleanresno++,
cur_resno++,
resdom->resname,
resdom->restype,
resdom->restypmod,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment