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 67d0691a00fba1f8c334cee188aa42216ccc3911..84e6617aab8cf7443eefbcc0028a27050e81c8d3 100644 (file)
@@ -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 bd4ec10db807e1a0904def6a30ed4925c811799a..f561597eee96371dc23f4430ed085a6650427d0d 100644 (file)
@@ -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;