aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/varchar.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-06-19 03:55:01 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-06-19 03:55:01 +0000
commitc590273fef87321b12ea56733d6bf49a66841431 (patch)
treed8f7577ae236027aa9ca91eb6e1930574c956d4b /src/backend/utils/adt/varchar.c
parenta53dc5ee613e6b6aa692b79b60adda86e026971c (diff)
downloadpostgresql-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.c96
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);
}