This is an automated email from the ASF dual-hosted git repository. ppa 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 5370b3b85b IGNITE-20997 Sql. Improve the error message when attempting to divide by zero (#2951) 5370b3b85b is described below commit 5370b3b85b2d7f4a793a81d180912ff7998306ce Author: ygerzhedovich <41903880+ygerzhedov...@users.noreply.github.com> AuthorDate: Wed Dec 13 14:05:10 2023 +0200 IGNITE-20997 Sql. Improve the error message when attempting to divide by zero (#2951) --- .../org/apache/ignite/jdbc/ItJdbcTransactionTest.java | 2 +- .../apache/ignite/internal/sql/api/ItSqlApiBaseTest.java | 10 +++++----- .../internal/sql/engine/ItSqlMultiStatementTest.java | 2 +- .../internal/sql/engine/ItSqlMultiStatementTxTest.java | 2 +- .../ignite/internal/sql/engine/util/IgniteMath.java | 16 ++++++++++++++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java index 58c6888741..ad0d63dea6 100644 --- a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java +++ b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcTransactionTest.java @@ -256,7 +256,7 @@ public class ItJdbcTransactionTest extends AbstractJdbcSelfTest { conn.setAutoCommit(false); try (Statement stmt = conn.createStatement()) { - assertThrowsSqlException("/ by zero", () -> stmt.executeQuery("SELECT 1/0").next()); + assertThrowsSqlException("Division by zero", () -> stmt.executeQuery("SELECT 1/0").next()); assertThrowsSqlException("Transaction is already finished", () -> { diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java index c0943e7fad..b4f57ee504 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/api/ItSqlApiBaseTest.java @@ -519,8 +519,8 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { "CREATE TABLE TEST2 (VAL INT)"); // Execute error. - checkSqlError(Sql.RUNTIME_ERR, "/ by zero", ses, "SELECT 1 / ?", 0); - checkSqlError(Sql.RUNTIME_ERR, "/ by zero", ses, "UPDATE TEST SET val0 = val0/(val0 - ?) + " + ROW_COUNT, 0); + checkSqlError(Sql.RUNTIME_ERR, "Division by zero", ses, "SELECT 1 / ?", 0); + checkSqlError(Sql.RUNTIME_ERR, "Division by zero", ses, "UPDATE TEST SET val0 = val0/(val0 - ?) + " + ROW_COUNT, 0); checkSqlError(Sql.RUNTIME_ERR, "negative substring length not allowed", ses, "SELECT SUBSTRING('foo', 1, -3)"); // No result set error. @@ -673,7 +673,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { assertThrowsSqlException( Sql.RUNTIME_ERR, - "/ by zero", + "Division by zero", () -> execute(tx, ses, dmlQuery, 1).affectedRows()); IgniteException err = assertThrows(IgniteException.class, () -> { @@ -704,7 +704,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { assertThrowsSqlException( Sql.RUNTIME_ERR, - "/ by zero", + "Division by zero", () -> execute(tx, ses, "SELECT val/? FROM tst WHERE id=?", 0, 1)); IgniteException err = assertThrows(IgniteException.class, () -> { @@ -868,7 +868,7 @@ public abstract class ItSqlApiBaseTest extends BaseSqlIntegrationTest { try (Session session = sql.createSession()) { assertThrowsSqlException( Sql.RUNTIME_ERR, - "/ by zero", + "Division by zero", () -> executeScript(session, "CREATE TABLE test (id INT PRIMARY KEY, step INTEGER); " + "INSERT INTO test VALUES(1, 0); " diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java index f48e0ccdf7..bcce32e083 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTest.java @@ -141,7 +141,7 @@ public class ItSqlMultiStatementTest extends BaseSqlMultiStatementTest { cursor.closeAsync(); CompletableFuture<AsyncSqlCursor<InternalSqlRow>> curFut0 = cursor.nextResult(); - assertThrowsSqlException(RUNTIME_ERR, "/ by zero", () -> await(curFut0)); + assertThrowsSqlException(RUNTIME_ERR, "Division by zero", () -> await(curFut0)); } // Validation error. diff --git a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTxTest.java b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTxTest.java index 92db578355..f6cf415100 100644 --- a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTxTest.java +++ b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItSqlMultiStatementTxTest.java @@ -239,7 +239,7 @@ public class ItSqlMultiStatementTxTest extends BaseSqlMultiStatementTest { + "COMMIT;" ); - assertThrowsSqlException(RUNTIME_ERR, "/ by zero", () -> fetchAllCursors(cursor)); + assertThrowsSqlException(RUNTIME_ERR, "Division by zero", () -> fetchAllCursors(cursor)); verifyFinishedTxCount(1); diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMath.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMath.java index 4b49020c4e..de069eb7c0 100644 --- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMath.java +++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/util/IgniteMath.java @@ -215,6 +215,9 @@ public class IgniteMath { if (y == -1) { return negateExact(x); } + if (y == 0) { + throwDivisionByZero(); + } return x / y; } @@ -224,6 +227,9 @@ public class IgniteMath { if (y == -1) { return negateExact(x); } + if (y == 0) { + throwDivisionByZero(); + } return x / y; } @@ -233,6 +239,9 @@ public class IgniteMath { if (y == -1) { return negateExact(x); } + if (y == 0) { + throwDivisionByZero(); + } return (short) (x / y); } @@ -242,10 +251,17 @@ public class IgniteMath { if (y == -1) { return negateExact(x); } + if (y == 0) { + throwDivisionByZero(); + } return (byte) (x / y); } + private static void throwDivisionByZero() { + throw new SqlException(RUNTIME_ERR, "Division by zero"); + } + /** Cast value to {@code int}, throwing an exception if the result overflows an {@code int}. */ public static int convertToIntExact(long x) { if ((int) x != x) {