diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index af4c4c058fd7cda8690ff38417ad730a28a805e4..a24350367fc1a4f868d63191e7cdc7919cfd54bc 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.105 2008/09/15 18:43:41 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.106 2008/10/17 23:50:57 tgl Exp $ * * NOTES * This file contains only the public interface routines. @@ -345,10 +345,9 @@ hashbeginscan(PG_FUNCTION_ARGS) so = (HashScanOpaque) palloc(sizeof(HashScanOpaqueData)); so->hashso_bucket_valid = false; so->hashso_bucket_blkno = 0; - so->hashso_curbuf = so->hashso_mrkbuf = InvalidBuffer; - /* set positions invalid (this will cause _hash_first call) */ + so->hashso_curbuf = InvalidBuffer; + /* set position invalid (this will cause _hash_first call) */ ItemPointerSetInvalid(&(so->hashso_curpos)); - ItemPointerSetInvalid(&(so->hashso_mrkpos)); scan->opaque = so; @@ -372,23 +371,18 @@ hashrescan(PG_FUNCTION_ARGS) /* if we are called from beginscan, so is still NULL */ if (so) { - /* release any pins we still hold */ + /* release any pin we still hold */ if (BufferIsValid(so->hashso_curbuf)) _hash_dropbuf(rel, so->hashso_curbuf); so->hashso_curbuf = InvalidBuffer; - if (BufferIsValid(so->hashso_mrkbuf)) - _hash_dropbuf(rel, so->hashso_mrkbuf); - so->hashso_mrkbuf = InvalidBuffer; - /* release lock on bucket, too */ if (so->hashso_bucket_blkno) _hash_droplock(rel, so->hashso_bucket_blkno, HASH_SHARE); so->hashso_bucket_blkno = 0; - /* set positions invalid (this will cause _hash_first call) */ + /* set position invalid (this will cause _hash_first call) */ ItemPointerSetInvalid(&(so->hashso_curpos)); - ItemPointerSetInvalid(&(so->hashso_mrkpos)); } /* Update scan key, if a new one is given */ @@ -417,15 +411,11 @@ hashendscan(PG_FUNCTION_ARGS) /* don't need scan registered anymore */ _hash_dropscan(scan); - /* release any pins we still hold */ + /* release any pin we still hold */ if (BufferIsValid(so->hashso_curbuf)) _hash_dropbuf(rel, so->hashso_curbuf); so->hashso_curbuf = InvalidBuffer; - if (BufferIsValid(so->hashso_mrkbuf)) - _hash_dropbuf(rel, so->hashso_mrkbuf); - so->hashso_mrkbuf = InvalidBuffer; - /* release lock on bucket, too */ if (so->hashso_bucket_blkno) _hash_droplock(rel, so->hashso_bucket_blkno, HASH_SHARE); @@ -443,24 +433,7 @@ hashendscan(PG_FUNCTION_ARGS) Datum hashmarkpos(PG_FUNCTION_ARGS) { - IndexScanDesc scan = (IndexScanDesc) PG_GETARG_POINTER(0); - HashScanOpaque so = (HashScanOpaque) scan->opaque; - Relation rel = scan->indexRelation; - - /* release pin on old marked data, if any */ - if (BufferIsValid(so->hashso_mrkbuf)) - _hash_dropbuf(rel, so->hashso_mrkbuf); - so->hashso_mrkbuf = InvalidBuffer; - ItemPointerSetInvalid(&(so->hashso_mrkpos)); - - /* bump pin count on current buffer and copy to marked buffer */ - if (ItemPointerIsValid(&(so->hashso_curpos))) - { - IncrBufferRefCount(so->hashso_curbuf); - so->hashso_mrkbuf = so->hashso_curbuf; - so->hashso_mrkpos = so->hashso_curpos; - } - + elog(ERROR, "hash does not support mark/restore"); PG_RETURN_VOID(); } @@ -470,24 +443,7 @@ hashmarkpos(PG_FUNCTION_ARGS) Datum hashrestrpos(PG_FUNCTION_ARGS) { - IndexScanDesc scan = (IndexScanDesc) PG_GETARG_POINTER(0); - HashScanOpaque so = (HashScanOpaque) scan->opaque; - Relation rel = scan->indexRelation; - - /* release pin on current data, if any */ - if (BufferIsValid(so->hashso_curbuf)) - _hash_dropbuf(rel, so->hashso_curbuf); - so->hashso_curbuf = InvalidBuffer; - ItemPointerSetInvalid(&(so->hashso_curpos)); - - /* bump pin count on marked buffer and copy to current buffer */ - if (ItemPointerIsValid(&(so->hashso_mrkpos))) - { - IncrBufferRefCount(so->hashso_mrkbuf); - so->hashso_curbuf = so->hashso_mrkbuf; - so->hashso_curpos = so->hashso_mrkpos; - } - + elog(ERROR, "hash does not support mark/restore"); PG_RETURN_VOID(); } diff --git a/src/include/access/hash.h b/src/include/access/hash.h index e00176d4519ae1f25b8f4edcd6703d2018f89475..6cd57ec00c5b6950fe495cd37efe0dd9dc17b7cf 100644 --- a/src/include/access/hash.h +++ b/src/include/access/hash.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.90 2008/09/15 18:43:41 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.91 2008/10/17 23:50:57 tgl Exp $ * * NOTES * modeled after Margo Seltzer's hash implementation for unix. @@ -92,17 +92,15 @@ typedef struct HashScanOpaqueData BlockNumber hashso_bucket_blkno; /* - * We also want to remember which buffers we're currently examining in the - * scan. We keep these buffers pinned (but not locked) across hashgettuple + * We also want to remember which buffer we're currently examining in the + * scan. We keep the buffer pinned (but not locked) across hashgettuple * calls, in order to avoid doing a ReadBuffer() for every tuple in the * index. */ Buffer hashso_curbuf; - Buffer hashso_mrkbuf; - /* Current and marked position of the scan */ + /* Current position of the scan */ ItemPointerData hashso_curpos; - ItemPointerData hashso_mrkpos; } HashScanOpaqueData; typedef HashScanOpaqueData *HashScanOpaque;