diff --git a/src/test/regress/expected/int2-too-large.out b/src/test/regress/expected/int2-too-large.out new file mode 100644 index 0000000000..03e7a0c092 --- /dev/null +++ b/src/test/regress/expected/int2-too-large.out @@ -0,0 +1,215 @@ +-- +-- INT2 +-- NOTE: int2 operators never check for over/underflow! +-- Some of these answers are consequently numerically incorrect. +-- +CREATE TABLE INT2_TBL(f1 int2); +INSERT INTO INT2_TBL(f1) VALUES ('0'); +INSERT INTO INT2_TBL(f1) VALUES ('1234'); +INSERT INTO INT2_TBL(f1) VALUES ('-1234'); +INSERT INTO INT2_TBL(f1) VALUES ('34.5'); +ERROR: pg_atoi: error in "34.5": can't parse ".5" +-- largest and smallest values +INSERT INTO INT2_TBL(f1) VALUES ('32767'); +INSERT INTO INT2_TBL(f1) VALUES ('-32767'); +-- bad input values -- should give warnings +INSERT INTO INT2_TBL(f1) VALUES ('100000'); +ERROR: pg_atoi: error reading "100000": Result too large +INSERT INTO INT2_TBL(f1) VALUES ('asdf'); +ERROR: pg_atoi: error in "asdf": can't parse "asdf" +SELECT '' AS five, INT2_TBL.*; + five | f1 +------+-------- + | 0 + | 1234 + | -1234 + | 32767 + | -32767 +(5 rows) + +SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0'; + four | f1 +------+-------- + | 1234 + | -1234 + | 32767 + | -32767 +(4 rows) + +SELECT '' AS four, i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0'; + four | f1 +------+-------- + | 1234 + | -1234 + | 32767 + | -32767 +(4 rows) + +SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int2 '0'; + one | f1 +-----+---- + | 0 +(1 row) + +SELECT '' AS one, i.* FROM INT2_TBL i WHERE i.f1 = int4 '0'; + one | f1 +-----+---- + | 0 +(1 row) + +SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int2 '0'; + two | f1 +-----+-------- + | -1234 + | -32767 +(2 rows) + +SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 < int4 '0'; + two | f1 +-----+-------- + | -1234 + | -32767 +(2 rows) + +SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0'; + three | f1 +-------+-------- + | 0 + | -1234 + | -32767 +(3 rows) + +SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0'; + three | f1 +-------+-------- + | 0 + | -1234 + | -32767 +(3 rows) + +SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int2 '0'; + two | f1 +-----+------- + | 1234 + | 32767 +(2 rows) + +SELECT '' AS two, i.* FROM INT2_TBL i WHERE i.f1 > int4 '0'; + two | f1 +-----+------- + | 1234 + | 32767 +(2 rows) + +SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0'; + three | f1 +-------+------- + | 0 + | 1234 + | 32767 +(3 rows) + +SELECT '' AS three, i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0'; + three | f1 +-------+------- + | 0 + | 1234 + | 32767 +(3 rows) + +-- positive odds +SELECT '' AS one, i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1'; + one | f1 +-----+------- + | 32767 +(1 row) + +-- any evens +SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0'; + three | f1 +-------+------- + | 0 + | 1234 + | -1234 +(3 rows) + +SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+------- + | 0 | 0 + | 1234 | 2468 + | -1234 | -2468 + | 32767 | -2 + | -32767 | 2 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | 0 + | 1234 | 2468 + | -1234 | -2468 + | 32767 | 65534 + | -32767 | -65534 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | 2 + | 1234 | 1236 + | -1234 | -1232 + | 32767 | -32767 + | -32767 | -32765 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | 2 + | 1234 | 1236 + | -1234 | -1232 + | 32767 | 32769 + | -32767 | -32765 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+------- + | 0 | -2 + | 1234 | 1232 + | -1234 | -1236 + | 32767 | 32765 + | -32767 | 32767 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | -2 + | 1234 | 1232 + | -1234 | -1236 + | 32767 | 32765 + | -32767 | -32769 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | 0 + | 1234 | 617 + | -1234 | -617 + | 32767 | 16383 + | -32767 | -16383 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i; + five | f1 | x +------+--------+-------- + | 0 | 0 + | 1234 | 617 + | -1234 | -617 + | 32767 | 16383 + | -32767 | -16383 +(5 rows) + diff --git a/src/test/regress/expected/int4-too-large.out b/src/test/regress/expected/int4-too-large.out new file mode 100644 index 0000000000..c558f91939 --- /dev/null +++ b/src/test/regress/expected/int4-too-large.out @@ -0,0 +1,315 @@ +-- +-- INT4 +-- WARNING: int4 operators never check for over/underflow! +-- Some of these answers are consequently numerically incorrect. +-- +CREATE TABLE INT4_TBL(f1 int4); +INSERT INTO INT4_TBL(f1) VALUES ('0'); +INSERT INTO INT4_TBL(f1) VALUES ('123456'); +INSERT INTO INT4_TBL(f1) VALUES ('-123456'); +INSERT INTO INT4_TBL(f1) VALUES ('34.5'); +ERROR: pg_atoi: error in "34.5": can't parse ".5" +-- largest and smallest values +INSERT INTO INT4_TBL(f1) VALUES ('2147483647'); +INSERT INTO INT4_TBL(f1) VALUES ('-2147483647'); +-- bad input values -- should give warnings +INSERT INTO INT4_TBL(f1) VALUES ('1000000000000'); +ERROR: pg_atoi: error reading "1000000000000": Result too large +INSERT INTO INT4_TBL(f1) VALUES ('asdf'); +ERROR: pg_atoi: error in "asdf": can't parse "asdf" +SELECT '' AS five, INT4_TBL.*; + five | f1 +------+------------- + | 0 + | 123456 + | -123456 + | 2147483647 + | -2147483647 +(5 rows) + +SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int2 '0'; + four | f1 +------+------------- + | 123456 + | -123456 + | 2147483647 + | -2147483647 +(4 rows) + +SELECT '' AS four, i.* FROM INT4_TBL i WHERE i.f1 <> int4 '0'; + four | f1 +------+------------- + | 123456 + | -123456 + | 2147483647 + | -2147483647 +(4 rows) + +SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int2 '0'; + one | f1 +-----+---- + | 0 +(1 row) + +SELECT '' AS one, i.* FROM INT4_TBL i WHERE i.f1 = int4 '0'; + one | f1 +-----+---- + | 0 +(1 row) + +SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int2 '0'; + two | f1 +-----+------------- + | -123456 + | -2147483647 +(2 rows) + +SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 < int4 '0'; + two | f1 +-----+------------- + | -123456 + | -2147483647 +(2 rows) + +SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int2 '0'; + three | f1 +-------+------------- + | 0 + | -123456 + | -2147483647 +(3 rows) + +SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 <= int4 '0'; + three | f1 +-------+------------- + | 0 + | -123456 + | -2147483647 +(3 rows) + +SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int2 '0'; + two | f1 +-----+------------ + | 123456 + | 2147483647 +(2 rows) + +SELECT '' AS two, i.* FROM INT4_TBL i WHERE i.f1 > int4 '0'; + two | f1 +-----+------------ + | 123456 + | 2147483647 +(2 rows) + +SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int2 '0'; + three | f1 +-------+------------ + | 0 + | 123456 + | 2147483647 +(3 rows) + +SELECT '' AS three, i.* FROM INT4_TBL i WHERE i.f1 >= int4 '0'; + three | f1 +-------+------------ + | 0 + | 123456 + | 2147483647 +(3 rows) + +-- positive odds +SELECT '' AS one, i.* FROM INT4_TBL i WHERE (i.f1 % int2 '2') = int2 '1'; + one | f1 +-----+------------ + | 2147483647 +(1 row) + +-- any evens +SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0'; + three | f1 +-------+--------- + | 0 + | 123456 + | -123456 +(3 rows) + +SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+--------- + | 0 | 0 + | 123456 | 246912 + | -123456 | -246912 + | 2147483647 | -2 + | -2147483647 | 2 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+--------- + | 0 | 0 + | 123456 | 246912 + | -123456 | -246912 + | 2147483647 | -2 + | -2147483647 | 2 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------- + | 0 | 2 + | 123456 | 123458 + | -123456 | -123454 + | 2147483647 | -2147483647 + | -2147483647 | -2147483645 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------- + | 0 | 2 + | 123456 | 123458 + | -123456 | -123454 + | 2147483647 | -2147483647 + | -2147483647 | -2147483645 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------ + | 0 | -2 + | 123456 | 123454 + | -123456 | -123458 + | 2147483647 | 2147483645 + | -2147483647 | 2147483647 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------ + | 0 | -2 + | 123456 | 123454 + | -123456 | -123458 + | 2147483647 | 2147483645 + | -2147483647 | 2147483647 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------- + | 0 | 0 + | 123456 | 61728 + | -123456 | -61728 + | 2147483647 | 1073741823 + | -2147483647 | -1073741823 +(5 rows) + +SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i; + five | f1 | x +------+-------------+------------- + | 0 | 0 + | 123456 | 61728 + | -123456 | -61728 + | 2147483647 | 1073741823 + | -2147483647 | -1073741823 +(5 rows) + +-- +-- more complex expressions +-- +-- variations on unary minus parsing +SELECT -2+3 AS one; + one +----- + 1 +(1 row) + +SELECT 4-2 AS two; + two +----- + 2 +(1 row) + +SELECT 2- -1 AS three; + three +------- + 3 +(1 row) + +SELECT 2 - -2 AS four; + four +------ + 4 +(1 row) + +SELECT int2 '2' * int2 '2' = int2 '16' / int2 '4' AS true; + true +------ + t +(1 row) + +SELECT int4 '2' * int2 '2' = int2 '16' / int4 '4' AS true; + true +------ + t +(1 row) + +SELECT int2 '2' * int4 '2' = int4 '16' / int2 '4' AS true; + true +------ + t +(1 row) + +SELECT int4 '1000' < int4 '999' AS false; + false +------- + f +(1 row) + +SELECT 4! AS twenty_four; + twenty_four +------------- + 24 +(1 row) + +SELECT !!3 AS six; + six +----- + 6 +(1 row) + +SELECT 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 AS ten; + ten +----- + 10 +(1 row) + +SELECT 2 + 2 / 2 AS three; + three +------- + 3 +(1 row) + +SELECT (2 + 2) / 2 AS two; + two +----- + 2 +(1 row) + +SELECT dsqrt(float8 '64') AS eight; + eight +------- + 8 +(1 row) + +SELECT |/float8 '64' AS eight; + eight +------- + 8 +(1 row) + +SELECT ||/float8 '27' AS three; + three +------- + 3 +(1 row) +