This is an automated email from the ASF dual-hosted git repository. maxgekk pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push: new c274812284a [SPARK-39108][SQL] Show hints for try_add/try_substract/try_multiply in int/long overflow errors c274812284a is described below commit c274812284a3b7ec725e6b8afc2e7ab0f91b923e Author: Gengliang Wang <gengli...@apache.org> AuthorDate: Thu May 5 23:03:44 2022 +0300 [SPARK-39108][SQL] Show hints for try_add/try_substract/try_multiply in int/long overflow errors ### What changes were proposed in this pull request? Show hints for try_add/try_substract/try_multiply in int/long overflow errors ### Why are the changes needed? Better error message for resolving the overflow errors under ANSI mode. ### Does this PR introduce _any_ user-facing change? No, minor error message improvement ### How was this patch tested? UT Closes #36456 from gengliangwang/tryHint. Authored-by: Gengliang Wang <gengli...@apache.org> Signed-off-by: Max Gekk <max.g...@gmail.com> --- .../scala/org/apache/spark/sql/catalyst/util/MathUtils.scala | 12 ++++++------ .../test/resources/sql-tests/results/postgreSQL/int4.sql.out | 12 ++++++------ .../test/resources/sql-tests/results/postgreSQL/int8.sql.out | 8 ++++---- .../sql-tests/results/postgreSQL/window_part2.sql.out | 4 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/MathUtils.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/MathUtils.scala index f96c9fba5a3..e5c87a41ea8 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/MathUtils.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/MathUtils.scala @@ -27,32 +27,32 @@ object MathUtils { def addExact(a: Int, b: Int): Int = withOverflow(Math.addExact(a, b)) def addExact(a: Int, b: Int, errorContext: String): Int = - withOverflow(Math.addExact(a, b), errorContext = errorContext) + withOverflow(Math.addExact(a, b), hint = "try_add", errorContext = errorContext) def addExact(a: Long, b: Long): Long = withOverflow(Math.addExact(a, b)) def addExact(a: Long, b: Long, errorContext: String): Long = - withOverflow(Math.addExact(a, b), errorContext = errorContext) + withOverflow(Math.addExact(a, b), hint = "try_add", errorContext = errorContext) def subtractExact(a: Int, b: Int): Int = withOverflow(Math.subtractExact(a, b)) def subtractExact(a: Int, b: Int, errorContext: String): Int = - withOverflow(Math.subtractExact(a, b), errorContext = errorContext) + withOverflow(Math.subtractExact(a, b), hint = "try_subtract", errorContext = errorContext) def subtractExact(a: Long, b: Long): Long = withOverflow(Math.subtractExact(a, b)) def subtractExact(a: Long, b: Long, errorContext: String): Long = - withOverflow(Math.subtractExact(a, b), errorContext = errorContext) + withOverflow(Math.subtractExact(a, b), hint = "try_subtract", errorContext = errorContext) def multiplyExact(a: Int, b: Int): Int = withOverflow(Math.multiplyExact(a, b)) def multiplyExact(a: Int, b: Int, errorContext: String): Int = - withOverflow(Math.multiplyExact(a, b), errorContext = errorContext) + withOverflow(Math.multiplyExact(a, b), hint = "try_multiply", errorContext = errorContext) def multiplyExact(a: Long, b: Long): Long = withOverflow(Math.multiplyExact(a, b)) def multiplyExact(a: Long, b: Long, errorContext: String): Long = - withOverflow(Math.multiplyExact(a, b), errorContext = errorContext) + withOverflow(Math.multiplyExact(a, b), hint = "try_multiply", errorContext = errorContext) def negateExact(a: Int): Int = withOverflow(Math.negateExact(a)) diff --git a/sql/core/src/test/resources/sql-tests/results/postgreSQL/int4.sql.out b/sql/core/src/test/resources/sql-tests/results/postgreSQL/int4.sql.out index 6b42e31340f..a39cdbc340c 100755 --- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/int4.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/int4.sql.out @@ -200,7 +200,7 @@ SELECT '' AS five, i.f1, i.f1 * smallint('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 * smallint('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^^^^^^ @@ -223,7 +223,7 @@ SELECT '' AS five, i.f1, i.f1 * int('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 * int('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^ @@ -246,7 +246,7 @@ SELECT '' AS five, i.f1, i.f1 + smallint('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_add'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 + smallint('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^^^^^^ @@ -270,7 +270,7 @@ SELECT '' AS five, i.f1, i.f1 + int('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_add'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 + int('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^ @@ -294,7 +294,7 @@ SELECT '' AS five, i.f1, i.f1 - smallint('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_subtract'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 - smallint('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^^^^^^ @@ -318,7 +318,7 @@ SELECT '' AS five, i.f1, i.f1 - int('2') AS x FROM INT4_TBL i struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] integer overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] integer overflow. To return NULL instead, use 'try_subtract'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 25) == SELECT '' AS five, i.f1, i.f1 - int('2') AS x FROM INT4_TBL i ^^^^^^^^^^^^^^^ diff --git a/sql/core/src/test/resources/sql-tests/results/postgreSQL/int8.sql.out b/sql/core/src/test/resources/sql-tests/results/postgreSQL/int8.sql.out index 23c14d05086..2ef77e08186 100755 --- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/int8.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/int8.sql.out @@ -392,7 +392,7 @@ SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 28) == SELECT '' AS three, q1, q2, q1 * q2 AS multiply FROM INT8_TBL ^^^^^^^ @@ -754,7 +754,7 @@ SELECT bigint((-9223372036854775808)) * bigint((-1)) struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 7) == SELECT bigint((-9223372036854775808)) * bigint((-1)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -782,7 +782,7 @@ SELECT bigint((-9223372036854775808)) * int((-1)) struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 7) == SELECT bigint((-9223372036854775808)) * int((-1)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -810,7 +810,7 @@ SELECT bigint((-9223372036854775808)) * smallint((-1)) struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_multiply'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. == SQL(line 1, position 7) == SELECT bigint((-9223372036854775808)) * smallint((-1)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/sql/core/src/test/resources/sql-tests/results/postgreSQL/window_part2.sql.out b/sql/core/src/test/resources/sql-tests/results/postgreSQL/window_part2.sql.out index 8f4ea4e17c8..c71ffcaa86e 100644 --- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/window_part2.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/window_part2.sql.out @@ -225,7 +225,7 @@ from range(9223372036854775804, 9223372036854775807) x struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_add'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. -- !query @@ -235,7 +235,7 @@ from range(-9223372036854775806, -9223372036854775805) x struct<> -- !query output org.apache.spark.SparkArithmeticException -[ARITHMETIC_OVERFLOW] long overflow. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. +[ARITHMETIC_OVERFLOW] long overflow. To return NULL instead, use 'try_add'. If necessary set spark.sql.ansi.enabled to false (except for ANSI interval type) to bypass this error. -- !query --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org