From: Bruce Momjian Date: Mon, 1 Dec 2003 23:09:02 +0000 (+0000) Subject: This patch refactors execTuples.c in two ways. X-Git-Tag: REL8_0_0BETA1~1587 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ffb087ced5df5ca1252513935ccdb50736d56244;p=postgresql This patch refactors execTuples.c in two ways. Neil Conway --- diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 5ad2cc08a9..e7e02fdb6d 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -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,