1091 lines
34 KiB
Plaintext
1091 lines
34 KiB
Plaintext
--
|
|
-- INT8
|
|
-- Test int8 64-bit integers.
|
|
--
|
|
-- int8_tbl was already created and filled in test_setup.sql.
|
|
-- Here we just try to insert bad values.
|
|
INSERT INTO INT8_TBL(q1) VALUES (' ');
|
|
ERROR: invalid input syntax for type bigint: " "
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' ');
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES ('xxx');
|
|
ERROR: invalid input syntax for type bigint: "xxx"
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('xxx');
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
|
|
ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('39082035902395802938502938...
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
|
|
ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340...
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES ('- 123');
|
|
ERROR: invalid input syntax for type bigint: "- 123"
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('- 123');
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
|
|
ERROR: invalid input syntax for type bigint: " 345 5"
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
|
|
^
|
|
INSERT INTO INT8_TBL(q1) VALUES ('');
|
|
ERROR: invalid input syntax for type bigint: ""
|
|
LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('');
|
|
^
|
|
SELECT * FROM INT8_TBL;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(5 rows)
|
|
|
|
-- Also try it with non-error-throwing API
|
|
SELECT pg_input_is_valid('34', 'int8');
|
|
pg_input_is_valid
|
|
-------------------
|
|
t
|
|
(1 row)
|
|
|
|
SELECT pg_input_is_valid('asdf', 'int8');
|
|
pg_input_is_valid
|
|
-------------------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT pg_input_is_valid('10000000000000000000', 'int8');
|
|
pg_input_is_valid
|
|
-------------------
|
|
f
|
|
(1 row)
|
|
|
|
SELECT * FROM pg_input_error_info('10000000000000000000', 'int8');
|
|
message | detail | hint | sql_error_code
|
|
--------------------------------------------------------------+--------+------+----------------
|
|
value "10000000000000000000" is out of range for type bigint | | | 22003
|
|
(1 row)
|
|
|
|
-- int8/int8 cmp
|
|
SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;
|
|
q1 | q2
|
|
----+----
|
|
(0 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(2 rows)
|
|
|
|
-- int8/int4 cmp
|
|
SELECT * FROM INT8_TBL WHERE q2 = 456;
|
|
q1 | q2
|
|
-----+-----
|
|
123 | 456
|
|
(1 row)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <> 456;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(4 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 < 456;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 > 456;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <= 456;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 >= 456;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(3 rows)
|
|
|
|
-- int4/int8 cmp
|
|
SELECT * FROM INT8_TBL WHERE 123 = q1;
|
|
q1 | q2
|
|
-----+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE 123 <> q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE 123 < q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE 123 > q1;
|
|
q1 | q2
|
|
----+----
|
|
(0 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE 123 <= q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE 123 >= q1;
|
|
q1 | q2
|
|
-----+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
(2 rows)
|
|
|
|
-- int8/int2 cmp
|
|
SELECT * FROM INT8_TBL WHERE q2 = '456'::int2;
|
|
q1 | q2
|
|
-----+-----
|
|
123 | 456
|
|
(1 row)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(4 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 < '456'::int2;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 > '456'::int2;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
4567890123456789 | 123
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;
|
|
q1 | q2
|
|
------------------+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 4567890123456789
|
|
(3 rows)
|
|
|
|
-- int2/int8 cmp
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 = q1;
|
|
q1 | q2
|
|
-----+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 < q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(3 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 > q1;
|
|
q1 | q2
|
|
----+----
|
|
(0 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;
|
|
q1 | q2
|
|
------------------+-------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
4567890123456789 | 123
|
|
4567890123456789 | 4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;
|
|
q1 | q2
|
|
-----+------------------
|
|
123 | 456
|
|
123 | 4567890123456789
|
|
(2 rows)
|
|
|
|
SELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;
|
|
plus | minus
|
|
------------------+-------------------
|
|
123 | -123
|
|
123 | -123
|
|
4567890123456789 | -4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
4567890123456789 | -4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;
|
|
q1 | q2 | plus
|
|
------------------+-------------------+------------------
|
|
123 | 456 | 579
|
|
123 | 4567890123456789 | 4567890123456912
|
|
4567890123456789 | 123 | 4567890123456912
|
|
4567890123456789 | 4567890123456789 | 9135780246913578
|
|
4567890123456789 | -4567890123456789 | 0
|
|
(5 rows)
|
|
|
|
SELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;
|
|
q1 | q2 | minus
|
|
------------------+-------------------+-------------------
|
|
123 | 456 | -333
|
|
123 | 4567890123456789 | -4567890123456666
|
|
4567890123456789 | 123 | 4567890123456666
|
|
4567890123456789 | 4567890123456789 | 0
|
|
4567890123456789 | -4567890123456789 | 9135780246913578
|
|
(5 rows)
|
|
|
|
SELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;
|
|
ERROR: bigint out of range
|
|
SELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL
|
|
WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
|
|
q1 | q2 | multiply
|
|
------------------+------------------+--------------------
|
|
123 | 456 | 56088
|
|
123 | 4567890123456789 | 561850485185185047
|
|
4567890123456789 | 123 | 561850485185185047
|
|
(3 rows)
|
|
|
|
SELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;
|
|
q1 | q2 | divide | mod
|
|
------------------+-------------------+----------------+-----
|
|
123 | 456 | 0 | 123
|
|
123 | 4567890123456789 | 0 | 123
|
|
4567890123456789 | 123 | 37137318076884 | 57
|
|
4567890123456789 | 4567890123456789 | 1 | 0
|
|
4567890123456789 | -4567890123456789 | -1 | 0
|
|
(5 rows)
|
|
|
|
SELECT q1, float8(q1) FROM INT8_TBL;
|
|
q1 | float8
|
|
------------------+-----------------------
|
|
123 | 123
|
|
123 | 123
|
|
4567890123456789 | 4.567890123456789e+15
|
|
4567890123456789 | 4.567890123456789e+15
|
|
4567890123456789 | 4.567890123456789e+15
|
|
(5 rows)
|
|
|
|
SELECT q2, float8(q2) FROM INT8_TBL;
|
|
q2 | float8
|
|
-------------------+------------------------
|
|
456 | 456
|
|
4567890123456789 | 4.567890123456789e+15
|
|
123 | 123
|
|
4567890123456789 | 4.567890123456789e+15
|
|
-4567890123456789 | -4.567890123456789e+15
|
|
(5 rows)
|
|
|
|
SELECT 37 + q1 AS plus4 FROM INT8_TBL;
|
|
plus4
|
|
------------------
|
|
160
|
|
160
|
|
4567890123456826
|
|
4567890123456826
|
|
4567890123456826
|
|
(5 rows)
|
|
|
|
SELECT 37 - q1 AS minus4 FROM INT8_TBL;
|
|
minus4
|
|
-------------------
|
|
-86
|
|
-86
|
|
-4567890123456752
|
|
-4567890123456752
|
|
-4567890123456752
|
|
(5 rows)
|
|
|
|
SELECT 2 * q1 AS "twice int4" FROM INT8_TBL;
|
|
twice int4
|
|
------------------
|
|
246
|
|
246
|
|
9135780246913578
|
|
9135780246913578
|
|
9135780246913578
|
|
(5 rows)
|
|
|
|
SELECT q1 * 2 AS "twice int4" FROM INT8_TBL;
|
|
twice int4
|
|
------------------
|
|
246
|
|
246
|
|
9135780246913578
|
|
9135780246913578
|
|
9135780246913578
|
|
(5 rows)
|
|
|
|
-- int8 op int4
|
|
SELECT q1 + 42::int4 AS "8plus4", q1 - 42::int4 AS "8minus4", q1 * 42::int4 AS "8mul4", q1 / 42::int4 AS "8div4" FROM INT8_TBL;
|
|
8plus4 | 8minus4 | 8mul4 | 8div4
|
|
------------------+------------------+--------------------+-----------------
|
|
165 | 81 | 5166 | 2
|
|
165 | 81 | 5166 | 2
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
(5 rows)
|
|
|
|
-- int4 op int8
|
|
SELECT 246::int4 + q1 AS "4plus8", 246::int4 - q1 AS "4minus8", 246::int4 * q1 AS "4mul8", 246::int4 / q1 AS "4div8" FROM INT8_TBL;
|
|
4plus8 | 4minus8 | 4mul8 | 4div8
|
|
------------------+-------------------+---------------------+-------
|
|
369 | 123 | 30258 | 2
|
|
369 | 123 | 30258 | 2
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
(5 rows)
|
|
|
|
-- int8 op int2
|
|
SELECT q1 + 42::int2 AS "8plus2", q1 - 42::int2 AS "8minus2", q1 * 42::int2 AS "8mul2", q1 / 42::int2 AS "8div2" FROM INT8_TBL;
|
|
8plus2 | 8minus2 | 8mul2 | 8div2
|
|
------------------+------------------+--------------------+-----------------
|
|
165 | 81 | 5166 | 2
|
|
165 | 81 | 5166 | 2
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
|
|
(5 rows)
|
|
|
|
-- int2 op int8
|
|
SELECT 246::int2 + q1 AS "2plus8", 246::int2 - q1 AS "2minus8", 246::int2 * q1 AS "2mul8", 246::int2 / q1 AS "2div8" FROM INT8_TBL;
|
|
2plus8 | 2minus8 | 2mul8 | 2div8
|
|
------------------+-------------------+---------------------+-------
|
|
369 | 123 | 30258 | 2
|
|
369 | 123 | 30258 | 2
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
|
|
(5 rows)
|
|
|
|
SELECT q2, abs(q2) FROM INT8_TBL;
|
|
q2 | abs
|
|
-------------------+------------------
|
|
456 | 456
|
|
4567890123456789 | 4567890123456789
|
|
123 | 123
|
|
4567890123456789 | 4567890123456789
|
|
-4567890123456789 | 4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT min(q1), min(q2) FROM INT8_TBL;
|
|
min | min
|
|
-----+-------------------
|
|
123 | -4567890123456789
|
|
(1 row)
|
|
|
|
SELECT max(q1), max(q2) FROM INT8_TBL;
|
|
max | max
|
|
------------------+------------------
|
|
4567890123456789 | 4567890123456789
|
|
(1 row)
|
|
|
|
-- TO_CHAR()
|
|
--
|
|
SELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
|
|
FROM INT8_TBL;
|
|
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 to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
|
|
FROM INT8_TBL;
|
|
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 to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
|
|
FROM INT8_TBL;
|
|
to_char | to_char
|
|
--------------------+------------------------
|
|
<123> | <456.000>
|
|
<123> | <4567890123456789.000>
|
|
<4567890123456789> | <123.000>
|
|
<4567890123456789> | <4567890123456789.000>
|
|
<4567890123456789> | 4567890123456789.000
|
|
(5 rows)
|
|
|
|
SELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
|
|
FROM INT8_TBL;
|
|
to_char | to_char
|
|
-------------------+-------------------
|
|
123- | -456
|
|
123- | -4567890123456789
|
|
4567890123456789- | -123
|
|
4567890123456789- | -4567890123456789
|
|
4567890123456789- | +4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'MI9999999999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
456
|
|
4567890123456789
|
|
123
|
|
4567890123456789
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'FMS9999999999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
+456
|
|
+4567890123456789
|
|
+123
|
|
+4567890123456789
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;
|
|
to_char
|
|
--------------------
|
|
456TH
|
|
4567890123456789TH
|
|
123RD
|
|
4567890123456789TH
|
|
<4567890123456789>
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'SG9999999999999999th') FROM INT8_TBL;
|
|
to_char
|
|
---------------------
|
|
+ 456th
|
|
+4567890123456789th
|
|
+ 123rd
|
|
+4567890123456789th
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, '0999999999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
0000000000000456
|
|
4567890123456789
|
|
0000000000000123
|
|
4567890123456789
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'S0999999999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
+0000000000000456
|
|
+4567890123456789
|
|
+0000000000000123
|
|
+4567890123456789
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'FM0999999999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
0000000000000456
|
|
4567890123456789
|
|
0000000000000123
|
|
4567890123456789
|
|
-4567890123456789
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;
|
|
to_char
|
|
-----------------------
|
|
456.000
|
|
4567890123456789.000
|
|
123.000
|
|
4567890123456789.000
|
|
-4567890123456789.000
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'L9999999999999999.000') FROM INT8_TBL;
|
|
to_char
|
|
------------------------
|
|
456.000
|
|
4567890123456789.000
|
|
123.000
|
|
4567890123456789.000
|
|
-4567890123456789.000
|
|
(5 rows)
|
|
|
|
SELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;
|
|
to_char
|
|
--------------------
|
|
456.
|
|
4567890123456789.
|
|
123.
|
|
4567890123456789.
|
|
-4567890123456789.
|
|
(5 rows)
|
|
|
|
SELECT 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
|
|
-------------------------------------------
|
|
+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 to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL;
|
|
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 to_char(q2, '999999SG9999999999') FROM INT8_TBL;
|
|
to_char
|
|
-------------------
|
|
+ 456
|
|
456789+0123456789
|
|
+ 123
|
|
456789+0123456789
|
|
456789-0123456789
|
|
(5 rows)
|
|
|
|
-- check min/max values and overflow behavior
|
|
select '-9223372036854775808'::int8;
|
|
int8
|
|
----------------------
|
|
-9223372036854775808
|
|
(1 row)
|
|
|
|
select '-9223372036854775809'::int8;
|
|
ERROR: value "-9223372036854775809" is out of range for type bigint
|
|
LINE 1: select '-9223372036854775809'::int8;
|
|
^
|
|
select '9223372036854775807'::int8;
|
|
int8
|
|
---------------------
|
|
9223372036854775807
|
|
(1 row)
|
|
|
|
select '9223372036854775808'::int8;
|
|
ERROR: value "9223372036854775808" is out of range for type bigint
|
|
LINE 1: select '9223372036854775808'::int8;
|
|
^
|
|
select -('-9223372036854775807'::int8);
|
|
?column?
|
|
---------------------
|
|
9223372036854775807
|
|
(1 row)
|
|
|
|
select -('-9223372036854775808'::int8);
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 + '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '-9223372036854775800'::int8 + '-9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 - '-9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '-9223372036854775800'::int8 - '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 * '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 / '0'::int8;
|
|
ERROR: division by zero
|
|
select '9223372036854775800'::int8 % '0'::int8;
|
|
ERROR: division by zero
|
|
select abs('-9223372036854775808'::int8);
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 + '100'::int4;
|
|
ERROR: bigint out of range
|
|
select '-9223372036854775800'::int8 - '100'::int4;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 * '100'::int4;
|
|
ERROR: bigint out of range
|
|
select '100'::int4 + '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '-100'::int4 - '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '100'::int4 * '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 + '100'::int2;
|
|
ERROR: bigint out of range
|
|
select '-9223372036854775800'::int8 - '100'::int2;
|
|
ERROR: bigint out of range
|
|
select '9223372036854775800'::int8 * '100'::int2;
|
|
ERROR: bigint out of range
|
|
select '-9223372036854775808'::int8 / '0'::int2;
|
|
ERROR: division by zero
|
|
select '100'::int2 + '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '-100'::int2 - '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '100'::int2 * '9223372036854775800'::int8;
|
|
ERROR: bigint out of range
|
|
select '100'::int2 / '0'::int8;
|
|
ERROR: division by zero
|
|
SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;
|
|
q1
|
|
-----
|
|
123
|
|
(1 row)
|
|
|
|
SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;
|
|
ERROR: integer out of range
|
|
SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;
|
|
q1
|
|
-----
|
|
123
|
|
(1 row)
|
|
|
|
SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;
|
|
ERROR: smallint out of range
|
|
SELECT CAST('42'::int2 AS int8), CAST('-37'::int2 AS int8);
|
|
int8 | int8
|
|
------+------
|
|
42 | -37
|
|
(1 row)
|
|
|
|
SELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;
|
|
q1 | q2
|
|
-------------+------------------------
|
|
123 | 456
|
|
123 | 4.567890123456789e+15
|
|
4.56789e+15 | 123
|
|
4.56789e+15 | 4.567890123456789e+15
|
|
4.56789e+15 | -4.567890123456789e+15
|
|
(5 rows)
|
|
|
|
SELECT CAST('36854775807.0'::float4 AS int8);
|
|
int8
|
|
-------------
|
|
36854775808
|
|
(1 row)
|
|
|
|
SELECT CAST('922337203685477580700.0'::float8 AS int8);
|
|
ERROR: bigint out of range
|
|
SELECT CAST(q1 AS oid) FROM INT8_TBL;
|
|
ERROR: OID out of range
|
|
SELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';
|
|
oid
|
|
------
|
|
1259
|
|
(1 row)
|
|
|
|
-- bit operations
|
|
SELECT q1, q2, q1 & q2 AS "and", q1 | q2 AS "or", q1 # q2 AS "xor", ~q1 AS "not" FROM INT8_TBL;
|
|
q1 | q2 | and | or | xor | not
|
|
------------------+-------------------+------------------+------------------+------------------+-------------------
|
|
123 | 456 | 72 | 507 | 435 | -124
|
|
123 | 4567890123456789 | 17 | 4567890123456895 | 4567890123456878 | -124
|
|
4567890123456789 | 123 | 17 | 4567890123456895 | 4567890123456878 | -4567890123456790
|
|
4567890123456789 | 4567890123456789 | 4567890123456789 | 4567890123456789 | 0 | -4567890123456790
|
|
4567890123456789 | -4567890123456789 | 1 | -1 | -2 | -4567890123456790
|
|
(5 rows)
|
|
|
|
SELECT q1, q1 << 2 AS "shl", q1 >> 3 AS "shr" FROM INT8_TBL;
|
|
q1 | shl | shr
|
|
------------------+-------------------+-----------------
|
|
123 | 492 | 15
|
|
123 | 492 | 15
|
|
4567890123456789 | 18271560493827156 | 570986265432098
|
|
4567890123456789 | 18271560493827156 | 570986265432098
|
|
4567890123456789 | 18271560493827156 | 570986265432098
|
|
(5 rows)
|
|
|
|
-- generate_series
|
|
SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8);
|
|
generate_series
|
|
------------------
|
|
4567890123456789
|
|
4567890123456790
|
|
4567890123456791
|
|
4567890123456792
|
|
4567890123456793
|
|
4567890123456794
|
|
4567890123456795
|
|
4567890123456796
|
|
4567890123456797
|
|
4567890123456798
|
|
4567890123456799
|
|
(11 rows)
|
|
|
|
SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0);
|
|
ERROR: step size cannot equal zero
|
|
SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2);
|
|
generate_series
|
|
------------------
|
|
4567890123456789
|
|
4567890123456791
|
|
4567890123456793
|
|
4567890123456795
|
|
4567890123456797
|
|
4567890123456799
|
|
(6 rows)
|
|
|
|
-- corner case
|
|
SELECT (-1::int8<<63)::text;
|
|
text
|
|
----------------------
|
|
-9223372036854775808
|
|
(1 row)
|
|
|
|
SELECT ((-1::int8<<63)+1)::text;
|
|
text
|
|
----------------------
|
|
-9223372036854775807
|
|
(1 row)
|
|
|
|
-- check sane handling of INT64_MIN overflow cases
|
|
SELECT (-9223372036854775808)::int8 * (-1)::int8;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 / (-1)::int8;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 % (-1)::int8;
|
|
?column?
|
|
----------
|
|
0
|
|
(1 row)
|
|
|
|
SELECT (-9223372036854775808)::int8 * (-1)::int4;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 / (-1)::int4;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 % (-1)::int4;
|
|
?column?
|
|
----------
|
|
0
|
|
(1 row)
|
|
|
|
SELECT (-9223372036854775808)::int8 * (-1)::int2;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 / (-1)::int2;
|
|
ERROR: bigint out of range
|
|
SELECT (-9223372036854775808)::int8 % (-1)::int2;
|
|
?column?
|
|
----------
|
|
0
|
|
(1 row)
|
|
|
|
-- check rounding when casting from float
|
|
SELECT x, x::int8 AS int8_value
|
|
FROM (VALUES (-2.5::float8),
|
|
(-1.5::float8),
|
|
(-0.5::float8),
|
|
(0.0::float8),
|
|
(0.5::float8),
|
|
(1.5::float8),
|
|
(2.5::float8)) t(x);
|
|
x | int8_value
|
|
------+------------
|
|
-2.5 | -2
|
|
-1.5 | -2
|
|
-0.5 | 0
|
|
0 | 0
|
|
0.5 | 0
|
|
1.5 | 2
|
|
2.5 | 2
|
|
(7 rows)
|
|
|
|
-- check rounding when casting from numeric
|
|
SELECT x, x::int8 AS int8_value
|
|
FROM (VALUES (-2.5::numeric),
|
|
(-1.5::numeric),
|
|
(-0.5::numeric),
|
|
(0.0::numeric),
|
|
(0.5::numeric),
|
|
(1.5::numeric),
|
|
(2.5::numeric)) t(x);
|
|
x | int8_value
|
|
------+------------
|
|
-2.5 | -3
|
|
-1.5 | -2
|
|
-0.5 | -1
|
|
0.0 | 0
|
|
0.5 | 1
|
|
1.5 | 2
|
|
2.5 | 3
|
|
(7 rows)
|
|
|
|
-- test gcd()
|
|
SELECT a, b, gcd(a, b), gcd(a, -b), gcd(b, a), gcd(-b, a)
|
|
FROM (VALUES (0::int8, 0::int8),
|
|
(0::int8, 29893644334::int8),
|
|
(288484263558::int8, 29893644334::int8),
|
|
(-288484263558::int8, 29893644334::int8),
|
|
((-9223372036854775808)::int8, 1::int8),
|
|
((-9223372036854775808)::int8, 9223372036854775807::int8),
|
|
((-9223372036854775808)::int8, 4611686018427387904::int8)) AS v(a, b);
|
|
a | b | gcd | gcd | gcd | gcd
|
|
----------------------+---------------------+---------------------+---------------------+---------------------+---------------------
|
|
0 | 0 | 0 | 0 | 0 | 0
|
|
0 | 29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334
|
|
288484263558 | 29893644334 | 6835958 | 6835958 | 6835958 | 6835958
|
|
-288484263558 | 29893644334 | 6835958 | 6835958 | 6835958 | 6835958
|
|
-9223372036854775808 | 1 | 1 | 1 | 1 | 1
|
|
-9223372036854775808 | 9223372036854775807 | 1 | 1 | 1 | 1
|
|
-9223372036854775808 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904
|
|
(7 rows)
|
|
|
|
SELECT gcd((-9223372036854775808)::int8, 0::int8); -- overflow
|
|
ERROR: bigint out of range
|
|
SELECT gcd((-9223372036854775808)::int8, (-9223372036854775808)::int8); -- overflow
|
|
ERROR: bigint out of range
|
|
-- test lcm()
|
|
SELECT a, b, lcm(a, b), lcm(a, -b), lcm(b, a), lcm(-b, a)
|
|
FROM (VALUES (0::int8, 0::int8),
|
|
(0::int8, 29893644334::int8),
|
|
(29893644334::int8, 29893644334::int8),
|
|
(288484263558::int8, 29893644334::int8),
|
|
(-288484263558::int8, 29893644334::int8),
|
|
((-9223372036854775808)::int8, 0::int8)) AS v(a, b);
|
|
a | b | lcm | lcm | lcm | lcm
|
|
----------------------+-------------+------------------+------------------+------------------+------------------
|
|
0 | 0 | 0 | 0 | 0 | 0
|
|
0 | 29893644334 | 0 | 0 | 0 | 0
|
|
29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334
|
|
288484263558 | 29893644334 | 1261541684539134 | 1261541684539134 | 1261541684539134 | 1261541684539134
|
|
-288484263558 | 29893644334 | 1261541684539134 | 1261541684539134 | 1261541684539134 | 1261541684539134
|
|
-9223372036854775808 | 0 | 0 | 0 | 0 | 0
|
|
(6 rows)
|
|
|
|
SELECT lcm((-9223372036854775808)::int8, 1::int8); -- overflow
|
|
ERROR: bigint out of range
|
|
SELECT lcm(9223372036854775807::int8, 9223372036854775806::int8); -- overflow
|
|
ERROR: bigint out of range
|
|
-- non-decimal literals
|
|
SELECT int8 '0b100101';
|
|
int8
|
|
------
|
|
37
|
|
(1 row)
|
|
|
|
SELECT int8 '0o273';
|
|
int8
|
|
------
|
|
187
|
|
(1 row)
|
|
|
|
SELECT int8 '0x42F';
|
|
int8
|
|
------
|
|
1071
|
|
(1 row)
|
|
|
|
SELECT int8 '0b';
|
|
ERROR: invalid input syntax for type bigint: "0b"
|
|
LINE 1: SELECT int8 '0b';
|
|
^
|
|
SELECT int8 '0o';
|
|
ERROR: invalid input syntax for type bigint: "0o"
|
|
LINE 1: SELECT int8 '0o';
|
|
^
|
|
SELECT int8 '0x';
|
|
ERROR: invalid input syntax for type bigint: "0x"
|
|
LINE 1: SELECT int8 '0x';
|
|
^
|
|
-- cases near overflow
|
|
SELECT int8 '0b111111111111111111111111111111111111111111111111111111111111111';
|
|
int8
|
|
---------------------
|
|
9223372036854775807
|
|
(1 row)
|
|
|
|
SELECT int8 '0b1000000000000000000000000000000000000000000000000000000000000000';
|
|
ERROR: value "0b1000000000000000000000000000000000000000000000000000000000000000" is out of range for type bigint
|
|
LINE 1: SELECT int8 '0b100000000000000000000000000000000000000000000...
|
|
^
|
|
SELECT int8 '0o777777777777777777777';
|
|
int8
|
|
---------------------
|
|
9223372036854775807
|
|
(1 row)
|
|
|
|
SELECT int8 '0o1000000000000000000000';
|
|
ERROR: value "0o1000000000000000000000" is out of range for type bigint
|
|
LINE 1: SELECT int8 '0o1000000000000000000000';
|
|
^
|
|
SELECT int8 '0x7FFFFFFFFFFFFFFF';
|
|
int8
|
|
---------------------
|
|
9223372036854775807
|
|
(1 row)
|
|
|
|
SELECT int8 '0x8000000000000000';
|
|
ERROR: value "0x8000000000000000" is out of range for type bigint
|
|
LINE 1: SELECT int8 '0x8000000000000000';
|
|
^
|
|
SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000000';
|
|
int8
|
|
----------------------
|
|
-9223372036854775808
|
|
(1 row)
|
|
|
|
SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000001';
|
|
ERROR: value "-0b1000000000000000000000000000000000000000000000000000000000000001" is out of range for type bigint
|
|
LINE 1: SELECT int8 '-0b10000000000000000000000000000000000000000000...
|
|
^
|
|
SELECT int8 '-0o1000000000000000000000';
|
|
int8
|
|
----------------------
|
|
-9223372036854775808
|
|
(1 row)
|
|
|
|
SELECT int8 '-0o1000000000000000000001';
|
|
ERROR: value "-0o1000000000000000000001" is out of range for type bigint
|
|
LINE 1: SELECT int8 '-0o1000000000000000000001';
|
|
^
|
|
SELECT int8 '-0x8000000000000000';
|
|
int8
|
|
----------------------
|
|
-9223372036854775808
|
|
(1 row)
|
|
|
|
SELECT int8 '-0x8000000000000001';
|
|
ERROR: value "-0x8000000000000001" is out of range for type bigint
|
|
LINE 1: SELECT int8 '-0x8000000000000001';
|
|
^
|
|
-- underscores
|
|
SELECT int8 '1_000_000';
|
|
int8
|
|
---------
|
|
1000000
|
|
(1 row)
|
|
|
|
SELECT int8 '1_2_3';
|
|
int8
|
|
------
|
|
123
|
|
(1 row)
|
|
|
|
SELECT int8 '0x1EEE_FFFF';
|
|
int8
|
|
-----------
|
|
518979583
|
|
(1 row)
|
|
|
|
SELECT int8 '0o2_73';
|
|
int8
|
|
------
|
|
187
|
|
(1 row)
|
|
|
|
SELECT int8 '0b_10_0101';
|
|
int8
|
|
------
|
|
37
|
|
(1 row)
|
|
|
|
-- error cases
|
|
SELECT int8 '_100';
|
|
ERROR: invalid input syntax for type bigint: "_100"
|
|
LINE 1: SELECT int8 '_100';
|
|
^
|
|
SELECT int8 '100_';
|
|
ERROR: invalid input syntax for type bigint: "100_"
|
|
LINE 1: SELECT int8 '100_';
|
|
^
|
|
SELECT int8 '100__000';
|
|
ERROR: invalid input syntax for type bigint: "100__000"
|
|
LINE 1: SELECT int8 '100__000';
|
|
^
|