Remove useless mark/restore support in hash index AM, per discussion.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 17 Oct 2008 23:50:57 +0000 (23:50 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 17 Oct 2008 23:50:57 +0000 (23:50 +0000)
(I'm leaving GiST/GIN cleanup to Teodor.)

src/backend/access/hash/hash.c
src/include/access/hash.h

index af4c4c058fd7cda8690ff38417ad730a28a805e4..a24350367fc1a4f868d63191e7cdc7919cfd54bc 100644 (file)
@@ -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();
 }
 
index e00176d4519ae1f25b8f4edcd6703d2018f89475..6cd57ec00c5b6950fe495cd37efe0dd9dc17b7cf 100644 (file)
@@ -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;