This patch refactors execTuples.c in two ways.
authorBruce Momjian
Mon, 1 Dec 2003 23:09:02 +0000 (23:09 +0000)
committerBruce Momjian
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,