99 lines
1.8 KiB
SQL
99 lines
1.8 KiB
SQL
# name: test/sql/overflow/test_overflow.test
|
|
# description: Test handling of overflows in basic types
|
|
# group: [overflow]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
CREATE TABLE test (a INTEGER, b INTEGER);
|
|
|
|
# insert too large value for domain should cause error
|
|
statement error
|
|
INSERT INTO test VALUES (-1099511627776, 3)
|
|
----
|
|
Conversion Error
|
|
|
|
statement ok
|
|
INSERT INTO test VALUES (11, 22), (12, 21), (14, 22)
|
|
|
|
# Casting NULL should still work though
|
|
query I
|
|
SELECT ALL CAST ( - SUM ( DISTINCT - CAST ( NULL AS INTEGER ) ) AS INTEGER ) FROM test
|
|
----
|
|
NULL
|
|
|
|
# proper upcasting of integer columns in AVG
|
|
query IR
|
|
SELECT b, AVG(a) FROM test GROUP BY b ORDER BY b;
|
|
----
|
|
21 12.000000
|
|
22 12.500000
|
|
|
|
# cast overflows
|
|
statement error
|
|
SELECT cast(200 AS TINYINT)
|
|
----
|
|
Conversion Error
|
|
|
|
statement error
|
|
SELECT cast(-129 AS TINYINT)
|
|
----
|
|
Conversion Error
|
|
|
|
# addition overflow
|
|
statement error
|
|
SELECT cast(100 AS TINYINT) + cast(100 AS TINYINT)
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
# also with tables
|
|
statement ok
|
|
CREATE TABLE test2 (a INTEGER, b TINYINT);
|
|
|
|
statement ok
|
|
INSERT INTO test2 VALUES (200, 60), (12, 60), (14, 60)
|
|
|
|
statement error
|
|
SELECT cast(a AS TINYINT) FROM test2
|
|
----
|
|
Conversion Error
|
|
|
|
query I
|
|
SELECT SUM(b) FROM test2
|
|
----
|
|
180
|
|
|
|
# subtraction
|
|
statement error
|
|
SELECT 100::TINYINT - -50::TINYINT
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
statement error
|
|
SELECT 100::TINYINT * 2::TINYINT
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
# tables
|
|
statement error
|
|
SELECT 100::TINYINT + b::TINYINT FROM test2
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
statement error
|
|
SELECT 100::TINYINT - -b::TINYINT FROM test2
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
statement error
|
|
SELECT 100::TINYINT * b::TINYINT FROM test2
|
|
----
|
|
Out of Range Error: Overflow
|
|
|
|
# more complex expressions
|
|
statement error
|
|
SELECT a + b FROM (SELECT cast(100 AS TINYINT) AS a, cast(100 AS TINYINT) AS b) tbl1
|
|
----
|
|
Out of Range Error: Overflow
|