mirror of
https://github.com/postgres/postgres.git
synced 2025-12-12 02:37:31 +03:00
Detect overflow in integer arithmetic operators (integer, smallint, and
bigint variants). Clean up some inconsistencies in error message wording. Fix scanint8 to allow trailing whitespace in INT64_MIN case. Update int8-exp-three-digits.out, which seems to have been ignored by the last couple of people to modify the int8 regression test, and remove int8-exp-three-digits-win32.out which is thereby exposed as redundant.
This commit is contained in:
@@ -14,7 +14,7 @@ INSERT INTO INT2_TBL(f1) VALUES ('32767');
|
||||
INSERT INTO INT2_TBL(f1) VALUES ('-32767');
|
||||
-- bad input values -- should give errors
|
||||
INSERT INTO INT2_TBL(f1) VALUES ('100000');
|
||||
ERROR: value "100000" is out of range for type shortint
|
||||
ERROR: value "100000" is out of range for type smallint
|
||||
INSERT INTO INT2_TBL(f1) VALUES ('asdf');
|
||||
ERROR: invalid input syntax for integer: "asdf"
|
||||
INSERT INTO INT2_TBL(f1) VALUES (' ');
|
||||
@@ -144,14 +144,15 @@ SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
|
||||
(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)
|
||||
ERROR: smallint out of range
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE abs(f1) < 16384;
|
||||
five | f1 | x
|
||||
------+-------+-------
|
||||
| 0 | 0
|
||||
| 1234 | 2468
|
||||
| -1234 | -2468
|
||||
(3 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
|
||||
five | f1 | x
|
||||
@@ -164,14 +165,16 @@ SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
|
||||
ERROR: smallint out of range
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE f1 < 32766;
|
||||
five | f1 | x
|
||||
------+--------+--------
|
||||
| 0 | 2
|
||||
| 1234 | 1236
|
||||
| -1234 | -1232
|
||||
| 32767 | -32767
|
||||
| -32767 | -32765
|
||||
(5 rows)
|
||||
(4 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
|
||||
five | f1 | x
|
||||
@@ -184,14 +187,16 @@ SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
|
||||
(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)
|
||||
ERROR: smallint out of range
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE f1 > -32767;
|
||||
five | f1 | x
|
||||
------+-------+-------
|
||||
| 0 | -2
|
||||
| 1234 | 1232
|
||||
| -1234 | -1236
|
||||
| 32767 | 32765
|
||||
(4 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
|
||||
five | f1 | x
|
||||
|
||||
@@ -144,64 +144,74 @@ SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
|
||||
(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)
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE abs(f1) < 1073741824;
|
||||
five | f1 | x
|
||||
------+---------+---------
|
||||
| 0 | 0
|
||||
| 123456 | 246912
|
||||
| -123456 | -246912
|
||||
(3 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)
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE abs(f1) < 1073741824;
|
||||
five | f1 | x
|
||||
------+---------+---------
|
||||
| 0 | 0
|
||||
| 123456 | 246912
|
||||
| -123456 | -246912
|
||||
(3 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 < 2147483646;
|
||||
five | f1 | x
|
||||
------+-------------+-------------
|
||||
| 0 | 2
|
||||
| 123456 | 123458
|
||||
| -123456 | -123454
|
||||
| 2147483647 | -2147483647
|
||||
| -2147483647 | -2147483645
|
||||
(5 rows)
|
||||
(4 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 < 2147483646;
|
||||
five | f1 | x
|
||||
------+-------------+-------------
|
||||
| 0 | 2
|
||||
| 123456 | 123458
|
||||
| -123456 | -123454
|
||||
| 2147483647 | -2147483647
|
||||
| -2147483647 | -2147483645
|
||||
(5 rows)
|
||||
(4 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)
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 > -2147483647;
|
||||
five | f1 | x
|
||||
------+------------+------------
|
||||
| 0 | -2
|
||||
| 123456 | 123454
|
||||
| -123456 | -123458
|
||||
| 2147483647 | 2147483645
|
||||
(4 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)
|
||||
ERROR: integer out of range
|
||||
SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 > -2147483647;
|
||||
five | f1 | x
|
||||
------+------------+------------
|
||||
| 0 | -2
|
||||
| 123456 | 123454
|
||||
| -123456 | -123458
|
||||
| 2147483647 | 2147483645
|
||||
(4 rows)
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;
|
||||
five | f1 | x
|
||||
|
||||
@@ -1,300 +0,0 @@
|
||||
--
|
||||
-- INT8
|
||||
-- Test int8 64-bit integers.
|
||||
--
|
||||
CREATE TABLE INT8_TBL(q1 int8, q2 int8);
|
||||
INSERT INTO INT8_TBL VALUES('123','456');
|
||||
INSERT INTO INT8_TBL VALUES('123','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','123');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
|
||||
-- bad inputs
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' ');
|
||||
ERROR: invalid input syntax for type bigint: " "
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('xxx');
|
||||
ERROR: invalid input syntax for type bigint: "xxx"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
|
||||
ERROR: integer out of range
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
|
||||
ERROR: integer out of range
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('- 123');
|
||||
ERROR: invalid input syntax for type bigint: "- 123"
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
|
||||
ERROR: invalid input syntax for type bigint: " 345 5"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('');
|
||||
ERROR: invalid input syntax for type bigint: ""
|
||||
SELECT * FROM INT8_TBL;
|
||||
q1 | q2
|
||||
------------------+-------------------
|
||||
123 | 456
|
||||
123 | 4567890123456789
|
||||
4567890123456789 | 123
|
||||
4567890123456789 | 4567890123456789
|
||||
4567890123456789 | -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL;
|
||||
five | plus | minus
|
||||
------+------------------+-------------------
|
||||
| 123 | -123
|
||||
| 123 | -123
|
||||
| 4567890123456789 | -4567890123456789
|
||||
| 4567890123456789 | -4567890123456789
|
||||
| 4567890123456789 | -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL;
|
||||
five | q1 | q2 | plus
|
||||
------+------------------+-------------------+------------------
|
||||
| 123 | 456 | 579
|
||||
| 123 | 4567890123456789 | 4567890123456912
|
||||
| 4567890123456789 | 123 | 4567890123456912
|
||||
| 4567890123456789 | 4567890123456789 | 9135780246913578
|
||||
| 4567890123456789 | -4567890123456789 | 0
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;
|
||||
five | q1 | q2 | minus
|
||||
------+------------------+-------------------+-------------------
|
||||
| 123 | 456 | -333
|
||||
| 123 | 4567890123456789 | -4567890123456666
|
||||
| 4567890123456789 | 123 | 4567890123456666
|
||||
| 4567890123456789 | 4567890123456789 | 0
|
||||
| 4567890123456789 | -4567890123456789 | 9135780246913578
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
|
||||
WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
|
||||
three | q1 | q2 | multiply
|
||||
-------+------------------+------------------+--------------------
|
||||
| 123 | 456 | 56088
|
||||
| 123 | 4567890123456789 | 561850485185185047
|
||||
| 4567890123456789 | 123 | 561850485185185047
|
||||
(3 rows)
|
||||
|
||||
SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL;
|
||||
five | q1 | q2 | divide
|
||||
------+------------------+-------------------+----------------
|
||||
| 123 | 456 | 0
|
||||
| 123 | 4567890123456789 | 0
|
||||
| 4567890123456789 | 123 | 37137318076884
|
||||
| 4567890123456789 | 4567890123456789 | 1
|
||||
| 4567890123456789 | -4567890123456789 | -1
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q1, float8(q1) FROM INT8_TBL;
|
||||
five | q1 | float8
|
||||
------+------------------+-----------------------
|
||||
| 123 | 123
|
||||
| 123 | 123
|
||||
| 4567890123456789 | 4.56789012345679e+015
|
||||
| 4567890123456789 | 4.56789012345679e+015
|
||||
| 4567890123456789 | 4.56789012345679e+015
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q2, float8(q2) FROM INT8_TBL;
|
||||
five | q2 | float8
|
||||
------+-------------------+------------------------
|
||||
| 456 | 456
|
||||
| 4567890123456789 | 4.56789012345679e+015
|
||||
| 123 | 123
|
||||
| 4567890123456789 | 4.56789012345679e+015
|
||||
| -4567890123456789 | -4.56789012345679e+015
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, 2 * q1 AS "twice int4" FROM INT8_TBL;
|
||||
five | twice int4
|
||||
------+------------------
|
||||
| 246
|
||||
| 246
|
||||
| 9135780246913578
|
||||
| 9135780246913578
|
||||
| 9135780246913578
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS five, q1 * 2 AS "twice int4" FROM INT8_TBL;
|
||||
five | twice int4
|
||||
------+------------------
|
||||
| 246
|
||||
| 246
|
||||
| 9135780246913578
|
||||
| 9135780246913578
|
||||
| 9135780246913578
|
||||
(5 rows)
|
||||
|
||||
-- TO_CHAR()
|
||||
--
|
||||
SELECT '' AS to_char_1, to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
|
||||
FROM INT8_TBL;
|
||||
to_char_1 | to_char | to_char
|
||||
-----------+------------------------+------------------------
|
||||
| 123 | 456
|
||||
| 123 | 4,567,890,123,456,789
|
||||
| 4,567,890,123,456,789 | 123
|
||||
| 4,567,890,123,456,789 | 4,567,890,123,456,789
|
||||
| 4,567,890,123,456,789 | -4,567,890,123,456,789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_2, to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
|
||||
FROM INT8_TBL;
|
||||
to_char_2 | to_char | to_char
|
||||
-----------+--------------------------------+--------------------------------
|
||||
| 123.000,000 | 456.000,000
|
||||
| 123.000,000 | 4,567,890,123,456,789.000,000
|
||||
| 4,567,890,123,456,789.000,000 | 123.000,000
|
||||
| 4,567,890,123,456,789.000,000 | 4,567,890,123,456,789.000,000
|
||||
| 4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
|
||||
FROM INT8_TBL;
|
||||
to_char_3 | to_char | to_char
|
||||
-----------+--------------------+------------------------
|
||||
| <123> | <456.000>
|
||||
| <123> | <4567890123456789.000>
|
||||
| <4567890123456789> | <123.000>
|
||||
| <4567890123456789> | <4567890123456789.000>
|
||||
| <4567890123456789> | 4567890123456789.000
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
|
||||
FROM INT8_TBL;
|
||||
to_char_4 | to_char | to_char
|
||||
-----------+-------------------+-------------------
|
||||
| 123- | -456
|
||||
| 123- | -4567890123456789
|
||||
| 4567890123456789- | -123
|
||||
| 4567890123456789- | -4567890123456789
|
||||
| 4567890123456789- | +4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL;
|
||||
to_char_5 | to_char
|
||||
-----------+-------------------
|
||||
| 456
|
||||
| 4567890123456789
|
||||
| 123
|
||||
| 4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_6, to_char(q2, 'FMS9999999999999999') FROM INT8_TBL;
|
||||
to_char_6 | to_char
|
||||
-----------+-------------------
|
||||
| +456
|
||||
| +4567890123456789
|
||||
| +123
|
||||
| +4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_7, to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;
|
||||
to_char_7 | to_char
|
||||
-----------+--------------------
|
||||
| 456TH
|
||||
| 4567890123456789TH
|
||||
| 123RD
|
||||
| 4567890123456789TH
|
||||
| <4567890123456789>
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_8, to_char(q2, 'SG9999999999999999th') FROM INT8_TBL;
|
||||
to_char_8 | to_char
|
||||
-----------+---------------------
|
||||
| + 456th
|
||||
| +4567890123456789th
|
||||
| + 123rd
|
||||
| +4567890123456789th
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_9, to_char(q2, '0999999999999999') FROM INT8_TBL;
|
||||
to_char_9 | to_char
|
||||
-----------+-------------------
|
||||
| 0000000000000456
|
||||
| 4567890123456789
|
||||
| 0000000000000123
|
||||
| 4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_10, to_char(q2, 'S0999999999999999') FROM INT8_TBL;
|
||||
to_char_10 | to_char
|
||||
------------+-------------------
|
||||
| +0000000000000456
|
||||
| +4567890123456789
|
||||
| +0000000000000123
|
||||
| +4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_11, to_char(q2, 'FM0999999999999999') FROM INT8_TBL;
|
||||
to_char_11 | to_char
|
||||
------------+-------------------
|
||||
| 0000000000000456
|
||||
| 4567890123456789
|
||||
| 0000000000000123
|
||||
| 4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_12, to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;
|
||||
to_char_12 | to_char
|
||||
------------+-----------------------
|
||||
| 456.000
|
||||
| 4567890123456789.000
|
||||
| 123.000
|
||||
| 4567890123456789.000
|
||||
| -4567890123456789.000
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_13, to_char(q2, 'L9999999999999999.000') FROM INT8_TBL;
|
||||
to_char_13 | to_char
|
||||
------------+------------------------
|
||||
| 456.000
|
||||
| 4567890123456789.000
|
||||
| 123.000
|
||||
| 4567890123456789.000
|
||||
| -4567890123456789.000
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;
|
||||
to_char_14 | to_char
|
||||
------------+--------------------
|
||||
| 456.
|
||||
| 4567890123456789.
|
||||
| 123.
|
||||
| 4567890123456789.
|
||||
| -4567890123456789.
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;
|
||||
to_char_15 | to_char
|
||||
------------+-------------------------------------------
|
||||
| +4 5 6 . 0 0 0
|
||||
| +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| +1 2 3 . 0 0 0
|
||||
| +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_16, to_char(q2, '99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL;
|
||||
to_char_16 | to_char
|
||||
------------+-----------------------------------------------------------
|
||||
| text 9999 "text between quote marks" 456
|
||||
| 45678 text 9012 9999 345 "text between quote marks" 6789
|
||||
| text 9999 "text between quote marks" 123
|
||||
| 45678 text 9012 9999 345 "text between quote marks" 6789
|
||||
| -45678 text 9012 9999 345 "text between quote marks" 6789
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_17, to_char(q2, '999999SG9999999999') FROM INT8_TBL;
|
||||
to_char_17 | to_char
|
||||
------------+-------------------
|
||||
| + 456
|
||||
| 456789+0123456789
|
||||
| + 123
|
||||
| 456789+0123456789
|
||||
| 456789-0123456789
|
||||
(5 rows)
|
||||
|
||||
@@ -3,11 +3,26 @@
|
||||
-- Test int8 64-bit integers.
|
||||
--
|
||||
CREATE TABLE INT8_TBL(q1 int8, q2 int8);
|
||||
INSERT INTO INT8_TBL VALUES('123','456');
|
||||
INSERT INTO INT8_TBL VALUES('123','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
|
||||
INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','123');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
|
||||
-- bad inputs
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' ');
|
||||
ERROR: invalid input syntax for integer: " "
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('xxx');
|
||||
ERROR: invalid input syntax for integer: "xxx"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
|
||||
ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
|
||||
ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('- 123');
|
||||
ERROR: invalid input syntax for integer: "- 123"
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
|
||||
ERROR: invalid input syntax for integer: " 345 5"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('');
|
||||
ERROR: invalid input syntax for integer: ""
|
||||
SELECT * FROM INT8_TBL;
|
||||
q1 | q2
|
||||
------------------+-------------------
|
||||
@@ -48,6 +63,8 @@ SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;
|
||||
| 4567890123456789 | -4567890123456789 | 9135780246913578
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL;
|
||||
ERROR: bigint out of range
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
|
||||
WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
|
||||
three | q1 | q2 | multiply
|
||||
@@ -139,7 +156,7 @@ SELECT '' AS to_char_3, to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2
|
||||
| <123> | <4567890123456789.000>
|
||||
| <4567890123456789> | <123.000>
|
||||
| <4567890123456789> | <4567890123456789.000>
|
||||
| <4567890123456789> | 4567890123456789.000
|
||||
| <4567890123456789> | 4567890123456789.000
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
|
||||
@@ -154,12 +171,12 @@ SELECT '' AS to_char_4, to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 *
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_5, to_char(q2, 'MI9999999999999999') FROM INT8_TBL;
|
||||
to_char_5 | to_char
|
||||
-----------+--------------------
|
||||
| 456
|
||||
| 4567890123456789
|
||||
| 123
|
||||
| 4567890123456789
|
||||
to_char_5 | to_char
|
||||
-----------+-------------------
|
||||
| 456
|
||||
| 4567890123456789
|
||||
| 123
|
||||
| 4567890123456789
|
||||
| -4567890123456789
|
||||
(5 rows)
|
||||
|
||||
@@ -256,11 +273,11 @@ SELECT '' AS to_char_14, to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;
|
||||
SELECT '' AS to_char_15, to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;
|
||||
to_char_15 | to_char
|
||||
------------+-------------------------------------------
|
||||
| +4 5 6 . 0 0 0
|
||||
| + 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| +1 2 3 . 0 0 0
|
||||
| + 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| - 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| +4 5 6 . 0 0 0
|
||||
| +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| +1 2 3 . 0 0 0
|
||||
| +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
| -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS to_char_16, to_char(q2, '99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL;
|
||||
|
||||
@@ -10,19 +10,19 @@ INSERT INTO INT8_TBL VALUES('4567890123456789','4567890123456789');
|
||||
INSERT INTO INT8_TBL VALUES('4567890123456789','-4567890123456789');
|
||||
-- bad inputs
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' ');
|
||||
ERROR: invalid input syntax for type bigint: " "
|
||||
ERROR: invalid input syntax for integer: " "
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('xxx');
|
||||
ERROR: invalid input syntax for type bigint: "xxx"
|
||||
ERROR: invalid input syntax for integer: "xxx"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
|
||||
ERROR: integer out of range
|
||||
ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
|
||||
ERROR: integer out of range
|
||||
ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('- 123');
|
||||
ERROR: invalid input syntax for type bigint: "- 123"
|
||||
ERROR: invalid input syntax for integer: "- 123"
|
||||
INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
|
||||
ERROR: invalid input syntax for type bigint: " 345 5"
|
||||
ERROR: invalid input syntax for integer: " 345 5"
|
||||
INSERT INTO INT8_TBL(q1) VALUES ('');
|
||||
ERROR: invalid input syntax for type bigint: ""
|
||||
ERROR: invalid input syntax for integer: ""
|
||||
SELECT * FROM INT8_TBL;
|
||||
q1 | q2
|
||||
------------------+-------------------
|
||||
@@ -63,6 +63,8 @@ SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;
|
||||
| 4567890123456789 | -4567890123456789 | 9135780246913578
|
||||
(5 rows)
|
||||
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL;
|
||||
ERROR: bigint out of range
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
|
||||
WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
|
||||
three | q1 | q2 | multiply
|
||||
|
||||
@@ -146,7 +146,8 @@ SELECT '' AS five, f1 AS "Correlated Field"
|
||||
--
|
||||
SELECT '' AS eight, ss.f1 AS "Correlated Field", ss.f3 AS "Second Field"
|
||||
FROM SUBSELECT_TBL ss
|
||||
WHERE f1 NOT IN (SELECT f1+1 FROM INT4_TBL WHERE f1 != ss.f1);
|
||||
WHERE f1 NOT IN (SELECT f1+1 FROM INT4_TBL
|
||||
WHERE f1 != ss.f1 AND f1 < 2147483647);
|
||||
eight | Correlated Field | Second Field
|
||||
-------+------------------+--------------
|
||||
| 2 | 4
|
||||
|
||||
@@ -7,4 +7,4 @@ float8/.*-qnx=float8-exp-three-digits
|
||||
float8/i.86-pc-mingw32=float8-exp-three-digits-win32
|
||||
float8/i.86-pc-cygwin=float8-small-is-zero
|
||||
int8/.*-qnx=int8-exp-three-digits
|
||||
int8/i.86-pc-mingw32=int8-exp-three-digits-win32
|
||||
int8/i.86-pc-mingw32=int8-exp-three-digits
|
||||
|
||||
@@ -63,14 +63,23 @@ SELECT '' AS three, i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE abs(f1) < 16384;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE f1 < 32766;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
|
||||
WHERE f1 > -32767;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
|
||||
|
||||
@@ -63,16 +63,34 @@ SELECT '' AS three, i.* FROM INT4_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE abs(f1) < 1073741824;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 * int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE abs(f1) < 1073741824;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 < 2147483646;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 + int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 < 2147483646;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int2 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 > -2147483647;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 - int4 '2' AS x FROM INT4_TBL i
|
||||
WHERE f1 > -2147483647;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 / int2 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
SELECT '' AS five, i.f1, i.f1 / int4 '2' AS x FROM INT4_TBL i;
|
||||
|
||||
@@ -25,6 +25,7 @@ SELECT '' AS five, q1 AS plus, -q1 AS minus FROM INT8_TBL;
|
||||
|
||||
SELECT '' AS five, q1, q2, q1 + q2 AS plus FROM INT8_TBL;
|
||||
SELECT '' AS five, q1, q2, q1 - q2 AS minus FROM INT8_TBL;
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL;
|
||||
SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL
|
||||
WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
|
||||
SELECT '' AS five, q1, q2, q1 / q2 AS divide FROM INT8_TBL;
|
||||
|
||||
@@ -71,7 +71,8 @@ SELECT '' AS five, f1 AS "Correlated Field"
|
||||
|
||||
SELECT '' AS eight, ss.f1 AS "Correlated Field", ss.f3 AS "Second Field"
|
||||
FROM SUBSELECT_TBL ss
|
||||
WHERE f1 NOT IN (SELECT f1+1 FROM INT4_TBL WHERE f1 != ss.f1);
|
||||
WHERE f1 NOT IN (SELECT f1+1 FROM INT4_TBL
|
||||
WHERE f1 != ss.f1 AND f1 < 2147483647);
|
||||
|
||||
select q1, float8(count(*)) / (select count(*) from int8_tbl)
|
||||
from int8_tbl group by q1 order by q1;
|
||||
|
||||
Reference in New Issue
Block a user