This is an automated email from the ASF dual-hosted git repository.
zstan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 7c06fb3f0c IGNITE-23359 Sql. Additional tests for "out of range"
arithmetic operations (#4501)
7c06fb3f0c is described below
commit 7c06fb3f0c0fcb4b3ad2e7d0fae64ff4aab5d667
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Mon Oct 14 10:51:15 2024 +0300
IGNITE-23359 Sql. Additional tests for "out of range" arithmetic operations
(#4501)
---
.../internal/sql/engine/ItDataTypesTest.java | 66 ------
.../sql/engine/ItDynamicParameterTest.java | 36 ++++
.../sql/insert/test_insert_type.test | 236 +++++++++++++++++++++
.../sql/order/test_order_by_in_subquery.test | 2 +-
.../integer/integer_integer_overflow_cast.test | 78 +++++++
.../sql/types/integer/integer_overflow.test | 79 +++++++
6 files changed, 430 insertions(+), 67 deletions(-)
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDataTypesTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDataTypesTest.java
index d96838db87..e96df8bd17 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDataTypesTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDataTypesTest.java
@@ -61,8 +61,6 @@ public class ItDataTypesTest extends BaseSqlIntegrationTest {
private static final String NUMERIC_FORMAT_ERROR = "neither a decimal
digit number";
- private static final Object EMPTY_PARAM = new Object();
-
/**
* Drops all created tables.
*/
@@ -535,70 +533,6 @@ public class ItDataTypesTest extends
BaseSqlIntegrationTest {
expectResult(checker, result);
}
- @ParameterizedTest(name = "{1} {2}")
- @MethodSource("decimalOverflows")
- public void testCalcOpOverflow(SqlTypeName type, String expr, Object
param) {
- if (param == EMPTY_PARAM) {
- assertThrowsSqlException(RUNTIME_ERR, type.getName() + " out of
range", () -> sql(expr));
- } else {
- assertThrowsSqlException(RUNTIME_ERR, type.getName() + " out of
range", () -> sql(expr, param));
- }
- }
-
- private static Stream<Arguments> decimalOverflows() {
- return Stream.of(
- // BIGINT
- arguments(SqlTypeName.BIGINT, "SELECT 9223372036854775807 +
1", EMPTY_PARAM),
- arguments(SqlTypeName.BIGINT, "SELECT 9223372036854775807 *
2", EMPTY_PARAM),
- arguments(SqlTypeName.BIGINT, "SELECT -9223372036854775808 -
1", EMPTY_PARAM),
- arguments(SqlTypeName.BIGINT, "SELECT -(-9223372036854775807 -
1)", EMPTY_PARAM),
- arguments(SqlTypeName.BIGINT, "SELECT
-CAST(-9223372036854775808 AS BIGINT)", EMPTY_PARAM),
- arguments(SqlTypeName.BIGINT, "SELECT -(?)",
-9223372036854775808L),
- arguments(SqlTypeName.BIGINT, "SELECT
-9223372036854775808/-1", EMPTY_PARAM),
-
- // INTEGER
- arguments(SqlTypeName.INTEGER, "SELECT 2147483647 + 1",
EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT CAST(CAST(2147483648 AS
BIGINT) AS INTEGER)", EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT 2147483647 * 2",
EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT -2147483648 - 1",
EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT -(-2147483647 - 1)",
EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT -CAST(-2147483648 AS
INTEGER)", EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "SELECT -(?)", -2147483648),
- arguments(SqlTypeName.INTEGER, "SELECT -2147483648/-1",
EMPTY_PARAM),
- arguments(SqlTypeName.INTEGER, "select
CAST(9223372036854775807.5 + 9223372036854775807.5 AS INTEGER)",
- EMPTY_PARAM),
-
- // SMALLINT
- arguments(SqlTypeName.SMALLINT, "SELECT 32000::SMALLINT +
1000::SMALLINT", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "select
CAST(9223372036854775807.5 + 9223372036854775807.5 AS SMALLINT)",
- EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT CAST(CAST(33000 AS
BIGINT) AS SMALLINT)", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT CAST(CAST(33000 AS
FLOAT) AS SMALLINT)", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT CAST(CAST(33000 + 1 AS
FLOAT) AS SMALLINT)", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT 17000::SMALLINT *
2::SMALLINT", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT -32000::SMALLINT -
1000::SMALLINT", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT -(-32767::SMALLINT -
1::SMALLINT)", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT -CAST(-32768 AS
SMALLINT)", EMPTY_PARAM),
- arguments(SqlTypeName.SMALLINT, "SELECT -CAST(? AS SMALLINT)",
-32768),
- arguments(SqlTypeName.SMALLINT, "SELECT CAST (-32768 AS
SMALLINT)/-1::SMALLINT", EMPTY_PARAM),
-
- // TINYINT
- arguments(SqlTypeName.TINYINT, "SELECT 2::TINYINT +
127::TINYINT", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "select
CAST(9223372036854775807.5 + 9223372036854775807.5 AS TINYINT)",
- EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT CAST(CAST(200 AS
BIGINT) AS TINYINT)", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT CAST(CAST(200 AS FLOAT)
AS TINYINT)", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT CAST(CAST(200 + 1 AS
FLOAT) AS TINYINT)", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT 2::TINYINT *
127::TINYINT", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT -2::TINYINT -
127::TINYINT", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT -(-127::TINYINT -
1::TINYINT)", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT -CAST(-128 AS
TINYINT)", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT -CAST(? AS TINYINT)",
-128),
- arguments(SqlTypeName.TINYINT, "SELECT CAST(-128 AS
TINYINT)/-1::TINYINT", EMPTY_PARAM),
- arguments(SqlTypeName.TINYINT, "SELECT CAST(CAST(200 + 1 AS
FLOAT) AS TINYINT)", EMPTY_PARAM)
- );
- }
-
@ParameterizedTest(name = "{1}")
@MethodSource("decimalOverflowsValidation")
public void testCastDecimalOverflows(SqlTypeName type, String expr,
Boolean withException) {
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
index 8ee4f986d3..bb12dcaa8a 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.sql.engine;
import static org.apache.ignite.internal.lang.IgniteStringFormatter.format;
import static
org.apache.ignite.internal.sql.engine.util.SqlTestUtils.assertThrowsSqlException;
import static org.apache.ignite.internal.testframework.IgniteTestUtils.await;
+import static org.apache.ignite.lang.ErrorGroups.Sql.RUNTIME_ERR;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.params.provider.Arguments.arguments;
@@ -481,6 +482,41 @@ public class ItDynamicParameterTest extends
BaseSqlIntegrationTest {
});
}
+ @ParameterizedTest(name = "{1} {2}")
+ @MethodSource("integerOverflows")
+ @SuppressWarnings("ThrowableNotThrown")
+ public void testCalcOpOverflow(SqlTypeName type, String expr, Object
param) {
+ assertThrowsSqlException(RUNTIME_ERR, type.getName() + " out of
range", () -> sql(expr, param));
+ }
+
+ private static Stream<Arguments> integerOverflows() {
+ return Stream.of(
+ // BIGINT
+ arguments(SqlTypeName.BIGINT, "SELECT -(?)",
-9223372036854775808L),
+ arguments(SqlTypeName.BIGINT, "SELECT CAST(-? AS BIGINT)/-1",
"9223372036854775808"),
+ arguments(SqlTypeName.BIGINT, "SELECT CAST(-? AS BIGINT) *
-1", "9223372036854775808"),
+ arguments(SqlTypeName.BIGINT, "SELECT (?::BIGINT/-1)::BIGINT",
"-9223372036854775808"),
+
+ // INTEGER
+ arguments(SqlTypeName.INTEGER, "SELECT -(?)", -2147483648),
+ arguments(SqlTypeName.INTEGER, "SELECT CAST(-? AS
INTEGER)/-1", "2147483648"),
+ arguments(SqlTypeName.INTEGER, "SELECT CAST(-? AS INTEGER) *
-1", "2147483648"),
+ arguments(SqlTypeName.INTEGER, "SELECT (?/-1)::INTEGER",
"-2147483648"),
+
+ // SMALLINT
+ arguments(SqlTypeName.SMALLINT, "SELECT -CAST(? AS SMALLINT)",
-32768),
+ arguments(SqlTypeName.SMALLINT, "SELECT (CAST(-? AS
SMALLINT)/-1)::SMALLINT", 32768),
+ arguments(SqlTypeName.SMALLINT, "SELECT (CAST(-? AS SMALLINT)
* -1)::SMALLINT", 32768),
+ arguments(SqlTypeName.SMALLINT, "SELECT (?/-1)::SMALLINT",
-32768),
+
+ // TINYINT
+ arguments(SqlTypeName.TINYINT, "SELECT -CAST(? AS TINYINT)",
-128),
+ arguments(SqlTypeName.TINYINT, "SELECT (CAST(-? AS
TINYINT)/-1)::TINYINT", 128),
+ arguments(SqlTypeName.TINYINT, "SELECT (CAST(-? AS TINYINT) *
-1)::TINYINT", 128),
+ arguments(SqlTypeName.TINYINT, "SELECT (?/-1)::TINYINT", -128)
+ );
+ }
+
@Override
protected int initialNodes() {
return 1;
diff --git
a/modules/sql-engine/src/integrationTest/sql/insert/test_insert_type.test
b/modules/sql-engine/src/integrationTest/sql/insert/test_insert_type.test
index 4b8ee7a774..7aecc16ee7 100644
--- a/modules/sql-engine/src/integrationTest/sql/insert/test_insert_type.test
+++ b/modules/sql-engine/src/integrationTest/sql/insert/test_insert_type.test
@@ -30,3 +30,239 @@ SELECT * FROM strings ORDER BY cast(a AS INTEGER)
4
13
NULL
+
+statement ok
+CREATE TABLE t8(id int, i TINYINT);
+
+statement ok
+CREATE TABLE t16(id int, i SMALLINT);
+
+statement ok
+CREATE TABLE t32(id int, i INTEGER);
+
+statement ok
+CREATE TABLE t64(id int, i BIGINT);
+
+statement ok
+INSERT INTO t8 VALUES(1, -128);
+
+statement ok
+INSERT INTO t16 VALUES(1, -32768);
+
+statement ok
+INSERT INTO t32 VALUES(1, -2147483648);
+
+statement ok
+INSERT INTO t64 VALUES(1, -9223372036854775808);
+
+#Multiply
+
+statement error: TINYINT out of range
+INSERT INTO t16 VALUES(2, (SELECT i * i FROM t8 WHERE id=1));
+
+statement error: SMALLINT out of range
+INSERT INTO t32 VALUES(2, (SELECT i * i FROM t16 WHERE id=1));
+
+statement error: INTEGER out of range
+INSERT INTO t64 VALUES(2, (SELECT i * i FROM t32 WHERE id=1));
+
+
+for val in [SMALLINT, INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t16 VALUES(2, (SELECT i * i::${val} FROM t8 WHERE id=1));
+
+query T
+SELECT i FROM t16 WHERE id=2;
+----
+16384
+
+statement ok
+DELETE FROM t16 WHERE id=2;
+
+endfor
+
+
+for val in [INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t32 VALUES(2, (SELECT i * i::${val} FROM t16 WHERE id=1));
+
+query T
+SELECT i FROM t32 WHERE id=2;
+----
+1073741824
+
+statement ok
+DELETE FROM t32 WHERE id=2;
+
+endfor
+
+
+for val in [DECIMAL(19\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t64 VALUES(2, (SELECT i * i::${val} FROM t32 WHERE id=1));
+
+query T
+SELECT i FROM t64 WHERE id=2;
+----
+4611686018427387904
+
+statement ok
+DELETE FROM t64 WHERE id=2;
+
+endfor
+
+
+#Divide
+
+for val in [TINYINT, SMALLINT, INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT,
DOUBLE]
+
+statement ok
+INSERT INTO t16 VALUES(2, (SELECT i::${val}/-1 FROM t8 WHERE id=1));
+
+query T
+SELECT i FROM t16 WHERE id=2;
+----
+128
+
+statement ok
+DELETE FROM t16 WHERE id=2;
+
+endfor
+
+
+for val in [SMALLINT, INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t32 VALUES(2, (SELECT i::${val}/-1 FROM t16 WHERE id=1));
+
+query T
+SELECT i FROM t32 WHERE id=2;
+----
+32768
+
+statement ok
+DELETE FROM t32 WHERE id=2;
+
+endfor
+
+
+for val in [DECIMAL(19\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t64 VALUES(2, (SELECT i::${val}/-1 FROM t32 WHERE id=1));
+
+query T
+SELECT i FROM t64 WHERE id=2;
+----
+2147483648
+
+statement ok
+DELETE FROM t64 WHERE id=2;
+
+endfor
+
+
+
+#Add
+
+for val in [SMALLINT, INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t16 VALUES(2, (SELECT i::${val} + i FROM t8 WHERE id=1));
+
+query T
+SELECT i FROM t16 WHERE id=2;
+----
+-256
+
+statement ok
+DELETE FROM t16 WHERE id=2;
+
+endfor
+
+
+for val in [INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t32 VALUES(2, (SELECT i::${val} + i FROM t16 WHERE id=1));
+
+query T
+SELECT i FROM t32 WHERE id=2;
+----
+-65536
+
+statement ok
+DELETE FROM t32 WHERE id=2;
+
+endfor
+
+
+for val in [DECIMAL(11\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t64 VALUES(2, (SELECT i::${val} + i FROM t32 WHERE id=1));
+
+query T
+SELECT i FROM t64 WHERE id=2;
+----
+-4294967296
+
+statement ok
+DELETE FROM t64 WHERE id=2;
+
+endfor
+
+
+#Subtract
+
+for val in [SMALLINT, INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t16 VALUES(2, (SELECT i::${val} - 1 FROM t8 WHERE id=1));
+
+query T
+SELECT i FROM t16 WHERE id=2;
+----
+-129
+
+statement ok
+DELETE FROM t16 WHERE id=2;
+
+endfor
+
+
+for val in [INT, DECIMAL(10\,0), BIGINT, REAL, FLOAT, DOUBLE]
+
+statement ok
+INSERT INTO t32 VALUES(2, (SELECT i::${val} - 1 FROM t16 WHERE id=1));
+
+query T
+SELECT i FROM t32 WHERE id=2;
+----
+-32769
+
+statement ok
+DELETE FROM t32 WHERE id=2;
+
+endfor
+
+
+for val in [DECIMAL(11\,0), BIGINT, DOUBLE]
+
+statement ok
+INSERT INTO t64 VALUES(2, (SELECT i::${val} - 1 FROM t32 WHERE id=1));
+
+query T
+SELECT i FROM t64 WHERE id=2;
+----
+-2147483649
+
+statement ok
+DELETE FROM t64 WHERE id=2;
+
+endfor
+
+
diff --git
a/modules/sql-engine/src/integrationTest/sql/order/test_order_by_in_subquery.test
b/modules/sql-engine/src/integrationTest/sql/order/test_order_by_in_subquery.test
index 355358f792..525a792414 100644
---
a/modules/sql-engine/src/integrationTest/sql/order/test_order_by_in_subquery.test
+++
b/modules/sql-engine/src/integrationTest/sql/order/test_order_by_in_subquery.test
@@ -33,7 +33,7 @@ statement error
SELECT a-10 AS k FROM test UNION SELECT a-10 AS l FROM test ORDER BY l
# ORDER BY on alias in right-most query but related just to the subquery.
-query I
+query I rowsort
SELECT a-10 AS k FROM test UNION (SELECT a-10 AS l FROM test ORDER BY l)
----
1
diff --git
a/modules/sql-engine/src/integrationTest/sql/types/integer/integer_integer_overflow_cast.test
b/modules/sql-engine/src/integrationTest/sql/types/integer/integer_integer_overflow_cast.test
new file mode 100644
index 0000000000..36e010056f
--- /dev/null
+++
b/modules/sql-engine/src/integrationTest/sql/types/integer/integer_integer_overflow_cast.test
@@ -0,0 +1,78 @@
+# name: test/sql/types/integer/integer_integer_overflow_cast.test
+# description: Test casting from integer to integer
+# group: [integer]
+
+statement ok
+PRAGMA enable_verification
+
+statement error: INTEGER out of range
+SELECT CAST (-2147483648 AS INTEGER)/-1::INTEGER
+
+statement error: INTEGER out of range
+SELECT CAST(CAST(2147483648 AS BIGINT) AS INTEGER)
+
+statement error: INTEGER out of range
+SELECT -CAST(-2147483648 AS INTEGER)
+
+statement error: INTEGER out of range
+SELECT CAST(9223372036854775807.5 + 9223372036854775807.5 AS INTEGER)
+
+statement error: INTEGER out of range
+SELECT CAST(CAST(2147483647 + 1 AS FLOAT) AS INTEGER)
+
+
+statement error: SMALLINT out of range
+SELECT CAST (-32768 AS SMALLINT)/-1::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT (CAST (-32768 AS SMALLINT)/-1::SMALLINT)::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT CAST(9223372036854775807.5 + 9223372036854775807.5 AS SMALLINT)
+
+statement error: SMALLINT out of range
+SELECT CAST(CAST(33000 AS BIGINT) AS SMALLINT)
+
+statement error: SMALLINT out of range
+SELECT CAST(CAST(33000 AS FLOAT) AS SMALLINT)
+
+statement error: SMALLINT out of range
+SELECT CAST(CAST(33000 + 1 AS FLOAT) AS SMALLINT)
+
+statement error: SMALLINT out of range
+SELECT -CAST(-32768 AS SMALLINT)
+
+statement error: SMALLINT out of range
+SELECT CAST(CAST(32767 + 1 AS FLOAT) AS SMALLINT)
+
+
+statement error: TINYINT out of range
+SELECT CAST(-128 AS TINYINT)/-1::TINYINT
+
+statement error: TINYINT out of range
+SELECT CAST(9223372036854775807.5 + 9223372036854775807.5 AS TINYINT)
+
+statement error: TINYINT out of range
+SELECT CAST(CAST(200 AS BIGINT) AS TINYINT)
+
+statement error: TINYINT out of range
+SELECT CAST(CAST(200 AS FLOAT) AS TINYINT)
+
+statement error: TINYINT out of range
+SELECT CAST(CAST(200 + 1 AS FLOAT) AS TINYINT)
+
+statement error: TINYINT out of range
+SELECT -CAST(-128 AS TINYINT)
+
+statement error: TINYINT out of range
+SELECT CAST(CAST(200 + 1 AS FLOAT) AS TINYINT)
+
+
+statement error: BIGINT out of range
+SELECT CAST(-9223372036854775808 AS BIGINT)/-1::BIGINT
+
+statement error: BIGINT out of range
+SELECT -CAST(-9223372036854775808 AS BIGINT)
+
+
+
diff --git
a/modules/sql-engine/src/integrationTest/sql/types/integer/integer_overflow.test
b/modules/sql-engine/src/integrationTest/sql/types/integer/integer_overflow.test
new file mode 100644
index 0000000000..ccca1cc8fd
--- /dev/null
+++
b/modules/sql-engine/src/integrationTest/sql/types/integer/integer_overflow.test
@@ -0,0 +1,79 @@
+# name: test/sql/types/integer/integer_overflow.test
+# description: Test casting from integer to integer
+# group: [integer]
+
+statement ok
+PRAGMA enable_verification
+
+statement error: INTEGER out of range
+SELECT -2147483648/-1
+
+statement error: INTEGER out of range
+SELECT 2147483648::INTEGER
+
+statement error: INTEGER out of range
+SELECT 2147483647 + 1
+
+statement error: INTEGER out of range
+SELECT 2147483647 * 2
+
+statement error: INTEGER out of range
+SELECT -2147483648 - 1
+
+statement error: INTEGER out of range
+SELECT -(-2147483647 - 1)
+
+statement error: SMALLINT out of range
+SELECT -32768::SMALLINT/-1
+
+statement error: SMALLINT out of range
+SELECT (-32768/-1)::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT 32000::SMALLINT + 1000::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT 17000::SMALLINT * 2::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT -32000::SMALLINT - 1000::SMALLINT
+
+statement error: SMALLINT out of range
+SELECT -(-32767::SMALLINT - 1::SMALLINT)
+
+statement error: TINYINT out of range
+SELECT -128::TINYINT/-1
+
+statement error: TINYINT out of range
+SELECT (-128/-1)::TINYINT
+
+statement error: TINYINT out of range
+SELECT 2::TINYINT + 127::TINYINT
+
+statement error: TINYINT out of range
+SELECT 2::TINYINT * 127::TINYINT
+
+statement error: TINYINT out of range
+SELECT -2::TINYINT - 127::TINYINT
+
+statement error: TINYINT out of range
+SELECT -(-127::TINYINT - 1::TINYINT)
+
+statement error: BIGINT out of range
+SELECT -9223372036854775808/-1
+
+statement error: BIGINT out of range
+SELECT 9223372036854775808
+
+statement error: BIGINT out of range
+SELECT 9223372036854775807 + 1
+
+statement error: BIGINT out of range
+SELECT 9223372036854775807 * 2
+
+statement error: BIGINT out of range
+SELECT -9223372036854775808 - 1
+
+statement error: BIGINT out of range
+SELECT -(-9223372036854775807 - 1)
+