diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-19 03:55:01 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2000-06-19 03:55:01 +0000 |
commit | c590273fef87321b12ea56733d6bf49a66841431 (patch) | |
tree | d8f7577ae236027aa9ca91eb6e1930574c956d4b /src/backend/utils/adt/varchar.c | |
parent | a53dc5ee613e6b6aa692b79b60adda86e026971c (diff) | |
download | postgresql-c590273fef87321b12ea56733d6bf49a66841431.tar.gz postgresql-c590273fef87321b12ea56733d6bf49a66841431.zip |
Clean up bogosities in pg_opclass, pg_amop, pg_amproc. There are amproc
entries now for int8 and network hash indexes. int24_ops and int42_ops
are gone. pg_opclass no longer contains multiple entries claiming to be
the default opclass for the same datatype. opr_sanity regress test
extended to catch errors like these in the future.
Diffstat (limited to 'src/backend/utils/adt/varchar.c')
-rw-r--r-- | src/backend/utils/adt/varchar.c | 96 |
1 files changed, 11 insertions, 85 deletions
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 00e4c8ef39f..53c6ec41677 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -8,13 +8,14 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.65 2000/06/15 03:32:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.66 2000/06/19 03:54:28 tgl Exp $ * *------------------------------------------------------------------------- */ #include "postgres.h" +#include "access/hash.h" #include "catalog/pg_type.h" #include "utils/acl.h" #include "utils/builtins.h" @@ -797,94 +798,19 @@ varcharcmp(char *arg1, char *arg2) return (int32) (cmp); } -/***************************************************************************** - * Hash functions (modified from hashtext in access/hash/hashfunc.c) - *****************************************************************************/ - -uint32 -hashbpchar(struct varlena * key) +/* + * bpchar needs a specialized hash function because we want to ignore + * trailing blanks in comparisons. (varchar can use plain hashvarlena.) + */ +Datum +hashbpchar(PG_FUNCTION_ARGS) { - int keylen; + BpChar *key = PG_GETARG_BPCHAR_P(0); char *keydata; - uint32 n; - int loop; - - keydata = VARDATA(key); - keylen = bcTruelen((char *) key); - -#define HASHC n = *keydata++ + 65599 * n - - n = 0; - if (keylen > 0) - { - loop = (keylen + 8 - 1) >> 3; - - switch (keylen & (8 - 1)) - { - case 0: - do - { /* All fall throughs */ - HASHC; - case 7: - HASHC; - case 6: - HASHC; - case 5: - HASHC; - case 4: - HASHC; - case 3: - HASHC; - case 2: - HASHC; - case 1: - HASHC; - } while (--loop); - } - } - return n; -} - -uint32 -hashvarchar(struct varlena * key) -{ int keylen; - char *keydata; - uint32 n; - int loop; keydata = VARDATA(key); - keylen = VARSIZE(key) - VARHDRSZ; - -#define HASHC n = *keydata++ + 65599 * n + keylen = bcTruelen((char *) key); - n = 0; - if (keylen > 0) - { - loop = (keylen + 8 - 1) >> 3; - - switch (keylen & (8 - 1)) - { - case 0: - do - { /* All fall throughs */ - HASHC; - case 7: - HASHC; - case 6: - HASHC; - case 5: - HASHC; - case 4: - HASHC; - case 3: - HASHC; - case 2: - HASHC; - case 1: - HASHC; - } while (--loop); - } - } - return n; + return hash_any(keydata, keylen); } |