diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/int2.out | 92 | ||||
-rw-r--r-- | src/test/regress/expected/int4.out | 92 | ||||
-rw-r--r-- | src/test/regress/expected/int8.out | 92 | ||||
-rw-r--r-- | src/test/regress/expected/numerology.out | 193 | ||||
-rw-r--r-- | src/test/regress/sql/int2.sql | 26 | ||||
-rw-r--r-- | src/test/regress/sql/int4.sql | 26 | ||||
-rw-r--r-- | src/test/regress/sql/int8.sql | 26 | ||||
-rw-r--r-- | src/test/regress/sql/numerology.sql | 51 |
8 files changed, 595 insertions, 3 deletions
diff --git a/src/test/regress/expected/int2.out b/src/test/regress/expected/int2.out index 6a23567b679..08e2f9f9dca 100644 --- a/src/test/regress/expected/int2.out +++ b/src/test/regress/expected/int2.out @@ -329,3 +329,95 @@ FROM (VALUES (-2.5::numeric), 2.5 | 3 (7 rows) +-- non-decimal literals +SELECT int2 '0b100101'; + int2 +------ + 37 +(1 row) + +SELECT int2 '0o273'; + int2 +------ + 187 +(1 row) + +SELECT int2 '0x42F'; + int2 +------ + 1071 +(1 row) + +SELECT int2 '0b'; +ERROR: invalid input syntax for type smallint: "0b" +LINE 1: SELECT int2 '0b'; + ^ +SELECT int2 '0o'; +ERROR: invalid input syntax for type smallint: "0o" +LINE 1: SELECT int2 '0o'; + ^ +SELECT int2 '0x'; +ERROR: invalid input syntax for type smallint: "0x" +LINE 1: SELECT int2 '0x'; + ^ +-- cases near overflow +SELECT int2 '0b111111111111111'; + int2 +------- + 32767 +(1 row) + +SELECT int2 '0b1000000000000000'; +ERROR: value "0b1000000000000000" is out of range for type smallint +LINE 1: SELECT int2 '0b1000000000000000'; + ^ +SELECT int2 '0o77777'; + int2 +------- + 32767 +(1 row) + +SELECT int2 '0o100000'; +ERROR: value "0o100000" is out of range for type smallint +LINE 1: SELECT int2 '0o100000'; + ^ +SELECT int2 '0x7FFF'; + int2 +------- + 32767 +(1 row) + +SELECT int2 '0x8000'; +ERROR: value "0x8000" is out of range for type smallint +LINE 1: SELECT int2 '0x8000'; + ^ +SELECT int2 '-0b1000000000000000'; + int2 +-------- + -32768 +(1 row) + +SELECT int2 '-0b1000000000000001'; +ERROR: value "-0b1000000000000001" is out of range for type smallint +LINE 1: SELECT int2 '-0b1000000000000001'; + ^ +SELECT int2 '-0o100000'; + int2 +-------- + -32768 +(1 row) + +SELECT int2 '-0o100001'; +ERROR: value "-0o100001" is out of range for type smallint +LINE 1: SELECT int2 '-0o100001'; + ^ +SELECT int2 '-0x8000'; + int2 +-------- + -32768 +(1 row) + +SELECT int2 '-0x8001'; +ERROR: value "-0x8001" is out of range for type smallint +LINE 1: SELECT int2 '-0x8001'; + ^ diff --git a/src/test/regress/expected/int4.out b/src/test/regress/expected/int4.out index b98007bd7a2..8386c7cdff1 100644 --- a/src/test/regress/expected/int4.out +++ b/src/test/regress/expected/int4.out @@ -456,3 +456,95 @@ SELECT lcm((-2147483648)::int4, 1::int4); -- overflow ERROR: integer out of range SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow ERROR: integer out of range +-- non-decimal literals +SELECT int4 '0b100101'; + int4 +------ + 37 +(1 row) + +SELECT int4 '0o273'; + int4 +------ + 187 +(1 row) + +SELECT int4 '0x42F'; + int4 +------ + 1071 +(1 row) + +SELECT int4 '0b'; +ERROR: invalid input syntax for type integer: "0b" +LINE 1: SELECT int4 '0b'; + ^ +SELECT int4 '0o'; +ERROR: invalid input syntax for type integer: "0o" +LINE 1: SELECT int4 '0o'; + ^ +SELECT int4 '0x'; +ERROR: invalid input syntax for type integer: "0x" +LINE 1: SELECT int4 '0x'; + ^ +-- cases near overflow +SELECT int4 '0b1111111111111111111111111111111'; + int4 +------------ + 2147483647 +(1 row) + +SELECT int4 '0b10000000000000000000000000000000'; +ERROR: value "0b10000000000000000000000000000000" is out of range for type integer +LINE 1: SELECT int4 '0b10000000000000000000000000000000'; + ^ +SELECT int4 '0o17777777777'; + int4 +------------ + 2147483647 +(1 row) + +SELECT int4 '0o20000000000'; +ERROR: value "0o20000000000" is out of range for type integer +LINE 1: SELECT int4 '0o20000000000'; + ^ +SELECT int4 '0x7FFFFFFF'; + int4 +------------ + 2147483647 +(1 row) + +SELECT int4 '0x80000000'; +ERROR: value "0x80000000" is out of range for type integer +LINE 1: SELECT int4 '0x80000000'; + ^ +SELECT int4 '-0b10000000000000000000000000000000'; + int4 +------------- + -2147483648 +(1 row) + +SELECT int4 '-0b10000000000000000000000000000001'; +ERROR: value "-0b10000000000000000000000000000001" is out of range for type integer +LINE 1: SELECT int4 '-0b10000000000000000000000000000001'; + ^ +SELECT int4 '-0o20000000000'; + int4 +------------- + -2147483648 +(1 row) + +SELECT int4 '-0o20000000001'; +ERROR: value "-0o20000000001" is out of range for type integer +LINE 1: SELECT int4 '-0o20000000001'; + ^ +SELECT int4 '-0x80000000'; + int4 +------------- + -2147483648 +(1 row) + +SELECT int4 '-0x80000001'; +ERROR: value "-0x80000001" is out of range for type integer +LINE 1: SELECT int4 '-0x80000001'; + ^ diff --git a/src/test/regress/expected/int8.out b/src/test/regress/expected/int8.out index 90ed0612498..5b62b51be9c 100644 --- a/src/test/regress/expected/int8.out +++ b/src/test/regress/expected/int8.out @@ -952,3 +952,95 @@ 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'; + ^ diff --git a/src/test/regress/expected/numerology.out b/src/test/regress/expected/numerology.out index 77d48434173..15cd6b16723 100644 --- a/src/test/regress/expected/numerology.out +++ b/src/test/regress/expected/numerology.out @@ -3,14 +3,167 @@ -- Test various combinations of numeric types and functions. -- -- --- Trailing junk in numeric literals +-- numeric literals -- +SELECT 0b100101; + ?column? +---------- + 37 +(1 row) + +SELECT 0o273; + ?column? +---------- + 187 +(1 row) + +SELECT 0x42F; + ?column? +---------- + 1071 +(1 row) + +-- cases near int4 overflow +SELECT 0b1111111111111111111111111111111; + ?column? +------------ + 2147483647 +(1 row) + +SELECT 0b10000000000000000000000000000000; + ?column? +------------ + 2147483648 +(1 row) + +SELECT 0o17777777777; + ?column? +------------ + 2147483647 +(1 row) + +SELECT 0o20000000000; + ?column? +------------ + 2147483648 +(1 row) + +SELECT 0x7FFFFFFF; + ?column? +------------ + 2147483647 +(1 row) + +SELECT 0x80000000; + ?column? +------------ + 2147483648 +(1 row) + +SELECT -0b10000000000000000000000000000000; + ?column? +------------- + -2147483648 +(1 row) + +SELECT -0b10000000000000000000000000000001; + ?column? +------------- + -2147483649 +(1 row) + +SELECT -0o20000000000; + ?column? +------------- + -2147483648 +(1 row) + +SELECT -0o20000000001; + ?column? +------------- + -2147483649 +(1 row) + +SELECT -0x80000000; + ?column? +------------- + -2147483648 +(1 row) + +SELECT -0x80000001; + ?column? +------------- + -2147483649 +(1 row) + +-- cases near int8 overflow +SELECT 0b111111111111111111111111111111111111111111111111111111111111111; + ?column? +--------------------- + 9223372036854775807 +(1 row) + +SELECT 0b1000000000000000000000000000000000000000000000000000000000000000; +ERROR: invalid input syntax for type numeric: "0b1000000000000000000000000000000000000000000000000000000000000000" +LINE 1: SELECT 0b100000000000000000000000000000000000000000000000000... + ^ +SELECT 0o777777777777777777777; + ?column? +--------------------- + 9223372036854775807 +(1 row) + +SELECT 0o1000000000000000000000; +ERROR: invalid input syntax for type numeric: "0o1000000000000000000000" +LINE 1: SELECT 0o1000000000000000000000; + ^ +SELECT 0x7FFFFFFFFFFFFFFF; + ?column? +--------------------- + 9223372036854775807 +(1 row) + +SELECT 0x8000000000000000; +ERROR: invalid input syntax for type numeric: "0x8000000000000000" +LINE 1: SELECT 0x8000000000000000; + ^ +SELECT -0b1000000000000000000000000000000000000000000000000000000000000000; + ?column? +---------------------- + -9223372036854775808 +(1 row) + +SELECT -0b1000000000000000000000000000000000000000000000000000000000000001; +ERROR: invalid input syntax for type numeric: "-0b1000000000000000000000000000000000000000000000000000000000000001" +LINE 1: SELECT -0b10000000000000000000000000000000000000000000000000... + ^ +SELECT -0o1000000000000000000000; + ?column? +---------------------- + -9223372036854775808 +(1 row) + +SELECT -0o1000000000000000000001; +ERROR: invalid input syntax for type numeric: "-0o1000000000000000000001" +LINE 1: SELECT -0o1000000000000000000001; + ^ +SELECT -0x8000000000000000; + ?column? +---------------------- + -9223372036854775808 +(1 row) + +SELECT -0x8000000000000001; +ERROR: invalid input syntax for type numeric: "-0x8000000000000001" +LINE 1: SELECT -0x8000000000000001; + ^ +-- error cases SELECT 123abc; ERROR: trailing junk after numeric literal at or near "123a" LINE 1: SELECT 123abc; ^ SELECT 0x0o; -ERROR: trailing junk after numeric literal at or near "0x" +ERROR: trailing junk after numeric literal at or near "0x0o" LINE 1: SELECT 0x0o; ^ SELECT 1_2_3; @@ -45,6 +198,42 @@ PREPARE p1 AS SELECT $1a; ERROR: trailing junk after parameter at or near "$1a" LINE 1: PREPARE p1 AS SELECT $1a; ^ +SELECT 0b; +ERROR: invalid binary integer at or near "0b" +LINE 1: SELECT 0b; + ^ +SELECT 1b; +ERROR: trailing junk after numeric literal at or near "1b" +LINE 1: SELECT 1b; + ^ +SELECT 0b0x; +ERROR: trailing junk after numeric literal at or near "0b0x" +LINE 1: SELECT 0b0x; + ^ +SELECT 0o; +ERROR: invalid octal integer at or near "0o" +LINE 1: SELECT 0o; + ^ +SELECT 1o; +ERROR: trailing junk after numeric literal at or near "1o" +LINE 1: SELECT 1o; + ^ +SELECT 0o0x; +ERROR: trailing junk after numeric literal at or near "0o0x" +LINE 1: SELECT 0o0x; + ^ +SELECT 0x; +ERROR: invalid hexadecimal integer at or near "0x" +LINE 1: SELECT 0x; + ^ +SELECT 1x; +ERROR: trailing junk after numeric literal at or near "1x" +LINE 1: SELECT 1x; + ^ +SELECT 0x0y; +ERROR: trailing junk after numeric literal at or near "0x0y" +LINE 1: SELECT 0x0y; + ^ -- -- Test implicit type conversions -- This fails for Postgres v6.1 (and earlier?) diff --git a/src/test/regress/sql/int2.sql b/src/test/regress/sql/int2.sql index 98a761a24a3..ad30c2feaa1 100644 --- a/src/test/regress/sql/int2.sql +++ b/src/test/regress/sql/int2.sql @@ -110,3 +110,29 @@ FROM (VALUES (-2.5::numeric), (0.5::numeric), (1.5::numeric), (2.5::numeric)) t(x); + + +-- non-decimal literals + +SELECT int2 '0b100101'; +SELECT int2 '0o273'; +SELECT int2 '0x42F'; + +SELECT int2 '0b'; +SELECT int2 '0o'; +SELECT int2 '0x'; + +-- cases near overflow +SELECT int2 '0b111111111111111'; +SELECT int2 '0b1000000000000000'; +SELECT int2 '0o77777'; +SELECT int2 '0o100000'; +SELECT int2 '0x7FFF'; +SELECT int2 '0x8000'; + +SELECT int2 '-0b1000000000000000'; +SELECT int2 '-0b1000000000000001'; +SELECT int2 '-0o100000'; +SELECT int2 '-0o100001'; +SELECT int2 '-0x8000'; +SELECT int2 '-0x8001'; diff --git a/src/test/regress/sql/int4.sql b/src/test/regress/sql/int4.sql index 54420818de5..9e6a40408ab 100644 --- a/src/test/regress/sql/int4.sql +++ b/src/test/regress/sql/int4.sql @@ -170,3 +170,29 @@ FROM (VALUES (0::int4, 0::int4), SELECT lcm((-2147483648)::int4, 1::int4); -- overflow SELECT lcm(2147483647::int4, 2147483646::int4); -- overflow + + +-- non-decimal literals + +SELECT int4 '0b100101'; +SELECT int4 '0o273'; +SELECT int4 '0x42F'; + +SELECT int4 '0b'; +SELECT int4 '0o'; +SELECT int4 '0x'; + +-- cases near overflow +SELECT int4 '0b1111111111111111111111111111111'; +SELECT int4 '0b10000000000000000000000000000000'; +SELECT int4 '0o17777777777'; +SELECT int4 '0o20000000000'; +SELECT int4 '0x7FFFFFFF'; +SELECT int4 '0x80000000'; + +SELECT int4 '-0b10000000000000000000000000000000'; +SELECT int4 '-0b10000000000000000000000000000001'; +SELECT int4 '-0o20000000000'; +SELECT int4 '-0o20000000001'; +SELECT int4 '-0x80000000'; +SELECT int4 '-0x80000001'; diff --git a/src/test/regress/sql/int8.sql b/src/test/regress/sql/int8.sql index 76007b692b2..06f273ed584 100644 --- a/src/test/regress/sql/int8.sql +++ b/src/test/regress/sql/int8.sql @@ -251,3 +251,29 @@ FROM (VALUES (0::int8, 0::int8), SELECT lcm((-9223372036854775808)::int8, 1::int8); -- overflow SELECT lcm(9223372036854775807::int8, 9223372036854775806::int8); -- overflow + + +-- non-decimal literals + +SELECT int8 '0b100101'; +SELECT int8 '0o273'; +SELECT int8 '0x42F'; + +SELECT int8 '0b'; +SELECT int8 '0o'; +SELECT int8 '0x'; + +-- cases near overflow +SELECT int8 '0b111111111111111111111111111111111111111111111111111111111111111'; +SELECT int8 '0b1000000000000000000000000000000000000000000000000000000000000000'; +SELECT int8 '0o777777777777777777777'; +SELECT int8 '0o1000000000000000000000'; +SELECT int8 '0x7FFFFFFFFFFFFFFF'; +SELECT int8 '0x8000000000000000'; + +SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000000'; +SELECT int8 '-0b1000000000000000000000000000000000000000000000000000000000000001'; +SELECT int8 '-0o1000000000000000000000'; +SELECT int8 '-0o1000000000000000000001'; +SELECT int8 '-0x8000000000000000'; +SELECT int8 '-0x8000000000000001'; diff --git a/src/test/regress/sql/numerology.sql b/src/test/regress/sql/numerology.sql index be7d6dfe0c2..310d9e57663 100644 --- a/src/test/regress/sql/numerology.sql +++ b/src/test/regress/sql/numerology.sql @@ -3,10 +3,46 @@ -- Test various combinations of numeric types and functions. -- + -- --- Trailing junk in numeric literals +-- numeric literals -- +SELECT 0b100101; +SELECT 0o273; +SELECT 0x42F; + +-- cases near int4 overflow +SELECT 0b1111111111111111111111111111111; +SELECT 0b10000000000000000000000000000000; +SELECT 0o17777777777; +SELECT 0o20000000000; +SELECT 0x7FFFFFFF; +SELECT 0x80000000; + +SELECT -0b10000000000000000000000000000000; +SELECT -0b10000000000000000000000000000001; +SELECT -0o20000000000; +SELECT -0o20000000001; +SELECT -0x80000000; +SELECT -0x80000001; + +-- cases near int8 overflow +SELECT 0b111111111111111111111111111111111111111111111111111111111111111; +SELECT 0b1000000000000000000000000000000000000000000000000000000000000000; +SELECT 0o777777777777777777777; +SELECT 0o1000000000000000000000; +SELECT 0x7FFFFFFFFFFFFFFF; +SELECT 0x8000000000000000; + +SELECT -0b1000000000000000000000000000000000000000000000000000000000000000; +SELECT -0b1000000000000000000000000000000000000000000000000000000000000001; +SELECT -0o1000000000000000000000; +SELECT -0o1000000000000000000001; +SELECT -0x8000000000000000; +SELECT -0x8000000000000001; + +-- error cases SELECT 123abc; SELECT 0x0o; SELECT 1_2_3; @@ -18,6 +54,19 @@ SELECT 0.0e; SELECT 0.0e+a; PREPARE p1 AS SELECT $1a; +SELECT 0b; +SELECT 1b; +SELECT 0b0x; + +SELECT 0o; +SELECT 1o; +SELECT 0o0x; + +SELECT 0x; +SELECT 1x; +SELECT 0x0y; + + -- -- Test implicit type conversions -- This fails for Postgres v6.1 (and earlier?) |