diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/common/tupdesc.c | 4 | ||||
-rw-r--r-- | src/backend/access/hash/hashfunc.c | 75 | ||||
-rw-r--r-- | src/backend/access/nbtree/nbtcompare.c | 26 | ||||
-rw-r--r-- | src/backend/access/transam/xid.c | 6 | ||||
-rw-r--r-- | src/backend/bootstrap/bootparse.y | 56 | ||||
-rw-r--r-- | src/backend/bootstrap/bootstrap.c | 110 | ||||
-rw-r--r-- | src/backend/commands/creatinh.c | 4 | ||||
-rw-r--r-- | src/backend/commands/dbcommands.c | 4 | ||||
-rw-r--r-- | src/backend/executor/execQual.c | 6 | ||||
-rw-r--r-- | src/backend/parser/parse_expr.c | 4 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteRemove.c | 13 | ||||
-rw-r--r-- | src/backend/rewrite/rewriteSupport.c | 4 | ||||
-rw-r--r-- | src/backend/tcop/fastpath.c | 4 | ||||
-rw-r--r-- | src/backend/utils/adt/char.c | 322 | ||||
-rw-r--r-- | src/backend/utils/adt/like.c | 54 | ||||
-rw-r--r-- | src/backend/utils/adt/regexp.c | 107 | ||||
-rw-r--r-- | src/backend/utils/adt/regproc.c | 4 | ||||
-rw-r--r-- | src/backend/utils/cache/catcache.c | 4 |
18 files changed, 700 insertions, 107 deletions
diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index 719fe3528f4..968846385f1 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.37 1998/03/30 17:22:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.38 1998/04/07 18:09:44 momjian Exp $ * * NOTES * some of the executor utility code such as "ExecTypeFromTL" should be @@ -317,7 +317,7 @@ TupleDescInitEntry(TupleDesc desc, * * Note: in the special case of * - * create EMP (name = text, manager = EMP) + * create EMP (name = char16, manager = EMP) * * RelationNameCreateHeapRelation() calls BuildDesc() which * calls this routine and since EMP does not exist yet, the diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index 37b7722b8c1..cef3a087e95 100644 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.7 1998/03/30 17:22:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.8 1998/04/07 18:09:46 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -133,8 +133,6 @@ hashoid(Oid key) return ((uint32) ~key); } -#define PRIME1 37 -#define PRIME2 1048583 uint32 hashchar(char key) @@ -142,8 +140,12 @@ hashchar(char key) int len; uint32 h; - h = 0; len = sizeof(char); + +#define PRIME1 37 +#define PRIME2 1048583 + + h = 0; /* Convert char to integer */ h = h * PRIME1 ^ (key - ' '); h %= PRIME2; @@ -151,6 +153,55 @@ hashchar(char key) return (h); } +uint32 +hashchar2(uint16 intkey) +{ + uint32 h; + int len; + char *key = (char *) &intkey; + + h = 0; + len = sizeof(uint16); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + +uint32 +hashchar4(uint32 intkey) +{ + uint32 h; + int len; + char *key = (char *) &intkey; + + h = 0; + len = sizeof(uint32); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + +uint32 +hashchar8(char *key) +{ + uint32 h; + int len; + + h = 0; + len = sizeof(char8); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} uint32 hashname(NameData *n) @@ -172,6 +223,22 @@ hashname(NameData *n) } +uint32 +hashchar16(char *key) +{ + uint32 h; + int len; + + h = 0; + len = sizeof(char16); + /* Convert string to integer */ + while (len--) + h = h * PRIME1 ^ (*key++ - ' '); + h %= PRIME2; + + return (h); +} + /* * (Comment from the original db3 hashing code: ) diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c index 85b673ebba6..a674de9c726 100644 --- a/src/backend/access/nbtree/nbtcompare.c +++ b/src/backend/access/nbtree/nbtcompare.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.14 1998/03/30 17:22:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.15 1998/04/07 18:09:51 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -102,6 +102,30 @@ btcharcmp(char a, char b) } int32 +btchar2cmp(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2)); +} + +int32 +btchar4cmp(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4)); +} + +int32 +btchar8cmp(char *a, char *b) +{ + return (strncmp(a, b, 8)); +} + +int32 +btchar16cmp(char *a, char *b) +{ + return (strncmp(a, b, 16)); +} + +int32 btnamecmp(NameData *a, NameData *b) { return (strncmp(a->data, b->data, NAMEDATALEN)); diff --git a/src/backend/access/transam/xid.c b/src/backend/access/transam/xid.c index 960d98b9e3a..00810528c44 100644 --- a/src/backend/access/transam/xid.c +++ b/src/backend/access/transam/xid.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.13 1998/03/30 17:22:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/xid.c,v 1.14 1998/04/07 18:10:01 momjian Exp $ * * OLD COMMENTS * XXX WARNING @@ -30,14 +30,14 @@ extern TransactionId DisabledTransactionId; extern TransactionId AmiTransactionId; extern TransactionId FirstTransactionId; -/* XXX name for catalogs */ +/* XXX char16 name for catalogs */ TransactionId xidin(char *representation) { return (atol(representation)); } -/* XXX name for catalogs */ +/* XXX char16 name for catalogs */ char * xidout(TransactionId transactionId) { diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y index 613dba9d05b..4dc0a5128d8 100644 --- a/src/backend/bootstrap/bootparse.y +++ b/src/backend/bootstrap/bootparse.y @@ -8,47 +8,53 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.14 1998/03/30 17:22:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootparse.y,v 1.15 1998/04/07 18:10:11 momjian Exp $ * *------------------------------------------------------------------------- */ -#include <stdio.h> -#include <time.h> - #include "postgres.h" -#include "miscadmin.h" - +#include "catalog/pg_attribute.h" #include "access/attnum.h" -#include "access/funcindex.h" -#include "access/htup.h" -#include "access/itup.h" -#include "access/skey.h" -#include "access/strat.h" +#include "nodes/pg_list.h" #include "access/tupdesc.h" -#include "access/xact.h" -#include "bootstrap/bootstrap.h" -#include "catalog/heap.h" +#include "storage/fd.h" #include "catalog/pg_am.h" -#include "catalog/pg_attribute.h" #include "catalog/pg_class.h" -#include "commands/defrem.h" #include "nodes/nodes.h" -#include "nodes/parsenodes.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" #include "rewrite/prs2lock.h" +#include "access/skey.h" +#include "access/strat.h" +#include "utils/rel.h" + +#include "nodes/primnodes.h" +#include <time.h> +#include "utils/nabstime.h" #include "storage/block.h" -#include "storage/fd.h" -#include "storage/ipc.h" -#include "storage/itemptr.h" #include "storage/off.h" -#include "storage/smgr.h" +#include "storage/itemptr.h" +#include "access/htup.h" +#include "nodes/parsenodes.h" + +#include "access/xact.h" + +#include <stdio.h> + +#include "catalog/heap.h" + +#include "storage/ipc.h" #include "storage/spin.h" +#include "storage/smgr.h" + #include "tcop/dest.h" -#include "utils/nabstime.h" -#include "utils/rel.h" +#include "commands/defrem.h" + +#include "access/itup.h" +#include "access/funcindex.h" +#include "bootstrap/bootstrap.h" + +#include "miscadmin.h" #define DO_START { \ StartTransactionCommand();\ diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index f1d4ddd04d0..0336cf05444 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -7,7 +7,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.38 1998/03/30 17:22:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.39 1998/04/07 18:10:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -16,70 +16,88 @@ #include <stdio.h> #include <signal.h> #include <setjmp.h> -#include <string.h> #define BOOTSTRAP_INCLUDE /* mask out stuff in tcop/tcopprot.h */ #include "postgres.h" -#include "miscadmin.h" -#include "fmgr.h" - +#include "catalog/pg_attribute.h" #include "access/attnum.h" -#include "access/funcindex.h" -#include "access/genam.h" -#include "access/heapam.h" -#include "access/htup.h" -#include "access/itup.h" -#include "access/relscan.h" -#include "access/sdir.h" -#include "access/skey.h" -#include "access/strat.h" +#include "nodes/pg_list.h" #include "access/tupdesc.h" -#include "access/xact.h" -#include "bootstrap/bootstrap.h" -#include "catalog/catname.h" -#include "catalog/index.h" +#include "storage/fd.h" #include "catalog/pg_am.h" -#include "catalog/pg_attribute.h" #include "catalog/pg_class.h" -#include "catalog/pg_type.h" -#include "executor/execdesc.h" -#include "executor/hashjoin.h" -#include "executor/tuptable.h" -#include "libpq/pqsignal.h" -#include "nodes/execnodes.h" -#include "nodes/memnodes.h" #include "nodes/nodes.h" -#include "nodes/params.h" -#include "nodes/parsenodes.h" -#include "nodes/plannodes.h" -#include "nodes/pg_list.h" -#include "nodes/primnodes.h" #include "rewrite/prs2lock.h" +#include "access/skey.h" +#include "access/strat.h" +#include "utils/rel.h" +#include "libpq/pqsignal.h" + #include "storage/block.h" +#include "storage/off.h" +#include "storage/itemptr.h" +#include "utils/nabstime.h" +#include "access/htup.h" #include "storage/buf.h" -#include "storage/fd.h" +#include "access/relscan.h" +#include "access/heapam.h" + +#include "fmgr.h" + +#include "access/funcindex.h" + +#include "nodes/memnodes.h" + +#include "miscadmin.h" + +#include "catalog/pg_type.h" + +#include "access/itup.h" +#include "bootstrap/bootstrap.h" + +#include "tcop/tcopprot.h" + #include "storage/ipc.h" -#include "storage/itemptr.h" -#include "storage/lock.h" -#include "storage/off.h" -#include "storage/shmem.h" #include "storage/spin.h" -#include "tcop/dest.h" -#include "tcop/tcopprot.h" -#include "utils/builtins.h" -#include "utils/geo_decls.h" #include "utils/hsearch.h" -#include "utils/lsyscache.h" -#include "utils/mcxt.h" -#include "utils/nabstime.h" -#include "utils/portal.h" -#include "utils/rel.h" +#include "storage/shmem.h" +#include "storage/lock.h" + +#include "access/xact.h" #ifndef HAVE_MEMMOVE #include "regex/utils.h" #endif +#include <string.h> + +#include "nodes/primnodes.h" +#include "nodes/parsenodes.h" +#include "nodes/params.h" +#include "access/sdir.h" +#include "executor/hashjoin.h" +#include "executor/tuptable.h" +#include "nodes/execnodes.h" +#include "nodes/plannodes.h" +#include "tcop/dest.h" +#include "executor/execdesc.h" +#include "utils/portal.h" + +#include "utils/mcxt.h" + +#include "catalog/catname.h" + +#include "utils/geo_decls.h" +#include "utils/builtins.h" + +#include "catalog/index.h" + +#include "access/genam.h" + +#include "utils/lsyscache.h" + +#include "utils/palloc.h" #define ALLOC(t, c) (t *)calloc((unsigned)(c), sizeof(t)) #define FIRST_TYPE_OID 16 /* OID of the first type */ @@ -143,7 +161,7 @@ static struct typinfo Procid[] = { {"bytea", 17, 0, -1, F_BYTEAIN, F_BYTEAOUT}, {"char", 18, 0, 1, F_CHARIN, F_CHAROUT}, {"name", 19, 0, NAMEDATALEN, F_NAMEIN, F_NAMEOUT}, - {"dummy", 20, 0, 16, 0, 0}, + {"char16", 20, 0, 16, F_CHAR16IN, F_CHAR16OUT}, /* { "dt", 20, 0, 4, F_DTIN, F_DTOUT}, */ {"int2", 21, 0, 2, F_INT2IN, F_INT2OUT}, {"int28", 22, 0, 16, F_INT28IN, F_INT28OUT}, diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c index 7e6e4921690..ec3a3e84994 100644 --- a/src/backend/commands/creatinh.c +++ b/src/backend/commands/creatinh.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.27 1998/03/30 17:22:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.28 1998/04/07 18:10:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -179,7 +179,7 @@ RemoveRelation(char *name) * Here's an example: * * create table person (name text, age int4, location point); - * create table emp (salary int4, manager text) inherits(person); + * create table emp (salary int4, manager char16) inherits(person); * create table student (gpa float8) inherits (person); * create table stud_emp (percent int4) inherits (emp, student); * diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 67de9f1f078..0a481677b30 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.10 1998/04/05 21:04:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.11 1998/04/07 18:10:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -88,7 +88,7 @@ createdb(char *dbname, char *dbpath) #if FALSE sprintf(buf, "insert into pg_database (datname, datdba, datpath) \ - values (\'%s\'::name, \'%d\'::oid, \'%s\'::text);", + values (\'%s\'::char16, \'%d\'::oid, \'%s\'::text);", dbname, user_id, dbname); #endif diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 9fd4c185be2..2950d93227c 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.28 1998/03/30 17:23:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.29 1998/04/07 18:10:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -547,7 +547,7 @@ GetAttributeByNum(TupleTableSlot *slot, return (char *) retval; } -/* XXX name for catalogs */ +/* XXX char16 name for catalogs */ #ifdef NOT_USED char * att_by_num(TupleTableSlot *slot, @@ -608,7 +608,7 @@ GetAttributeByName(TupleTableSlot *slot, char *attname, bool *isNull) return (char *) retval; } -/* XXX name for catalogs */ +/* XXX char16 name for catalogs */ #ifdef NOT_USED char * att_by_name(TupleTableSlot *slot, char *attname, bool *isNull) diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 31c636ee26f..68cb73ceabc 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.25 1998/03/30 17:23:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.26 1998/04/07 18:10:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -530,7 +530,7 @@ parser_typecast2(Node *expr, Oid exprType, Type tp, int16 atttypmod) sprintf(const_string, "%d", (int) ((Const *) expr)->constvalue); break; - case NAMEOID: /* name */ + case NAMEOID: /* char16 */ const_string = (char *) palloc(256); string_palloced = true; sprintf(const_string, "%s", diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c index fd9b7ecf4ac..350045eb90a 100644 --- a/src/backend/rewrite/rewriteRemove.c +++ b/src/backend/rewrite/rewriteRemove.c @@ -7,20 +7,21 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.12 1998/03/30 17:23:37 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.13 1998/04/07 18:11:08 momjian Exp $ * *------------------------------------------------------------------------- */ #include "postgres.h" -#include "fmgr.h" /* for F_NAMEEQ */ - -#include "access/heapam.h" /* heap AM calls defined here */ #include "access/skey.h" -#include "catalog/catname.h" /* for RewriteRelationName */ #include "catalog/pg_rewrite.h" +#include "catalog/catname.h" /* for RewriteRelationName */ #include "utils/syscache.h" +#include "utils/elog.h" /* for elog stuff */ +#include "utils/palloc.h" +#include "access/heapam.h" /* heap AM calls defined here */ +#include "fmgr.h" /* for CHAR_16_EQ */ #include "rewrite/rewriteRemove.h" /* where the decls go */ #include "rewrite/rewriteSupport.h" @@ -85,7 +86,7 @@ RemoveRewriteRule(char *ruleName) * Scan the RuleRelation ('pg_rewrite') until we find a tuple */ ScanKeyEntryInitialize(&scanKeyData, 0, Anum_pg_rewrite_rulename, - F_NAMEEQ, NameGetDatum(ruleName)); + F_CHAR16EQ, NameGetDatum(ruleName)); scanDesc = heap_beginscan(RewriteRelation, 0, false, 1, &scanKeyData); diff --git a/src/backend/rewrite/rewriteSupport.c b/src/backend/rewrite/rewriteSupport.c index 8c62cc2bfe0..d1ce425da32 100644 --- a/src/backend/rewrite/rewriteSupport.c +++ b/src/backend/rewrite/rewriteSupport.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.17 1998/03/30 17:23:40 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteSupport.c,v 1.18 1998/04/07 18:11:11 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -106,7 +106,7 @@ IsDefinedRewriteRule(char *ruleName) * Scan the RuleRelation ('pg_rewrite') until we find a tuple */ ScanKeyEntryInitialize(&scanKey, 0, Anum_pg_rewrite_rulename, - F_NAMEEQ, PointerGetDatum(ruleName)); + NameEqualRegProcedure, PointerGetDatum(ruleName)); scanDesc = heap_beginscan(RewriteRelation, 0, false, 1, &scanKey); diff --git a/src/backend/tcop/fastpath.c b/src/backend/tcop/fastpath.c index e5a1ff8e690..ce165baed8b 100644 --- a/src/backend/tcop/fastpath.c +++ b/src/backend/tcop/fastpath.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.14 1998/03/30 17:23:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.15 1998/04/07 18:11:18 momjian Exp $ * * NOTES * This cruft is the server side of PQfn. @@ -44,7 +44,7 @@ * The previous implementation would assume (1) that any value of * length <= 4 bytes was passed-by-value, and that any other value * was a struct varlena (by-reference). There was NO way to pass a - * fixed-length by-reference argument (like name) or a struct + * fixed-length by-reference argument (like char16) or a struct * varlena of size <= 4 bytes. * * The new implementation checks the catalogs to determine whether diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c index 5a32bceeb66..87fd3ed1f9b 100644 --- a/src/backend/utils/adt/char.c +++ b/src/backend/utils/adt/char.c @@ -3,12 +3,16 @@ * char.c-- * Functions for the built-in type "char". * Functions for the built-in type "cid". + * Functions for the built-in type "char2". + * Functions for the built-in type "char4". + * Functions for the built-in type "char8". + * Functions for the built-in type "char16". * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.16 1998/03/30 17:24:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.17 1998/04/07 18:11:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -83,6 +87,42 @@ cidout(int32 c) return (result); } +/* + * char16in - converts "..." to internal reprsentation + * + * Note: + * Currently if strlen(s) < 14, the extra chars are nulls + */ +char * +char16in(char *s) +{ + char *result; + + if (s == NULL) + return (NULL); + result = (char *) palloc(16); + strncpy(result, s, 16); + return (result); +} + +/* + * char16out - converts internal reprsentation to "..." + */ +char * +char16out(char *s) +{ + char *result = (char *) palloc(17); + + if (s == NULL) + { + result[0] = '-'; + result[1] = '\0'; + } + else + StrNCpy(result, s, 17); + return (result); +} + /***************************************************************************** * PUBLIC ROUTINES * @@ -153,3 +193,283 @@ cideq(int8 arg1, int8 arg2) { return (arg1 == arg2); } + +/* + * char16eq - returns 1 iff arguments are equal + * char16ne - returns 1 iff arguments are not equal + * + * BUGS: + * Assumes that "xy\0\0a" should be equal to "xy\0b". + * If not, can do the comparison backwards for efficiency. + * + * char16lt - returns 1 iff a < b + * char16le - returns 1 iff a <= b + * char16gt - returns 1 iff a < b + * char16ge - returns 1 iff a <= b + * + */ +bool +char16eq(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 16) == 0); +} + +bool +char16ne(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 16) != 0); +} + +bool +char16lt(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 16) < 0); +} + +bool +char16le(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 16) <= 0); +} + +bool +char16gt(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + + return (strncmp(arg1, arg2, 16) > 0); +} + +bool +char16ge(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + + return (strncmp(arg1, arg2, 16) >= 0); +} + + +/* ============================== char2 ============================== */ +uint16 +char2in(char *s) +{ + uint16 res; + + if (s == NULL) + return (0); + + strncpy((char *) &res, s, 2); + return (res); +} + +char * +char2out(uint16 s) +{ + char *result = (char *) palloc(3); + + StrNCpy(result, (char *) &s, 3); + + return (result); +} + +bool +char2eq(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) == 0); +} + +bool +char2ne(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) != 0); +} + +bool +char2lt(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) < 0); +} + +bool +char2le(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) <= 0); +} + +bool +char2gt(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) > 0); +} + +bool +char2ge(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2) >= 0); +} + +int32 +char2cmp(uint16 a, uint16 b) +{ + return (strncmp((char *) &a, (char *) &b, 2)); +} + +/* ============================== char4 ============================== */ +uint32 +char4in(char *s) +{ + uint32 res; + + if (s == NULL) + return (0); + + strncpy((char *) &res, s, 4); + + return (res); +} + +char * +char4out(s) +uint32 s; +{ + char *result = (char *) palloc(5); + + StrNCpy(result, (char *) &s, 5); + + return (result); +} + +bool +char4eq(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) == 0); +} + +bool +char4ne(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) != 0); +} + +bool +char4lt(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) < 0); +} + +bool +char4le(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) <= 0); +} + +bool +char4gt(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) > 0); +} + +bool +char4ge(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4) >= 0); +} + +int32 +char4cmp(uint32 a, uint32 b) +{ + return (strncmp((char *) &a, (char *) &b, 4)); +} + +/* ============================== char8 ============================== */ +char * +char8in(char *s) +{ + char *result; + + if (s == NULL) + return ((char *) NULL); + + result = (char *) palloc(8); + strncpy(result, s, 8); + return (result); +} + +char * +char8out(char *s) +{ + char *result = (char *) palloc(9); + + if (s == NULL) + { + result[0] = '-'; + result[1] = '\0'; + } + else + StrNCpy(result, s, 9); + return (result); +} + +bool +char8eq(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) == 0); +} + +bool +char8ne(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) != 0); +} + +bool +char8lt(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) < 0); +} + +bool +char8le(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) <= 0); +} + +bool +char8gt(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) > 0); +} + +bool +char8ge(char *arg1, char *arg2) +{ + if (arg1 == NULL || arg2 == NULL) + return ((bool) 0); + return (strncmp(arg1, arg2, 8) >= 0); +} + +int32 +char8cmp(char *arg1, char *arg2) +{ + return (strncmp(arg1, arg2, 8)); +} diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index 032f28b13ac..5c3c61333d5 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -83,6 +83,58 @@ fixedlen_like(char *s, struct varlena * p, int charlen) } bool +char2like(uint16 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_like(s, p, 2)); +} + +bool +char2nlike(uint16 arg1, struct varlena * p) +{ + return (!char2like(arg1, p)); +} + +bool +char4like(uint32 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_like(s, p, 4)); +} + +bool +char4nlike(uint32 arg1, struct varlena * p) +{ + return (!char4like(arg1, p)); +} + +bool +char8like(char *s, struct varlena * p) +{ + return (fixedlen_like(s, p, 8)); +} + +bool +char8nlike(char *s, struct varlena * p) +{ + return (!char8like(s, p)); +} + +bool +char16like(char *s, struct varlena * p) +{ + return (fixedlen_like(s, p, 16)); +} + +bool +char16nlike(char *s, struct varlena * p) +{ + return (!char16like(s, p)); +} + +bool namelike(NameData *n, struct varlena * p) { if (!n) @@ -111,7 +163,7 @@ textnlike(struct varlena * s, struct varlena * p) } -/* $Revision: 1.14 $ +/* $Revision: 1.15 $ ** "like.c" A first attempt at a LIKE operator for Postgres95. ** ** Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986. diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index b16e1e11b6e..61f0affe2ee 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.15 1998/03/30 17:24:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regexp.c,v 1.16 1998/04/07 18:11:32 momjian Exp $ * * Alistair Crooks added the code for the regex caching * agc - cached the regular expressions used - there's a good chance @@ -204,6 +204,58 @@ fixedlen_regexeq(char *s, struct varlena * p, int charlen, int cflags) * routines that use the regexp stuff */ bool +char2regexeq(uint16 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_regexeq(s, p, 2, REG_EXTENDED)); +} + +bool +char2regexne(uint16 arg1, struct varlena * p) +{ + return (!char2regexeq(arg1, p)); +} + +bool +char4regexeq(uint32 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_regexeq(s, p, 4, REG_EXTENDED)); +} + +bool +char4regexne(uint32 arg1, struct varlena * p) +{ + return (!char4regexeq(arg1, p)); +} + +bool +char8regexeq(char *s, struct varlena * p) +{ + return (fixedlen_regexeq(s, p, 8, REG_EXTENDED)); +} + +bool +char8regexne(char *s, struct varlena * p) +{ + return (!char8regexeq(s, p)); +} + +bool +char16regexeq(char *s, struct varlena * p) +{ + return (fixedlen_regexeq(s, p, 16, REG_EXTENDED)); +} + +bool +char16regexne(char *s, struct varlena * p) +{ + return (!char16regexeq(s, p)); +} + +bool nameregexeq(NameData *n, struct varlena * p) { if (!n) @@ -237,6 +289,59 @@ textregexne(struct varlena * s, struct varlena * p) * for this, we use the REG_ICASE flag to pg95_regcomp */ bool +char2icregexeq(uint16 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_regexeq(s, p, 2, REG_ICASE | REG_EXTENDED)); +} + + +bool +char2icregexne(uint16 arg1, struct varlena * p) +{ + return (!char2icregexeq(arg1, p)); +} + +bool +char4icregexeq(uint32 arg1, struct varlena * p) +{ + char *s = (char *) &arg1; + + return (fixedlen_regexeq(s, p, 4, REG_ICASE | REG_EXTENDED)); +} + +bool +char4icregexne(uint32 arg1, struct varlena * p) +{ + return (!char4icregexeq(arg1, p)); +} + +bool +char8icregexeq(char *s, struct varlena * p) +{ + return (fixedlen_regexeq(s, p, 8, REG_ICASE | REG_EXTENDED)); +} + +bool +char8icregexne(char *s, struct varlena * p) +{ + return (!char8icregexeq(s, p)); +} + +bool +char16icregexeq(char *s, struct varlena * p) +{ + return (fixedlen_regexeq(s, p, 16, REG_ICASE | REG_EXTENDED)); +} + +bool +char16icregexne(char *s, struct varlena * p) +{ + return (!char16icregexeq(s, p)); +} + +bool texticregexeq(struct varlena * s, struct varlena * p) { if (!s) diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 34a3b268c27..e4cdab617e1 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.16 1998/03/30 17:24:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.17 1998/04/07 18:11:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -52,7 +52,7 @@ regprocin(char *proname) ScanKeyEntryInitialize(&key, (bits16) 0, (AttrNumber) 1, - (RegProcedure) F_NAMEEQ, + (RegProcedure) F_CHAR16EQ, (Datum) proname); procscan = heap_beginscan(proc, 0, false, 1, &key); diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 59bdce3f6e6..746669d1828 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.25 1998/03/30 17:24:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.26 1998/04/07 18:11:38 momjian Exp $ * * Notes: * XXX This needs to use exception.h to handle recovery when @@ -79,7 +79,7 @@ static int DisableCache; * ---------------- */ static long eqproc[] = { - F_BOOLEQ, 0l, F_CHAREQ, F_NAMEEQ, 0l, + F_BOOLEQ, 0l, F_CHAREQ, F_CHAR16EQ, 0l, F_INT2EQ, F_KEYFIRSTEQ, F_INT4EQ, 0l, F_TEXTEQ, F_OIDEQ, 0l, 0l, 0l, F_OID8EQ }; |