Keep the contents of ItemPointerData not the pointers so that
authorHiroshi Inoue
Sat, 29 Sep 2001 07:57:06 +0000 (07:57 +0000)
committerHiroshi Inoue
Sat, 29 Sep 2001 07:57:06 +0000 (07:57 +0000)
per tuple memory context doesn't discard them.

src/backend/executor/nodeTidscan.c
src/include/nodes/execnodes.h

index 29ad660800c7283861381527ceadde51dfe9aa1e..404ed6a2153d36913b47b1cccbb408d7da032d8b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/executor/nodeTidscan.c,v 1.18 2001/06/22 19:16:22 wieck Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/executor/nodeTidscan.c,v 1.19 2001/09/29 07:57:06 inoue Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "access/heapam.h"
 #include "parser/parsetree.h"
 
-static int TidListCreate(List *, ExprContext *, ItemPointer *);
+static int TidListCreate(List *, ExprContext *, ItemPointerData []);
 static TupleTableSlot *TidNext(TidScan *node);
 
 static int
-TidListCreate(List *evalList, ExprContext *econtext, ItemPointer *tidList)
+TidListCreate(List *evalList, ExprContext *econtext, ItemPointerData tidList[])
 {
    List       *lst;
    ItemPointer itemptr;
@@ -49,7 +49,7 @@ TidListCreate(List *evalList, ExprContext *econtext, ItemPointer *tidList)
                                                      NULL));
        if (!isNull && itemptr && ItemPointerIsValid(itemptr))
        {
-           tidList[numTids] = itemptr;
+           tidList[numTids] = *itemptr;
            numTids++;
        }
    }
@@ -80,8 +80,7 @@ TidNext(TidScan *node)
 
    bool        bBackward;
    int         tidNumber;
-   ItemPointer *tidList,
-               itemptr;
+   ItemPointerData* tidList;
 
    /*
     * extract necessary information from tid scan node
@@ -146,14 +145,10 @@ TidNext(TidScan *node)
    {
        bool        slot_is_valid = false;
 
-       itemptr = tidList[tidstate->tss_TidPtr];
        tuple->t_datamcxt = NULL;
        tuple->t_data = NULL;
-       if (itemptr)
-       {
-           tuple->t_self = *(itemptr);
-           heap_fetch(heapRelation, snapshot, tuple, &buffer, NULL);
-       }
+       tuple->t_self = tidList[tidstate->tss_TidPtr];
+       heap_fetch(heapRelation, snapshot, tuple, &buffer, NULL);
        if (tuple->t_data != NULL)
        {
            bool        prev_matches = false;
@@ -187,7 +182,7 @@ TidNext(TidScan *node)
            for (prev_tid = 0; prev_tid < tidstate->tss_TidPtr;
                 prev_tid++)
            {
-               if (ItemPointerEquals(tidList[prev_tid], &tuple->t_self))
+               if (ItemPointerEquals(&tidList[prev_tid], &tuple->t_self))
                {
                    prev_matches = true;
                    break;
@@ -254,7 +249,7 @@ ExecTidReScan(TidScan *node, ExprContext *exprCtxt, Plan *parent)
 {
    EState     *estate;
    TidScanState *tidstate;
-   ItemPointer *tidList;
+   ItemPointerData* tidList;
 
    tidstate = node->tidstate;
    estate = node->scan.plan.state;
@@ -381,7 +376,7 @@ ExecInitTidScan(TidScan *node, EState *estate, Plan *parent)
 {
    TidScanState *tidstate;
    CommonScanState *scanstate;
-   ItemPointer *tidList;
+   ItemPointerData*    tidList;
    int         numTids;
    int         tidPtr;
    List       *rangeTable;
@@ -436,7 +431,7 @@ ExecInitTidScan(TidScan *node, EState *estate, Plan *parent)
    /*
     * get the tid node information
     */
-   tidList = (ItemPointer *) palloc(length(node->tideval) * sizeof(ItemPointer));
+   tidList = (ItemPointerData *) palloc(length(node->tideval) * sizeof(ItemPointerData));
    numTids = 0;
    if (!node->needRescan)
        numTids = TidListCreate(node->tideval, scanstate->cstate.cs_ExprContext, tidList);
index 4e1bc683d5be5b7ff50926d2d8ce1431180f6d13..ef880505c18583ceb9907be3dac9f53874c306f8 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: execnodes.h,v 1.62 2001/07/16 05:07:00 tgl Exp $
+ * $Id: execnodes.h,v 1.63 2001/09/29 07:57:04 inoue Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -461,7 +461,7 @@ typedef struct TidScanState
    int         tss_NumTids;
    int         tss_TidPtr;
    int         tss_MarkTidPtr;
-   ItemPointer *tss_TidList;
+   ItemPointerData*    tss_TidList;
    HeapTupleData tss_htup;
 } TidScanState;