diff options
| author | Tom Lane | 2022-12-14 22:50:24 +0000 |
|---|---|---|
| committer | Tom Lane | 2022-12-14 22:50:24 +0000 |
| commit | 47f3f97fcdee28e3eb70cd2ebfd7b4899570b018 (patch) | |
| tree | 443f2edbb1c19fe1925f87f30e0edf66bc557b30 /src/test/regress | |
| parent | 332741e73980401895e027eb697bb472860036fb (diff) | |
Convert a few more datatype input functions to report errors softly.
Convert assorted internal-ish datatypes, namely aclitemin,
int2vectorin, oidin, oidvectorin, pg_lsn_in, pg_snapshot_in,
and tidin to the new style.
(Some others you might expect to find in this group, such as
cidin and xidin, need no changes because they never throw
errors at all. That seems a little cheesy ... but it is not in
the charter of this patch series to add new error conditions.)
Amul Sul, minor mods by me
Discussion: https://postgr.es/m/CAAJ_b97KeDWUdpTKGOaFYPv0OicjOu6EW+QYWj-Ywrgj_aEy1g@mail.gmail.com
Diffstat (limited to 'src/test/regress')
| -rw-r--r-- | src/test/regress/expected/int2.out | 19 | ||||
| -rw-r--r-- | src/test/regress/expected/oid.out | 62 | ||||
| -rw-r--r-- | src/test/regress/expected/pg_lsn.out | 13 | ||||
| -rw-r--r-- | src/test/regress/expected/privileges.out | 43 | ||||
| -rw-r--r-- | src/test/regress/expected/tid.out | 25 | ||||
| -rw-r--r-- | src/test/regress/expected/xid.out | 31 | ||||
| -rw-r--r-- | src/test/regress/sql/int2.sql | 5 | ||||
| -rw-r--r-- | src/test/regress/sql/oid.sql | 14 | ||||
| -rw-r--r-- | src/test/regress/sql/pg_lsn.sql | 4 | ||||
| -rw-r--r-- | src/test/regress/sql/privileges.sql | 9 | ||||
| -rw-r--r-- | src/test/regress/sql/tid.sql | 6 | ||||
| -rw-r--r-- | src/test/regress/sql/xid.sql | 7 |
12 files changed, 238 insertions, 0 deletions
diff --git a/src/test/regress/expected/int2.out b/src/test/regress/expected/int2.out index 08e2f9f9dca..08c333b75a2 100644 --- a/src/test/regress/expected/int2.out +++ b/src/test/regress/expected/int2.out @@ -70,6 +70,25 @@ SELECT pg_input_error_message('50000', 'int2'); value "50000" is out of range for type smallint (1 row) +-- While we're here, check int2vector as well +SELECT pg_input_is_valid(' 1 3 5 ', 'int2vector'); + pg_input_is_valid +------------------- + t +(1 row) + +SELECT pg_input_error_message('1 asdf', 'int2vector'); + pg_input_error_message +------------------------------------------------ + invalid input syntax for type smallint: "asdf" +(1 row) + +SELECT pg_input_error_message('50000', 'int2vector'); + pg_input_error_message +------------------------------------------------- + value "50000" is out of range for type smallint +(1 row) + SELECT * FROM INT2_TBL AS f(a, b); ERROR: table "f" has 1 columns available but 2 columns specified SELECT * FROM (TABLE int2_tbl) AS s (a, b); diff --git a/src/test/regress/expected/oid.out b/src/test/regress/expected/oid.out index 89093734536..b664bab5f93 100644 --- a/src/test/regress/expected/oid.out +++ b/src/test/regress/expected/oid.out @@ -65,6 +65,68 @@ SELECT * FROM OID_TBL; 15 (8 rows) +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('1234', 'oid'); + pg_input_is_valid +------------------- + t +(1 row) + +SELECT pg_input_is_valid('01XYZ', 'oid'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('01XYZ', 'oid'); + pg_input_error_message +-------------------------------------------- + invalid input syntax for type oid: "01XYZ" +(1 row) + +SELECT pg_input_is_valid('9999999999', 'oid'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('9999999999', 'oid'); + pg_input_error_message +------------------------------------------------- + value "9999999999" is out of range for type oid +(1 row) + +-- While we're here, check oidvector as well +SELECT pg_input_is_valid(' 1 2 4 ', 'oidvector'); + pg_input_is_valid +------------------- + t +(1 row) + +SELECT pg_input_is_valid('01 01XYZ', 'oidvector'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('01 01XYZ', 'oidvector'); + pg_input_error_message +------------------------------------------ + invalid input syntax for type oid: "XYZ" +(1 row) + +SELECT pg_input_is_valid('01 9999999999', 'oidvector'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('01 9999999999', 'oidvector'); + pg_input_error_message +------------------------------------------------- + value "9999999999" is out of range for type oid +(1 row) + SELECT o.* FROM OID_TBL o WHERE o.f1 = 1234; f1 ------ diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out index 99a748a6a76..01501f8c9bf 100644 --- a/src/test/regress/expected/pg_lsn.out +++ b/src/test/regress/expected/pg_lsn.out @@ -26,6 +26,19 @@ INSERT INTO PG_LSN_TBL VALUES ('/ABCD'); ERROR: invalid input syntax for type pg_lsn: "/ABCD" LINE 1: INSERT INTO PG_LSN_TBL VALUES ('/ABCD'); ^ +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('16AE7F7', 'pg_lsn'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('16AE7F7', 'pg_lsn'); + pg_input_error_message +------------------------------------------------- + invalid input syntax for type pg_lsn: "16AE7F7" +(1 row) + -- Min/Max aggregation SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL; min | max diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index 169b364b22f..34c26a804a7 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -2233,6 +2233,49 @@ SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, 'SELECT, fake_privilege', FALSE); -- error ERROR: unrecognized privilege type: "fake_privilege" +-- Test non-throwing aclitem I/O +SELECT pg_input_is_valid('regress_priv_user1=r/regress_priv_user2', 'aclitem'); + pg_input_is_valid +------------------- + t +(1 row) + +SELECT pg_input_is_valid('regress_priv_user1=r/', 'aclitem'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('regress_priv_user1=r/', 'aclitem'); + pg_input_error_message +--------------------------------- + a name must follow the "/" sign +(1 row) + +SELECT pg_input_is_valid('regress_priv_user1=r/regress_no_such_user', 'aclitem'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('regress_priv_user1=r/regress_no_such_user', 'aclitem'); + pg_input_error_message +-------------------------------------------- + role "regress_no_such_user" does not exist +(1 row) + +SELECT pg_input_is_valid('regress_priv_user1=rY', 'aclitem'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('regress_priv_user1=rY', 'aclitem'); + pg_input_error_message +---------------------------------------------------------- + invalid mode character: must be one of "arwdDxtXUCTcsAm" +(1 row) + -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. diff --git a/src/test/regress/expected/tid.out b/src/test/regress/expected/tid.out index 8cd6d605952..ff67ed43f0a 100644 --- a/src/test/regress/expected/tid.out +++ b/src/test/regress/expected/tid.out @@ -17,6 +17,31 @@ SELECT '(1,65536)'::tid; -- error ERROR: invalid input syntax for type tid: "(1,65536)" LINE 1: SELECT '(1,65536)'::tid; ^ +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('(0)', 'tid'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('(0)', 'tid'); + pg_input_error_message +------------------------------------------ + invalid input syntax for type tid: "(0)" +(1 row) + +SELECT pg_input_is_valid('(0,-1)', 'tid'); + pg_input_is_valid +------------------- + f +(1 row) + +SELECT pg_input_error_message('(0,-1)', 'tid'); + pg_input_error_message +--------------------------------------------- + invalid input syntax for type tid: "(0,-1)" +(1 row) + -- tests for functions related to TID handling CREATE TABLE tid_tab (a int); -- min() and max() for TIDs diff --git a/src/test/regress/expected/xid.out b/src/test/regress/expected/xid.out index d8e76f3321f..c7b8d299c84 100644 --- a/src/test/regress/expected/xid.out +++ b/src/test/regress/expected/xid.out @@ -181,6 +181,37 @@ select '12:16:14,13'::pg_snapshot; ERROR: invalid input syntax for type pg_snapshot: "12:16:14,13" LINE 1: select '12:16:14,13'::pg_snapshot; ^ +-- also try it with non-error-throwing API +select pg_input_is_valid('12:13:', 'pg_snapshot'); + pg_input_is_valid +------------------- + t +(1 row) + +select pg_input_is_valid('31:12:', 'pg_snapshot'); + pg_input_is_valid +------------------- + f +(1 row) + +select pg_input_error_message('31:12:', 'pg_snapshot'); + pg_input_error_message +----------------------------------------------------- + invalid input syntax for type pg_snapshot: "31:12:" +(1 row) + +select pg_input_is_valid('12:16:14,13', 'pg_snapshot'); + pg_input_is_valid +------------------- + f +(1 row) + +select pg_input_error_message('12:16:14,13', 'pg_snapshot'); + pg_input_error_message +---------------------------------------------------------- + invalid input syntax for type pg_snapshot: "12:16:14,13" +(1 row) + create temp table snapshot_test ( nr integer, snap pg_snapshot diff --git a/src/test/regress/sql/int2.sql b/src/test/regress/sql/int2.sql index ad30c2feaa1..a812235ee50 100644 --- a/src/test/regress/sql/int2.sql +++ b/src/test/regress/sql/int2.sql @@ -23,6 +23,11 @@ SELECT pg_input_is_valid('asdf', 'int2'); SELECT pg_input_is_valid('50000', 'int2'); SELECT pg_input_error_message('50000', 'int2'); +-- While we're here, check int2vector as well +SELECT pg_input_is_valid(' 1 3 5 ', 'int2vector'); +SELECT pg_input_error_message('1 asdf', 'int2vector'); +SELECT pg_input_error_message('50000', 'int2vector'); + SELECT * FROM INT2_TBL AS f(a, b); SELECT * FROM (TABLE int2_tbl) AS s (a, b); diff --git a/src/test/regress/sql/oid.sql b/src/test/regress/sql/oid.sql index 25b4b68a6a0..39937c2f1d3 100644 --- a/src/test/regress/sql/oid.sql +++ b/src/test/regress/sql/oid.sql @@ -28,6 +28,20 @@ INSERT INTO OID_TBL(f1) VALUES ('-23582358720398502385'); SELECT * FROM OID_TBL; +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('1234', 'oid'); +SELECT pg_input_is_valid('01XYZ', 'oid'); +SELECT pg_input_error_message('01XYZ', 'oid'); +SELECT pg_input_is_valid('9999999999', 'oid'); +SELECT pg_input_error_message('9999999999', 'oid'); + +-- While we're here, check oidvector as well +SELECT pg_input_is_valid(' 1 2 4 ', 'oidvector'); +SELECT pg_input_is_valid('01 01XYZ', 'oidvector'); +SELECT pg_input_error_message('01 01XYZ', 'oidvector'); +SELECT pg_input_is_valid('01 9999999999', 'oidvector'); +SELECT pg_input_error_message('01 9999999999', 'oidvector'); + SELECT o.* FROM OID_TBL o WHERE o.f1 = 1234; SELECT o.* FROM OID_TBL o WHERE o.f1 <> '1234'; diff --git a/src/test/regress/sql/pg_lsn.sql b/src/test/regress/sql/pg_lsn.sql index 615368ba960..3d57d66e0c0 100644 --- a/src/test/regress/sql/pg_lsn.sql +++ b/src/test/regress/sql/pg_lsn.sql @@ -15,6 +15,10 @@ INSERT INTO PG_LSN_TBL VALUES (' 0/12345678'); INSERT INTO PG_LSN_TBL VALUES ('ABCD/'); INSERT INTO PG_LSN_TBL VALUES ('/ABCD'); +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('16AE7F7', 'pg_lsn'); +SELECT pg_input_error_message('16AE7F7', 'pg_lsn'); + -- Min/Max aggregation SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL; diff --git a/src/test/regress/sql/privileges.sql b/src/test/regress/sql/privileges.sql index b2db1c6dd56..39aa0b4ecf7 100644 --- a/src/test/regress/sql/privileges.sql +++ b/src/test/regress/sql/privileges.sql @@ -1430,6 +1430,15 @@ SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, SELECT makeaclitem('regress_priv_user1'::regrole, 'regress_priv_user2'::regrole, 'SELECT, fake_privilege', FALSE); -- error +-- Test non-throwing aclitem I/O +SELECT pg_input_is_valid('regress_priv_user1=r/regress_priv_user2', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=r/', 'aclitem'); +SELECT pg_input_error_message('regress_priv_user1=r/', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=r/regress_no_such_user', 'aclitem'); +SELECT pg_input_error_message('regress_priv_user1=r/regress_no_such_user', 'aclitem'); +SELECT pg_input_is_valid('regress_priv_user1=rY', 'aclitem'); +SELECT pg_input_error_message('regress_priv_user1=rY', 'aclitem'); + -- -- Testing blanket default grants is very hazardous since it might change -- the privileges attached to objects created by concurrent regression tests. diff --git a/src/test/regress/sql/tid.sql b/src/test/regress/sql/tid.sql index 990d314a5f8..8196194c04f 100644 --- a/src/test/regress/sql/tid.sql +++ b/src/test/regress/sql/tid.sql @@ -9,6 +9,12 @@ SELECT SELECT '(4294967296,1)'::tid; -- error SELECT '(1,65536)'::tid; -- error +-- Also try it with non-error-throwing API +SELECT pg_input_is_valid('(0)', 'tid'); +SELECT pg_input_error_message('(0)', 'tid'); +SELECT pg_input_is_valid('(0,-1)', 'tid'); +SELECT pg_input_error_message('(0,-1)', 'tid'); + -- tests for functions related to TID handling diff --git a/src/test/regress/sql/xid.sql b/src/test/regress/sql/xid.sql index bee17e63643..2289803681b 100644 --- a/src/test/regress/sql/xid.sql +++ b/src/test/regress/sql/xid.sql @@ -68,6 +68,13 @@ select '0:1:'::pg_snapshot; select '12:13:0'::pg_snapshot; select '12:16:14,13'::pg_snapshot; +-- also try it with non-error-throwing API +select pg_input_is_valid('12:13:', 'pg_snapshot'); +select pg_input_is_valid('31:12:', 'pg_snapshot'); +select pg_input_error_message('31:12:', 'pg_snapshot'); +select pg_input_is_valid('12:16:14,13', 'pg_snapshot'); +select pg_input_error_message('12:16:14,13', 'pg_snapshot'); + create temp table snapshot_test ( nr integer, snap pg_snapshot |
