Commit 65c2d427 authored by Tom Lane's avatar Tom Lane

Preliminary cleanup for hash index code (doesn't attack the locking problem

yet).  Fix a couple of bugs that would only appear if multiple bitmap pages
are used, including a buffer reference leak and incorrect computation of bit
indexes.  Get rid of 'overflow address' concept, which accomplished nothing
except obfuscating the code and creating a risk of failure due to limited
range of offset field.  Rename some misleadingly-named fields and routines,
and improve documentation.
parent eaeb8621
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashinsert.c,v 1.27 2003/08/04 02:39:57 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/access/hash/hashinsert.c,v 1.28 2003/09/01 20:26:34 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -155,7 +155,7 @@ _hash_insertonpg(Relation rel, ...@@ -155,7 +155,7 @@ _hash_insertonpg(Relation rel,
* page with enough room. allocate a new overflow page. * page with enough room. allocate a new overflow page.
*/ */
do_expand = true; do_expand = true;
ovflbuf = _hash_addovflpage(rel, &metabuf, buf); ovflbuf = _hash_addovflpage(rel, metabuf, buf);
_hash_relbuf(rel, buf, HASH_WRITE); _hash_relbuf(rel, buf, HASH_WRITE);
buf = ovflbuf; buf = ovflbuf;
page = BufferGetPage(buf); page = BufferGetPage(buf);
...@@ -186,18 +186,15 @@ _hash_insertonpg(Relation rel, ...@@ -186,18 +186,15 @@ _hash_insertonpg(Relation rel,
* access type just for a moment to allow greater accessibility to * access type just for a moment to allow greater accessibility to
* the metapage. * the metapage.
*/ */
metap = (HashMetaPage) _hash_chgbufaccess(rel, &metabuf, _hash_chgbufaccess(rel, metabuf, HASH_READ, HASH_WRITE);
HASH_READ, HASH_WRITE); metap->hashm_ntuples += 1;
metap->hashm_nkeys += 1; _hash_chgbufaccess(rel, metabuf, HASH_WRITE, HASH_READ);
metap = (HashMetaPage) _hash_chgbufaccess(rel, &metabuf,
HASH_WRITE, HASH_READ);
} }
_hash_wrtbuf(rel, buf); _hash_wrtbuf(rel, buf);
if (do_expand || if (do_expand ||
(metap->hashm_nkeys / (metap->hashm_maxbucket + 1)) (metap->hashm_ntuples / (metap->hashm_maxbucket + 1))
> metap->hashm_ffactor) > metap->hashm_ffactor)
_hash_expandtable(rel, metabuf); _hash_expandtable(rel, metabuf);
_hash_relbuf(rel, metabuf, HASH_READ); _hash_relbuf(rel, metabuf, HASH_READ);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment