*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.38 2000/08/01 18:29:35 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.39 2000/11/21 03:23:19 tgl Exp $
*
*-------------------------------------------------------------------------
*/
break;
while (*oidString && isspace((int) *oidString))
oidString++;
- while (*oidString && !isspace((int) *oidString))
+ while (*oidString && isdigit((int) *oidString))
oidString++;
}
while (*oidString && isspace((int) *oidString))
{
if (num != 0)
*rp++ = ' ';
- pg_ltoa((int32) oidArray[num], rp);
+ sprintf(rp, "%u", oidArray[num]);
while (*++rp != '\0')
;
}
oidin(PG_FUNCTION_ARGS)
{
char *s = PG_GETARG_CSTRING(0);
+ unsigned long cvt;
+ char *endptr;
+ Oid result;
- /* XXX should use an unsigned-int conversion here */
- return DirectFunctionCall1(int4in, CStringGetDatum(s));
+ errno = 0;
+
+ cvt = strtoul(s, &endptr, 10);
+
+ /*
+ * strtoul() normally only sets ERANGE. On some systems it also
+ * may set EINVAL, which simply means it couldn't parse the
+ * input string. This is handled by the second "if" consistent
+ * across platforms.
+ */
+ if (errno && errno != EINVAL)
+ elog(ERROR, "oidin: error reading \"%s\": %m", s);
+ if (endptr && *endptr)
+ elog(ERROR, "oidin: error in \"%s\": can't parse \"%s\"", s, endptr);
+
+ /*
+ * Cope with possibility that unsigned long is wider than Oid.
+ */
+ result = (Oid) cvt;
+ if ((unsigned long) result != cvt)
+ elog(ERROR, "oidin: error reading \"%s\": value too large", s);
+
+ return ObjectIdGetDatum(result);
}
Datum
oidout(PG_FUNCTION_ARGS)
{
Oid o = PG_GETARG_OID(0);
+ char *result = (char *) palloc(12);
- /* XXX should use an unsigned-int conversion here */
- return DirectFunctionCall1(int4out, ObjectIdGetDatum(o));
+ snprintf(result, 12, "%u", o);
+ PG_RETURN_CSTRING(result);
}
/*****************************************************************************
PG_RETURN_BOOL(arg1 != arg2);
}
+Datum
+oidlt(PG_FUNCTION_ARGS)
+{
+ Oid arg1 = PG_GETARG_OID(0);
+ Oid arg2 = PG_GETARG_OID(1);
+
+ PG_RETURN_BOOL(arg1 < arg2);
+}
+
+Datum
+oidle(PG_FUNCTION_ARGS)
+{
+ Oid arg1 = PG_GETARG_OID(0);
+ Oid arg2 = PG_GETARG_OID(1);
+
+ PG_RETURN_BOOL(arg1 <= arg2);
+}
+
+Datum
+oidge(PG_FUNCTION_ARGS)
+{
+ Oid arg1 = PG_GETARG_OID(0);
+ Oid arg2 = PG_GETARG_OID(1);
+
+ PG_RETURN_BOOL(arg1 >= arg2);
+}
+
+Datum
+oidgt(PG_FUNCTION_ARGS)
+{
+ Oid arg1 = PG_GETARG_OID(0);
+ Oid arg2 = PG_GETARG_OID(1);
+
+ PG_RETURN_BOOL(arg1 > arg2);
+}
+
Datum
oidvectoreq(PG_FUNCTION_ARGS)
{
PG_RETURN_BOOL(false);
}
-Datum
-oideqint4(PG_FUNCTION_ARGS)
-{
- Oid arg1 = PG_GETARG_OID(0);
- int32 arg2 = PG_GETARG_INT32(1);
-
- /* oid is unsigned, but int4 is signed */
- PG_RETURN_BOOL(arg2 >= 0 && arg1 == arg2);
-}
-
-Datum
-int4eqoid(PG_FUNCTION_ARGS)
-{
- int32 arg1 = PG_GETARG_INT32(0);
- Oid arg2 = PG_GETARG_OID(1);
-
- /* oid is unsigned, but int4 is signed */
- PG_RETURN_BOOL(arg1 >= 0 && arg1 == arg2);
-}
-
Datum
oid_text(PG_FUNCTION_ARGS)
{
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: catversion.h,v 1.62 2000/11/20 20:36:50 tgl Exp $
+ * $Id: catversion.h,v 1.63 2000/11/21 03:23:19 tgl Exp $
*
*-------------------------------------------------------------------------
*/
*/
/* yyyymmddN */
-#define CATALOG_VERSION_NO 200011201
+#define CATALOG_VERSION_NO 200011211
#endif
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_operator.h,v 1.83 2000/10/24 20:15:45 petere Exp $
+ * $Id: pg_operator.h,v 1.84 2000/11/21 03:23:19 tgl Exp $
*
* NOTES
* the genbki.sh script reads this file and generates .bki
DATA(insert OID = 607 ( "=" PGUID 0 b t t 26 26 16 607 608 609 609 oideq eqsel eqjoinsel ));
#define MIN_OIDCMP 607 /* used by cache code */
DATA(insert OID = 608 ( "<>" PGUID 0 b t f 26 26 16 608 607 0 0 oidne neqsel neqjoinsel ));
-DATA(insert OID = 609 ( "<" PGUID 0 b t f 26 26 16 610 612 0 0 int4lt scalarltsel scalarltjoinsel ));
-DATA(insert OID = 610 ( ">" PGUID 0 b t f 26 26 16 609 611 0 0 int4gt scalargtsel scalargtjoinsel ));
-DATA(insert OID = 611 ( "<=" PGUID 0 b t f 26 26 16 612 610 0 0 int4le scalarltsel scalarltjoinsel ));
-DATA(insert OID = 612 ( ">=" PGUID 0 b t f 26 26 16 611 609 0 0 int4ge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 609 ( "<" PGUID 0 b t f 26 26 16 610 612 0 0 oidlt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 610 ( ">" PGUID 0 b t f 26 26 16 609 611 0 0 oidgt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 611 ( "<=" PGUID 0 b t f 26 26 16 612 610 0 0 oidle scalarltsel scalarltjoinsel ));
+DATA(insert OID = 612 ( ">=" PGUID 0 b t f 26 26 16 611 609 0 0 oidge scalargtsel scalargtjoinsel ));
#define MAX_OIDCMP 612 /* used by cache code */
DATA(insert OID = 644 ( "<>" PGUID 0 b t f 30 30 16 644 649 0 0 oidvectorne neqsel neqjoinsel ));
DATA(insert OID = 1134 ( "<=" PGUID 0 b t f 701 700 16 1125 1133 0 0 float84le scalarltsel scalarltjoinsel ));
DATA(insert OID = 1135 ( ">=" PGUID 0 b t f 701 700 16 1124 1132 0 0 float84ge scalargtsel scalargtjoinsel ));
-/* int4 and oid equality */
-DATA(insert OID = 1136 ( "=" PGUID 0 b t t 23 26 16 1137 0 0 0 int4eqoid eqsel eqjoinsel ));
-DATA(insert OID = 1137 ( "=" PGUID 0 b t t 26 23 16 1136 0 0 0 oideqint4 eqsel eqjoinsel ));
+/* int4 vs oid equality --- use oid (unsigned) comparison */
+DATA(insert OID = 1136 ( "=" PGUID 0 b t t 23 26 16 1137 1656 0 0 oideq eqsel eqjoinsel ));
+DATA(insert OID = 1137 ( "=" PGUID 0 b t t 26 23 16 1136 1661 0 0 oideq eqsel eqjoinsel ));
DATA(insert OID = 1158 ( "!" PGUID 0 r t f 21 0 23 0 0 0 0 int2fac - - ));
DATA(insert OID = 1175 ( "!!" PGUID 0 l t f 0 21 23 0 0 0 0 int2fac - - ));
#define OID_VARCHAR_ICLIKE_OP 1631
DATA(insert OID = 1632 ( "!~~*" PGUID 0 b t f 1043 25 16 0 1631 0 0 texticnlike icnlikesel icnlikejoinsel ));
+/* int4 vs oid comparisons --- use oid (unsigned) comparison */
+DATA(insert OID = 1656 ( "<>" PGUID 0 b t f 23 26 16 1661 1136 0 0 oidne neqsel neqjoinsel ));
+DATA(insert OID = 1657 ( "<" PGUID 0 b t f 23 26 16 1663 1660 0 0 oidlt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1658 ( ">" PGUID 0 b t f 23 26 16 1662 1659 0 0 oidgt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1659 ( "<=" PGUID 0 b t f 23 26 16 1665 1658 0 0 oidle scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1660 ( ">=" PGUID 0 b t f 23 26 16 1664 1657 0 0 oidge scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1661 ( "<>" PGUID 0 b t f 26 23 16 1656 1137 0 0 oidne neqsel neqjoinsel ));
+DATA(insert OID = 1662 ( "<" PGUID 0 b t f 26 23 16 1658 1665 0 0 oidlt scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1663 ( ">" PGUID 0 b t f 26 23 16 1657 1664 0 0 oidgt scalargtsel scalargtjoinsel ));
+DATA(insert OID = 1664 ( "<=" PGUID 0 b t f 26 23 16 1660 1663 0 0 oidle scalarltsel scalarltjoinsel ));
+DATA(insert OID = 1665 ( ">=" PGUID 0 b t f 26 23 16 1659 1662 0 0 oidge scalargtsel scalargtjoinsel ));
+
/* NUMERIC type - OID's 1700-1799 */
DATA(insert OID = 1751 ( "-" PGUID 0 l t f 0 1700 1700 0 0 0 0 numeric_uminus - - ));
DATA(insert OID = 1752 ( "=" PGUID 0 b t f 1700 1700 16 1752 1753 1754 1754 numeric_eq eqsel eqjoinsel ));
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_proc.h,v 1.174 2000/11/11 19:55:33 thomas Exp $
+ * $Id: pg_proc.h,v 1.175 2000/11/21 03:23:19 tgl Exp $
*
* NOTES
* The script catalog/genbki.sh reads this file and generates .bki
DESCR("random");
DATA(insert OID = 715 ( oidsrand PGUID 12 f t f t 1 f 16 "23" 100 0 0 100 oidsrand - ));
DESCR("seed random number generator");
-DATA(insert OID = 716 ( oideqint4 PGUID 12 f t t t 2 f 16 "26 23" 100 0 0 100 oideqint4 - ));
-DESCR("equal");
-DATA(insert OID = 717 ( int4eqoid PGUID 12 f t t t 2 f 16 "23 26" 100 0 0 100 int4eqoid - ));
-DESCR("equal");
+DATA(insert OID = 716 ( oidlt PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100 oidlt - ));
+DESCR("less-than");
+DATA(insert OID = 717 ( oidle PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100 oidle - ));
+DESCR("less-than-or-equal");
DATA(insert OID = 720 ( octet_length PGUID 12 f t t t 1 f 23 "17" 100 0 0 100 byteaoctetlen - ));
DESCR("octet length");
DATA(insert OID = 1597 ( pg_encoding_to_char PGUID 12 f t f t 1 f 19 "23" 100 0 0 100 PG_encoding_to_char - ));
DESCR("convert encoding id to encoding name");
+DATA(insert OID = 1638 ( oidgt PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100 oidgt - ));
+DESCR("greater-than");
+DATA(insert OID = 1639 ( oidge PGUID 12 f t t t 2 f 16 "26 26" 100 0 0 100 oidge - ));
+DESCR("greater-than-or-equal");
+
/* System-view support functions */
DATA(insert OID = 1640 ( pg_get_ruledef PGUID 12 f t f t 1 f 25 "19" 100 0 0 100 pg_get_ruledef - ));
DESCR("source text of a rule");
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: builtins.h,v 1.141 2000/11/10 20:13:26 tgl Exp $
+ * $Id: builtins.h,v 1.142 2000/11/21 03:23:20 tgl Exp $
*
*-------------------------------------------------------------------------
*/
extern Datum oidnotin(PG_FUNCTION_ARGS);
/* oid.c */
-extern Datum oidvectorin(PG_FUNCTION_ARGS);
-extern Datum oidvectorout(PG_FUNCTION_ARGS);
extern Datum oidin(PG_FUNCTION_ARGS);
extern Datum oidout(PG_FUNCTION_ARGS);
extern Datum oideq(PG_FUNCTION_ARGS);
extern Datum oidne(PG_FUNCTION_ARGS);
+extern Datum oidlt(PG_FUNCTION_ARGS);
+extern Datum oidle(PG_FUNCTION_ARGS);
+extern Datum oidge(PG_FUNCTION_ARGS);
+extern Datum oidgt(PG_FUNCTION_ARGS);
+extern Datum oid_text(PG_FUNCTION_ARGS);
+extern Datum text_oid(PG_FUNCTION_ARGS);
+extern Datum oidvectorin(PG_FUNCTION_ARGS);
+extern Datum oidvectorout(PG_FUNCTION_ARGS);
extern Datum oidvectoreq(PG_FUNCTION_ARGS);
extern Datum oidvectorne(PG_FUNCTION_ARGS);
extern Datum oidvectorlt(PG_FUNCTION_ARGS);
extern Datum oidvectorle(PG_FUNCTION_ARGS);
extern Datum oidvectorge(PG_FUNCTION_ARGS);
extern Datum oidvectorgt(PG_FUNCTION_ARGS);
-extern Datum oideqint4(PG_FUNCTION_ARGS);
-extern Datum int4eqoid(PG_FUNCTION_ARGS);
-extern Datum oid_text(PG_FUNCTION_ARGS);
-extern Datum text_oid(PG_FUNCTION_ARGS);
/* regexp.c */
extern Datum nameregexeq(PG_FUNCTION_ARGS);
INSERT INTO OID_TBL(f1) VALUES ('1235');
INSERT INTO OID_TBL(f1) VALUES ('987');
INSERT INTO OID_TBL(f1) VALUES ('-1040');
+INSERT INTO OID_TBL(f1) VALUES ('99999999');
INSERT INTO OID_TBL(f1) VALUES ('');
-- bad inputs
INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
-ERROR: pg_atoi: error in "asdfasd": can't parse "asdfasd"
-SELECT '' AS five, OID_TBL.*;
- five | f1
-------+-------
- | 1234
- | 1235
- | 987
- | -1040
- | 0
-(5 rows)
+ERROR: oidin: error in "asdfasd": can't parse "asdfasd"
+INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
+ERROR: oidin: error in "99asdfasd": can't parse "asdfasd"
+SELECT '' AS six, OID_TBL.*;
+ six | f1
+-----+------------
+ | 1234
+ | 1235
+ | 987
+ | 4294966256
+ | 99999999
+ | 0
+(6 rows)
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = oid '1234';
+SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234;
one | f1
-----+------
| 1234
(1 row)
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 <> '1234';
- four | f1
-------+-------
- | 1235
- | 987
- | -1040
- | 0
-(4 rows)
-
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 <= '1234';
- four | f1
-------+-------
- | 1234
- | 987
- | -1040
- | 0
-(4 rows)
+SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234';
+ five | f1
+------+------------
+ | 1235
+ | 987
+ | 4294966256
+ | 99999999
+ | 0
+(5 rows)
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 < '1234';
- three | f1
--------+-------
- | 987
- | -1040
- | 0
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234';
+ three | f1
+-------+------
+ | 1234
+ | 987
+ | 0
(3 rows)
-SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 >= '1234';
- two | f1
------+------
- | 1234
- | 1235
+SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234';
+ two | f1
+-----+-----
+ | 987
+ | 0
(2 rows)
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 > '1234';
- one | f1
------+------
- | 1235
-(1 row)
+SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234';
+ four | f1
+------+------------
+ | 1234
+ | 1235
+ | 4294966256
+ | 99999999
+(4 rows)
+
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234';
+ three | f1
+-------+------------
+ | 1235
+ | 4294966256
+ | 99999999
+(3 rows)
DROP TABLE OID_TBL;
INSERT INTO OID_TBL(f1) VALUES ('-1040');
+INSERT INTO OID_TBL(f1) VALUES ('99999999');
+
INSERT INTO OID_TBL(f1) VALUES ('');
-- bad inputs
+
INSERT INTO OID_TBL(f1) VALUES ('asdfasd');
+INSERT INTO OID_TBL(f1) VALUES ('99asdfasd');
-SELECT '' AS five, OID_TBL.*;
+SELECT '' AS six, OID_TBL.*;
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = oid '1234';
+SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 = 1234;
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 <> '1234';
+SELECT '' AS five, o.* FROM OID_TBL o WHERE o.f1 <> '1234';
-SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 <= '1234';
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 <= '1234';
-SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 < '1234';
+SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234';
-SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 >= '1234';
+SELECT '' AS four, o.* FROM OID_TBL o WHERE o.f1 >= '1234';
-SELECT '' AS one, o.* FROM OID_TBL o WHERE o.f1 > '1234';
+SELECT '' AS three, o.* FROM OID_TBL o WHERE o.f1 > '1234';
DROP TABLE OID_TBL;