*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.114 2009/11/01 21:25:25 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.115 2009/11/01 22:30:54 tgl Exp $
*
* NOTES
* This file contains only the public interface routines.
IndexTuple itup;
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum));
- if (ItemPointerEquals(&scan->xs_ctup.t_self, &itup->t_tid))
+ if (ItemPointerEquals(&(so->hashso_heappos), &(itup->t_tid)))
break;
}
if (offnum > maxoffnum)
if (BufferIsValid(so->hashso_curbuf))
_hash_chgbufaccess(rel, so->hashso_curbuf, HASH_READ, HASH_NOLOCK);
+ /* Return current heap TID on success */
+ scan->xs_ctup.t_self = so->hashso_heappos;
+
PG_RETURN_BOOL(res);
}
if (add_tuple)
{
/* Note we mark the tuple ID as requiring recheck */
- tbm_add_tuples(tbm, &scan->xs_ctup.t_self, 1, true);
+ tbm_add_tuples(tbm, &(so->hashso_heappos), 1, true);
ntids++;
}
so->hashso_curbuf = InvalidBuffer;
/* set position invalid (this will cause _hash_first call) */
ItemPointerSetInvalid(&(so->hashso_curpos));
+ ItemPointerSetInvalid(&(so->hashso_heappos));
scan->opaque = so;
/* set position invalid (this will cause _hash_first call) */
ItemPointerSetInvalid(&(so->hashso_curpos));
+ ItemPointerSetInvalid(&(so->hashso_heappos));
}
/* Update scan key, if a new one is given */
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/hash/hashsearch.c,v 1.57 2009/06/11 14:48:53 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/hash/hashsearch.c,v 1.58 2009/11/01 22:30:54 tgl Exp $
*
*-------------------------------------------------------------------------
*/
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum));
- scan->xs_ctup.t_self = itup->t_tid;
+ so->hashso_heappos = itup->t_tid;
return true;
}
_hash_checkpage(rel, buf, LH_BUCKET_PAGE | LH_OVERFLOW_PAGE);
page = BufferGetPage(buf);
itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, offnum));
- scan->xs_ctup.t_self = itup->t_tid;
+ so->hashso_heappos = itup->t_tid;
return true;
}
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.94 2009/11/01 21:25:25 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.95 2009/11/01 22:30:54 tgl Exp $
*
* NOTES
* modeled after Margo Seltzer's hash implementation for unix.
*/
Buffer hashso_curbuf;
- /* Current position of the scan */
+ /* Current position of the scan, as an index TID */
ItemPointerData hashso_curpos;
+
+ /* Current position of the scan, as a heap TID */
+ ItemPointerData hashso_heappos;
} HashScanOpaqueData;
typedef HashScanOpaqueData *HashScanOpaque;