This patch refactors execTuples.c in two ways.
Neil Conway
This commit is contained in:
parent
8f61184db7
commit
ffb087ced5
@ -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
|
||||
*/
|
||||
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);
|
||||
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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user