Hi all,

I'm working on implementing unique hash indexes. I've got most of the
code finished, but I'm stumped on how to implement the remainder. Since
I'm still a newbie to the Postgres code, so any pointers or help would
be much appreciated.

I've been able to borrow a fair amount of code from the btree unique
index implementation (where possible, I've tried to share code between
hash and btree, I'll do this more in the final patch). The problem I'm
having is the implementation of the _hash_check_unique() function. This
is passed the Buffer which corresponds to the first page in the bucket
chain for the key, the hash item itself, the ScanKey, as well as the
index Relation and the heap Relation. Given this, how does one scan
through the hash bucket to determine if a matching key is present?

I can probably figure out the MVCC related code (ensuring that the
tuples we find aren't dead, etc); what I can't figure out is the basic
methodology required to search for matching tuples in the hash bucket.

Any help would be appreciated. I've attached the current development
version of the patch, if that is of any help.

Cheers,

Neil

-- 
Neil Conway <neilconway@rogers.com>
PGP Key ID: DB3C29FC
12 Mar 2002 01:41:05 -0500
Neil Conway <nconway@klamath.dyndns.org>
help with a patch
Neil Conway wrote:
> Hi all,
> 
> I'm working on implementing unique hash indexes. I've got most of the
> code finished, but I'm stumped on how to implement the remainder. Since
> I'm still a newbie to the Postgres code, so any pointers or help would
> be much appreciated.
> 
> I've been able to borrow a fair amount of code from the btree unique
> index implementation (where possible, I've tried to share code between
> hash and btree, I'll do this more in the final patch). The problem I'm
> having is the implementation of the _hash_check_unique() function. This
> is passed the Buffer which corresponds to the first page in the bucket
> chain for the key, the hash item itself, the ScanKey, as well as the
> index Relation and the heap Relation. Given this, how does one scan
> through the hash bucket to determine if a matching key is present?
> 
> I can probably figure out the MVCC related code (ensuring that the
> tuples we find aren't dead, etc); what I can't figure out is the basic
> methodology required to search for matching tuples in the hash bucket.
> 
> Any help would be appreciated. I've attached the current development
> version of the patch, if that is of any help.

I am not totally sure of the question, but for hash don't you have to
spin through the entire bucket and test each one.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Thu, 14 Mar 2002 16:43:05 -0500 (EST)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: help with a patch