aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeTidscan.c
diff options
context:
space:
mode:
authorHiroshi Inoue <inoue@tpf.co.jp>2001-09-29 07:57:06 +0000
committerHiroshi Inoue <inoue@tpf.co.jp>2001-09-29 07:57:06 +0000
commit53b2e00491a2ea3016b5cd66498e58883dde1785 (patch)
treeba07b498da3382756a8504e05f90b2cc5df21709 /src/backend/executor/nodeTidscan.c
parent793bcc67b2a3d2c540dc1baa5a6a3808dadbb961 (diff)
downloadpostgresql-53b2e00491a2ea3016b5cd66498e58883dde1785.tar.gz
postgresql-53b2e00491a2ea3016b5cd66498e58883dde1785.zip
Keep the contents of ItemPointerData not the pointers so that
per tuple memory context doesn't discard them.
Diffstat (limited to 'src/backend/executor/nodeTidscan.c')
-rw-r--r--src/backend/executor/nodeTidscan.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c
index 29ad660800c..404ed6a2153 100644
--- a/src/backend/executor/nodeTidscan.c
+++ b/src/backend/executor/nodeTidscan.c
@@ -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 $
*
*-------------------------------------------------------------------------
*/
@@ -29,11 +29,11 @@
#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);