From 53b2e00491a2ea3016b5cd66498e58883dde1785 Mon Sep 17 00:00:00 2001 From: Hiroshi Inoue <inoue@tpf.co.jp> Date: Sat, 29 Sep 2001 07:57:06 +0000 Subject: [PATCH] Keep the contents of ItemPointerData not the pointers so that per tuple memory context doesn't discard them. --- src/backend/executor/nodeTidscan.c | 27 +++++++++++---------------- src/include/nodes/execnodes.h | 4 ++-- 2 files changed, 13 insertions(+), 18 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); diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 4e1bc683d5b..ef880505c18 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -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; -- GitLab