summaryrefslogtreecommitdiff
path: root/src/backend/access/hash/hashpage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/access/hash/hashpage.c')
-rw-r--r--src/backend/access/hash/hashpage.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c
index e5e77c94b6..23d8e0bdf6 100644
--- a/src/backend/access/hash/hashpage.c
+++ b/src/backend/access/hash/hashpage.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.39 2003/09/01 20:26:34 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.40 2003/09/02 02:18:38 tgl Exp $
*
* NOTES
* Postgres hash pages look like ordinary relation pages. The opaque
@@ -143,7 +143,7 @@ _hash_metapinit(Relation rel)
*/
for (i = 0; i <= 1; i++)
{
- buf = _hash_getbuf(rel, BUCKET_TO_BLKNO(i), HASH_WRITE);
+ buf = _hash_getbuf(rel, BUCKET_TO_BLKNO(metap, i), HASH_WRITE);
pg = BufferGetPage(buf);
_hash_pageinit(pg, BufferGetPageSize(buf));
pageopaque = (HashPageOpaque) PageGetSpecialPointer(pg);
@@ -456,6 +456,8 @@ _hash_splitbucket(Relation rel,
Buffer ovflbuf;
BlockNumber oblkno;
BlockNumber nblkno;
+ BlockNumber start_oblkno;
+ BlockNumber start_nblkno;
bool null;
Datum datum;
HashItem hitem;
@@ -475,8 +477,10 @@ _hash_splitbucket(Relation rel,
_hash_checkpage((Page) metap, LH_META_PAGE);
/* get the buffers & pages */
- oblkno = BUCKET_TO_BLKNO(obucket);
- nblkno = BUCKET_TO_BLKNO(nbucket);
+ start_oblkno = BUCKET_TO_BLKNO(metap, obucket);
+ start_nblkno = BUCKET_TO_BLKNO(metap, nbucket);
+ oblkno = start_oblkno;
+ nblkno = start_nblkno;
obuf = _hash_getbuf(rel, oblkno, HASH_WRITE);
nbuf = _hash_getbuf(rel, nblkno, HASH_WRITE);
opage = BufferGetPage(obuf);
@@ -571,7 +575,7 @@ _hash_splitbucket(Relation rel,
*/
_hash_wrtbuf(rel, obuf);
_hash_wrtbuf(rel, nbuf);
- _hash_squeezebucket(rel, metap, obucket);
+ _hash_squeezebucket(rel, obucket, start_oblkno);
return;
}
}
@@ -639,7 +643,7 @@ _hash_splitbucket(Relation rel,
if (!BlockNumberIsValid(oblkno))
{
_hash_wrtbuf(rel, nbuf);
- _hash_squeezebucket(rel, metap, obucket);
+ _hash_squeezebucket(rel, obucket, start_oblkno);
return;
}