]> granicus.if.org Git - postgresql/commitdiff
This patch refactors execTuples.c in two ways.
authorBruce Momjian <bruce@momjian.us>
Mon, 1 Dec 2003 23:09:02 +0000 (23:09 +0000)
committerBruce Momjian <bruce@momjian.us>
Mon, 1 Dec 2003 23:09:02 +0000 (23:09 +0000)
Neil Conway

src/backend/executor/execTuples.c

index 5ad2cc08a9274e7e4bf5a3379a35d0a99497d7d2..e7e02fdb6d87ad52d9075484df2572ac8b209b8c 100644 (file)
@@ -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 $
  *
  *-------------------------------------------------------------------------
  */
 #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,