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

Reply via email to