aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-10-17 23:50:57 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-10-17 23:50:57 +0000
commitaf59a0650b3eb27cc4ce919a66f40e9e218dd3ab (patch)
tree1e3ea2df9e73d744fad2f44bc08faae63a38f782
parent3e00496d88a2a0e894d34302d9504826bc86e510 (diff)
downloadpostgresql-af59a0650b3eb27cc4ce919a66f40e9e218dd3ab.tar.gz
postgresql-af59a0650b3eb27cc4ce919a66f40e9e218dd3ab.zip
Remove useless mark/restore support in hash index AM, per discussion.
(I'm leaving GiST/GIN cleanup to Teodor.)
-rw-r--r--src/backend/access/hash/hash.c60
-rw-r--r--src/include/access/hash.h10
2 files changed, 12 insertions, 58 deletions
diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c
index af4c4c058fd..a24350367fc 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 e00176d4519..6cd57ec00c5 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;