=================================================================== RCS file: postgresql-7.0.3/src/backend/utils/adt/RCS/varlena.c,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/backend/utils/adt/varlena.c --- postgresql-7.0.3/src/backend/utils/adt/varlena.c 2001/02/01 16:13:05 1.1 +++ postgresql-7.0.3/src/backend/utils/adt/varlena.c 2001/02/01 18:11:32 @@ -791,6 +791,123 @@ return res; } +/*------------------------------------------------------------- + * bytea_cmp + * + * Analogous to %cmp() functions on other types + * + * REQUIRES arguments are non-NULL. + * + * Returns an integer less than, equal to, or greater than zero, + * if arg1 is found (respectively) ot be less than, match, or + * be greater than arg2. + * + *------------------------------------------------------------- + */ +int32 +bytea_cmp(bytea *arg1, bytea *arg2) +{ + char *a1p, *a2p; + int result; + int len1, len2; + + if (arg1 == NULL || arg2 == NULL) + elog(ERROR, "bytea_cmp: received NULL argument"); + + a1p = VARDATA(arg1); + a2p = VARDATA(arg2); + + len1 = VARSIZE(arg1) - VARHDRSZ; + len2 = VARSIZE(arg2) - VARHDRSZ; + + result = memcmp(a1p, a2p, Min(len1, len2)); + if ((result == 0) && (len1 != len2)) + result = (len1 < len2) ? -1 : 1; + + return result; +} + + +/*------------------------------------------------------------- + * bytea_{lt,le,eq,ne,ge,gt} + * + * Comparison functions on bytea type + * + *------------------------------------------------------------- + */ + +bool +bytea_eq(bytea *arg1, bytea *arg2) +{ + int len1, len2; + + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + + len1 = VARSIZE(arg1) - VARHDRSZ; + len2 = VARSIZE(arg2) - VARHDRSZ; + + if (len1 != len2) + return 0; + + return (bool) (memcmp(VARDATA(arg1), VARDATA(arg2), len1) == 0); +} + +bool +bytea_ne(bytea *arg1, bytea *arg2) +{ + int len1, len2; + + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + + len1 = VARSIZE(arg1) - VARHDRSZ; + len2 = VARSIZE(arg2) - VARHDRSZ; + + if (len1 != len2) + return 1; + + return (bool) (memcmp(VARDATA(arg1), VARDATA(arg2), len1) != 0); +} + +bool +bytea_lt(bytea *arg1, bytea *arg2) +{ + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + return (bool) (bytea_cmp(arg1, arg2) < 0); +} + +bool +bytea_le(bytea *arg1, bytea *arg2) +{ + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + return (bool) (bytea_cmp(arg1, arg2) <= 0); +} + +bool +bytea_gt(bytea *arg1, bytea *arg2) +{ + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + return (bool) (bytea_cmp(arg1, arg2) > 0); +} + +bool +bytea_ge(bytea *arg1, bytea *arg2) +{ + /* NULL doesn't satisfy equality statements */ + if (arg1 == NULL || arg2 == NULL) + return (bool) FALSE; + return (bool) (bytea_cmp(arg1, arg2) >= 0); +} + /* text_name() * Converts a text() type to a NameData type. =================================================================== RCS file: postgresql-7.0.3/src/include/utils/RCS/builtins.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/utils/builtins.h --- postgresql-7.0.3/src/include/utils/builtins.h 2001/02/01 16:47:06 1.1 +++ postgresql-7.0.3/src/include/utils/builtins.h 2001/02/01 18:11:43 @@ -522,6 +522,13 @@ extern int32 byteaGetBit(bytea *v, int32 n); extern bytea *byteaSetByte(bytea *v, int32 n, int32 newByte); extern bytea *byteaSetBit(bytea *v, int32 n, int32 newBit); +extern int32 bytea_cmp(bytea *arg1, bytea *arg2); +extern bool bytea_eq(bytea *arg1, bytea *arg2); +extern bool bytea_ne(bytea *arg1, bytea *arg2); +extern bool bytea_lt(bytea *arg1, bytea *arg2); +extern bool bytea_le(bytea *arg1, bytea *arg2); +extern bool bytea_gt(bytea *arg1, bytea *arg2); +extern bool bytea_ge(bytea *arg1, bytea *arg2); /* like.c */ extern bool namelike(NameData *n, struct varlena * p); =================================================================== RCS file: postgresql-7.0.3/src/include/catalog/RCS/pg_amop.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/catalog/pg_amop.h --- postgresql-7.0.3/src/include/catalog/pg_amop.h 2001/02/01 17:29:57 1.1 +++ postgresql-7.0.3/src/include/catalog/pg_amop.h 2001/02/01 17:35:07 @@ -264,6 +264,16 @@ DATA(insert OID = 0 ( 403 1077 1068 5 )); /* + * nbtree bytea_ops + */ + +DATA(insert OID = 0 ( 403 1909 1902 1 )); +DATA(insert OID = 0 ( 403 1909 1903 2 )); +DATA(insert OID = 0 ( 403 1909 1900 3 )); +DATA(insert OID = 0 ( 403 1909 1905 4 )); +DATA(insert OID = 0 ( 403 1909 1904 5 )); + +/* * nbtree date_ops */ =================================================================== RCS file: postgresql-7.0.3/src/include/catalog/RCS/pg_amproc.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/catalog/pg_amproc.h --- postgresql-7.0.3/src/include/catalog/pg_amproc.h 2001/02/01 21:09:17 1.1 +++ postgresql-7.0.3/src/include/catalog/pg_amproc.h 2001/02/01 21:11:28 @@ -90,6 +90,7 @@ DATA(insert OID = 0 (403 754 842 1)); DATA(insert OID = 0 (403 1076 1078 1)); DATA(insert OID = 0 (403 1077 1079 1)); +DATA(insert OID = 0 (403 1909 1916 1)); DATA(insert OID = 0 (403 1114 1092 1)); DATA(insert OID = 0 (403 1115 1107 1)); DATA(insert OID = 0 (403 1181 359 1)); =================================================================== RCS file: postgresql-7.0.3/src/include/catalog/RCS/pg_opclass.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/catalog/pg_opclass.h --- postgresql-7.0.3/src/include/catalog/pg_opclass.h 2001/02/01 17:34:33 1.1 +++ postgresql-7.0.3/src/include/catalog/pg_opclass.h 2001/02/01 17:34:46 @@ -100,6 +100,8 @@ DESCR(""); DATA(insert OID = 1077 ( varchar_ops 1043 )); DESCR(""); +DATA(insert OID = 1909 ( bytea_ops 17 )); +DESCR(""); DATA(insert OID = 1114 ( date_ops 1082 )); DESCR(""); DATA(insert OID = 1115 ( time_ops 1083 )); =================================================================== RCS file: postgresql-7.0.3/src/include/catalog/RCS/pg_operator.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/catalog/pg_operator.h --- postgresql-7.0.3/src/include/catalog/pg_operator.h 2001/02/01 16:56:49 1.1 +++ postgresql-7.0.3/src/include/catalog/pg_operator.h 2001/02/01 17:16:25 @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: pg_operator.h,v 1.1 2001/02/01 16:56:49 jered Exp jered $ + * $Id: pg_operator.h,v 1.75 2000/04/12 17:16:29 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki @@ -467,6 +467,14 @@ DATA(insert OID = 1067 ( "<=" PGUID 0 b t f 1043 1043 16 1069 1068 0 0 varcharle scalarltsel scalarltjoinsel )); DATA(insert OID = 1068 ( ">" PGUID 0 b t f 1043 1043 16 1066 1067 0 0 varchargt scalargtsel scalargtjoinsel )); DATA(insert OID = 1069 ( ">=" PGUID 0 b t f 1043 1043 16 1067 1066 0 0 varcharge scalargtsel scalargtjoinsel )); + +/* bytea operators */ +DATA(insert OID = 1900 ( "=" PGUID 0 b t t 17 17 16 1900 1901 1902 1902 bytea_eq eqsel eqjoinsel )); +DATA(insert OID = 1901 ( "<>" PGUID 0 b t f 17 17 16 1901 1900 0 0 bytea_ne neqsel neqjoinsel )); +DATA(insert OID = 1902 ( "<" PGUID 0 b t f 17 17 16 1904 1905 0 0 bytea_lt scalarltsel scalarltjoinsel )); +DATA(insert OID = 1903 ( "<=" PGUID 0 b t f 17 17 16 1905 1904 0 0 bytea_le scalarltsel scalarltjoinsel )); +DATA(insert OID = 1904 ( ">" PGUID 0 b t f 17 17 16 1902 1903 0 0 bytea_gt scalargtsel scalargtjoinsel )); +DATA(insert OID = 1905 ( ">=" PGUID 0 b t f 17 17 16 1903 1902 0 0 bytea_ge scalargtsel scalargtjoinsel )); /* date operators */ DATA(insert OID = 1093 ( "=" PGUID 0 b t t 1082 1082 16 1093 1094 1095 1095 date_eq eqsel eqjoinsel )); =================================================================== RCS file: postgresql-7.0.3/src/include/catalog/RCS/pg_proc.h,v retrieving revision 1.1 diff -u -r1.1 postgresql-7.0.3/src/include/catalog/pg_proc.h --- postgresql-7.0.3/src/include/catalog/pg_proc.h 2001/02/01 17:09:37 1.1 +++ postgresql-7.0.3/src/include/catalog/pg_proc.h 2001/02/01 17:57:05 @@ -1345,6 +1345,21 @@ DATA(insert OID = 1081 ( hashvarchar PGUID 11 f t t 1 f 23 "1043" 100 0 0 100 hashvarchar - )); DESCR("hash"); +DATA(insert OID = 1910 ( bytea_eq PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_eq - )); +DESCR("equal"); +DATA(insert OID = 1911 ( bytea_lt PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_lt - )); +DESCR("less-than"); +DATA(insert OID = 1912 ( bytea_le PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_le - )); +DESCR("less-than-or-equal"); +DATA(insert OID = 1913 ( bytea_gt PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_gt - )); +DESCR("greater-than"); +DATA(insert OID = 1914 ( bytea_ge PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_ge - )); +DESCR("greater-than-or-equal"); +DATA(insert OID = 1915 ( bytea_ne PGUID 11 f t t 2 f 16 "17 17" 100 0 0 100 bytea_ne - )); +DESCR("not equal"); +DATA(insert OID = 1916 ( bytea_cmp PGUID 11 f t t 2 f 23 "17 17" 100 0 0 100 bytea_cmp - )); +DESCR("less-equal-greater"); + DATA(insert OID = 1084 ( date_in PGUID 11 f t f 1 f 1082 "0" 100 0 0 100 date_in - )); DESCR("(internal)"); DATA(insert OID = 1085 ( date_out PGUID 11 f t f 1 f 23 "0" 100 0 0 100 date_out - )); @@ -1363,6 +1378,7 @@ DESCR("not equal"); DATA(insert OID = 1092 ( date_cmp PGUID 11 f t t 2 f 23 "1082 1082" 100 0 0 100 date_cmp - )); DESCR("less-equal-greater"); + /* OIDS 1100 - 1199 */