should be it
This commit is contained in:
98
external/duckdb/test/sql/overflow/test_overflow.test
vendored
Normal file
98
external/duckdb/test/sql/overflow/test_overflow.test
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user