mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-13 17:19:43 +02:00
93fcbd140a
rather than just being aliases for int4in/int4out. Give type Oid a full set of comparison operators that do proper unsigned comparison, instead of reusing the int4 comparators. Since pg_dump is now doing unsigned comparisons of OIDs, it is now *necessary* that we play by the rules here. In fact, given that btoidcmp() has been doing unsigned comparison for quite some time, it seems likely that we have index- corruption problems in 7.0 and before once the Oid counter goes past 2G. Fixing these operators is a necessary step before we can think about 8-byte Oid, too.
76 lines
1.6 KiB
Plaintext
76 lines
1.6 KiB
Plaintext
--
|
|
-- OID
|
|
--
|
|
CREATE TABLE OID_TBL(f1 oid);
|
|
INSERT INTO OID_TBL(f1) VALUES ('1234');
|
|
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: 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 = 1234;
|
|
one | f1
|
|
-----+------
|
|
| 1234
|
|
(1 row)
|
|
|
|
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
|
|
-------+------
|
|
| 1234
|
|
| 987
|
|
| 0
|
|
(3 rows)
|
|
|
|
SELECT '' AS two, o.* FROM OID_TBL o WHERE o.f1 < '1234';
|
|
two | f1
|
|
-----+-----
|
|
| 987
|
|
| 0
|
|
(2 rows)
|
|
|
|
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;
|