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 1e305643b3b [SPARK-40663][SQL] Migrate execution errors onto error classes: _LEGACY_ERROR_TEMP_2000-2025 1e305643b3b is described below commit 1e305643b3b4adfbfdab8ed181f55ea2e6b74f0d Author: itholic <haejoon....@databricks.com> AuthorDate: Wed Oct 5 13:14:19 2022 +0300 [SPARK-40663][SQL] Migrate execution errors onto error classes: _LEGACY_ERROR_TEMP_2000-2025 ### What changes were proposed in this pull request? This PR proposes to migrate 26 execution errors onto temporary error classes with the prefix `_LEGACY_ERROR_TEMP_2000` to `_LEGACY_ERROR_TEMP_2024`. The error classes are prefixed with `_LEGACY_ERROR_TEMP_` indicates the dev-facing error messages, and won't be exposed to end users. ### Why are the changes needed? To speed-up the error class migration. The migration on temporary error classes allow us to analyze the errors, so we can detect the most popular error classes. ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? ``` $ build/sbt "sql/testOnly org.apache.spark.sql.SQLQueryTestSuite" $ build/sbt "test:testOnly *SQLQuerySuite" $ build/sbt -Phadoop-3 -Phive-thriftserver catalyst/test hive-thriftserver/test ``` Closes #38104 from itholic/SPARK-40540-2000. Authored-by: itholic <haejoon....@databricks.com> Signed-off-by: Max Gekk <max.g...@gmail.com> --- core/src/main/resources/error/error-classes.json | 130 ++++++++++++++ .../spark/sql/errors/QueryExecutionErrors.scala | 186 ++++++++++++++------- .../expressions/aggregate/PercentileSuite.scala | 18 +- .../resources/sql-tests/results/ansi/date.sql.out | 29 +++- .../sql-tests/results/ansi/timestamp.sql.out | 30 +++- .../sql-tests/results/postgreSQL/date.sql.out | 30 +++- .../sql-tests/results/regexp-functions.sql.out | 104 +++++++++--- .../results/timestampNTZ/timestamp-ansi.sql.out | 30 +++- 8 files changed, 438 insertions(+), 119 deletions(-) diff --git a/core/src/main/resources/error/error-classes.json b/core/src/main/resources/error/error-classes.json index 653c4a6938f..d27a2cbde97 100644 --- a/core/src/main/resources/error/error-classes.json +++ b/core/src/main/resources/error/error-classes.json @@ -3002,5 +3002,135 @@ "message" : [ "Failed to execute command because subquery expressions are not allowed in DEFAULT values." ] + }, + "_LEGACY_ERROR_TEMP_2000" : { + "message" : [ + "<message>. If necessary set <ansiConfig> to false to bypass this error." + ] + }, + "_LEGACY_ERROR_TEMP_2001" : { + "message" : [ + "<message> If necessary set <ansiConfig> to false to bypass this error" + ] + }, + "_LEGACY_ERROR_TEMP_2002" : { + "message" : [ + "<message>" + ] + }, + "_LEGACY_ERROR_TEMP_2003" : { + "message" : [ + "Unsuccessful try to zip maps with <size> unique keys due to exceeding the array size limit <maxRoundedArrayLength>" + ] + }, + "_LEGACY_ERROR_TEMP_2004" : { + "message" : [ + "no default for type <dataType>" + ] + }, + "_LEGACY_ERROR_TEMP_2005" : { + "message" : [ + "Type <dataType> does not support ordered operations" + ] + }, + "_LEGACY_ERROR_TEMP_2006" : { + "message" : [ + "The specified group index cannot be less than zero" + ] + }, + "_LEGACY_ERROR_TEMP_2007" : { + "message" : [ + "Regex group count is <groupCount>, but the specified group index is <groupIndex>" + ] + }, + "_LEGACY_ERROR_TEMP_2008" : { + "message" : [ + "Find an invalid url string <url>. If necessary set <ansiConfig> to false to bypass this error." + ] + }, + "_LEGACY_ERROR_TEMP_2009" : { + "message" : [ + "dataType" + ] + }, + "_LEGACY_ERROR_TEMP_2010" : { + "message" : [ + "Window Functions do not support merging." + ] + }, + "_LEGACY_ERROR_TEMP_2011" : { + "message" : [ + "Unexpected data type <dataType>" + ] + }, + "_LEGACY_ERROR_TEMP_2012" : { + "message" : [ + "Unexpected type <dataType>" + ] + }, + "_LEGACY_ERROR_TEMP_2013" : { + "message" : [ + "Negative values found in <frequencyExpression>" + ] + }, + "_LEGACY_ERROR_TEMP_2014" : { + "message" : [ + "<funcName> is not matched at addNewFunction" + ] + }, + "_LEGACY_ERROR_TEMP_2015" : { + "message" : [ + "Cannot generate <codeType> code for incomparable type: <dataType>" + ] + }, + "_LEGACY_ERROR_TEMP_2016" : { + "message" : [ + "Can not interpolate <arg> into code block." + ] + }, + "_LEGACY_ERROR_TEMP_2017" : { + "message" : [ + "not resolved" + ] + }, + "_LEGACY_ERROR_TEMP_2018" : { + "message" : [ + "class `<cls>` is not supported by `MapObjects` as resulting collection." + ] + }, + "_LEGACY_ERROR_TEMP_2019" : { + "message" : [ + "Cannot use null as map key!" + ] + }, + "_LEGACY_ERROR_TEMP_2020" : { + "message" : [ + "Couldn't find a valid constructor on <cls>" + ] + }, + "_LEGACY_ERROR_TEMP_2021" : { + "message" : [ + "Couldn't find a primary constructor on <cls>" + ] + }, + "_LEGACY_ERROR_TEMP_2022" : { + "message" : [ + "Unsupported natural join type <joinType>" + ] + }, + "_LEGACY_ERROR_TEMP_2023" : { + "message" : [ + "Unresolved encoder expected, but <attr> was found." + ] + }, + "_LEGACY_ERROR_TEMP_2024" : { + "message" : [ + "Only expression encoders are supported for now." + ] + }, + "_LEGACY_ERROR_TEMP_2025" : { + "message" : [ + "<className> must override either <m1> or <m2>" + ] } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala index 7c7561b3a71..5244a5283cd 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala @@ -286,20 +286,29 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { summary = "") } - def ansiDateTimeError(e: DateTimeException): DateTimeException = { - val newMessage = s"${e.getMessage}. " + - s"If necessary set ${SQLConf.ANSI_ENABLED.key} to false to bypass this error." - new DateTimeException(newMessage, e.getCause) + def ansiDateTimeError(e: Exception): SparkDateTimeException = { + new SparkDateTimeException( + errorClass = "_LEGACY_ERROR_TEMP_2000", + errorSubClass = None, + messageParameters = Map( + "message" -> e.getMessage, + "ansiConfig" -> toSQLConf(SQLConf.ANSI_ENABLED.key)), + context = Array.empty, + summary = "") } - def ansiIllegalArgumentError(message: String): IllegalArgumentException = { - val newMessage = s"$message. If necessary set ${SQLConf.ANSI_ENABLED.key} " + - s"to false to bypass this error." - new IllegalArgumentException(newMessage) + def ansiIllegalArgumentError(message: String): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2001", + messageParameters = Map( + "message" -> message, + "ansiConfig" -> toSQLConf(SQLConf.ANSI_ENABLED.key))) } - def ansiIllegalArgumentError(e: IllegalArgumentException): IllegalArgumentException = { - ansiIllegalArgumentError(e.getMessage) + def ansiIllegalArgumentError(e: Exception): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2002", + messageParameters = Map("message" -> e.getMessage)) } def overflowInSumOfDecimalError(context: SQLQueryContext): ArithmeticException = { @@ -310,10 +319,12 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { arithmeticOverflowError("Overflow in integral divide", "try_divide", context) } - def mapSizeExceedArraySizeWhenZipMapError(size: Int): RuntimeException = { - new RuntimeException(s"Unsuccessful try to zip maps with $size " + - "unique keys due to exceeding the array size limit " + - s"${ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH}.") + def mapSizeExceedArraySizeWhenZipMapError(size: Int): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2003", + messageParameters = Map( + "size" -> size.toString(), + "maxRoundedArrayLength" -> ByteArrayMethods.MAX_ROUNDED_ARRAY_LENGTH.toString())) } def literalTypeUnsupportedError(v: Any): RuntimeException = { @@ -334,27 +345,41 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { "type" -> toSQLType(dataType))) } - def noDefaultForDataTypeError(dataType: DataType): RuntimeException = { - new RuntimeException(s"no default for type $dataType") + def noDefaultForDataTypeError(dataType: DataType): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2004", + messageParameters = Map("dataType" -> dataType.toString())) } - def orderedOperationUnsupportedByDataTypeError(dataType: DataType): Throwable = { - new IllegalArgumentException(s"Type $dataType does not support ordered operations") + def orderedOperationUnsupportedByDataTypeError( + dataType: DataType): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2005", + errorSubClass = None, + messageParameters = Map("dataType" -> dataType.toString())) } - def regexGroupIndexLessThanZeroError(): Throwable = { - new IllegalArgumentException("The specified group index cannot be less than zero") + def regexGroupIndexLessThanZeroError(): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2006", + messageParameters = Map.empty) } def regexGroupIndexExceedGroupCountError( - groupCount: Int, groupIndex: Int): Throwable = { - new IllegalArgumentException( - s"Regex group count is $groupCount, but the specified group index is $groupIndex") + groupCount: Int, groupIndex: Int): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2007", + messageParameters = Map( + "groupCount" -> groupCount.toString(), + "groupIndex" -> groupIndex.toString())) } - def invalidUrlError(url: UTF8String, e: URISyntaxException): Throwable = { - new IllegalArgumentException(s"Find an invalid url string ${url.toString}. " + - s"If necessary set ${SQLConf.ANSI_ENABLED.key} to false to bypass this error.", e) + def invalidUrlError(url: UTF8String, e: URISyntaxException): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2008", + messageParameters = Map( + "url" -> url.toString, + "ansiConfig" -> toSQLConf(SQLConf.ANSI_ENABLED.key))) } def illegalUrlError(url: UTF8String): Throwable = { @@ -364,52 +389,74 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { ) } - def dataTypeOperationUnsupportedError(): Throwable = { - new UnsupportedOperationException("dataType") + def dataTypeOperationUnsupportedError(): SparkUnsupportedOperationException = { + new SparkUnsupportedOperationException( + errorClass = "_LEGACY_ERROR_TEMP_2009", + messageParameters = Map.empty) } - def mergeUnsupportedByWindowFunctionError(): Throwable = { - new UnsupportedOperationException("Window Functions do not support merging.") + def mergeUnsupportedByWindowFunctionError(): SparkUnsupportedOperationException = { + new SparkUnsupportedOperationException( + errorClass = "_LEGACY_ERROR_TEMP_2010", + messageParameters = Map.empty) } - def dataTypeUnexpectedError(dataType: DataType): Throwable = { - new UnsupportedOperationException(s"Unexpected data type ${dataType.catalogString}") + def dataTypeUnexpectedError(dataType: DataType): SparkUnsupportedOperationException = { + new SparkUnsupportedOperationException( + errorClass = "_LEGACY_ERROR_TEMP_2011", + messageParameters = Map("dataType" -> dataType.catalogString)) } - def typeUnsupportedError(dataType: DataType): Throwable = { - new IllegalArgumentException(s"Unexpected type $dataType") + def typeUnsupportedError(dataType: DataType): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2012", + messageParameters = Map("dataType" -> dataType.toString())) } - def negativeValueUnexpectedError(frequencyExpression : Expression): Throwable = { - new SparkException(s"Negative values found in ${frequencyExpression.sql}") + def negativeValueUnexpectedError( + frequencyExpression : Expression): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2013", + messageParameters = Map("frequencyExpression" -> frequencyExpression.sql)) } - def addNewFunctionMismatchedWithFunctionError(funcName: String): Throwable = { - new IllegalArgumentException(s"$funcName is not matched at addNewFunction") + def addNewFunctionMismatchedWithFunctionError(funcName: String): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2014", + messageParameters = Map("funcName" -> funcName)) } def cannotGenerateCodeForIncomparableTypeError( - codeType: String, dataType: DataType): Throwable = { - new IllegalArgumentException( - s"Cannot generate $codeType code for incomparable type: ${dataType.catalogString}") + codeType: String, dataType: DataType): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2015", + messageParameters = Map( + "codeType" -> codeType, + "dataType" -> dataType.catalogString)) } - def cannotInterpolateClassIntoCodeBlockError(arg: Any): Throwable = { - new IllegalArgumentException( - s"Can not interpolate ${arg.getClass.getName} into code block.") + def cannotInterpolateClassIntoCodeBlockError(arg: Any): SparkIllegalArgumentException = { + new SparkIllegalArgumentException( + errorClass = "_LEGACY_ERROR_TEMP_2016", + messageParameters = Map("arg" -> arg.getClass.getName)) } - def customCollectionClsNotResolvedError(): Throwable = { - new UnsupportedOperationException("not resolved") + def customCollectionClsNotResolvedError(): SparkUnsupportedOperationException = { + new SparkUnsupportedOperationException( + errorClass = "_LEGACY_ERROR_TEMP_2017", + messageParameters = Map.empty) } - def classUnsupportedByMapObjectsError(cls: Class[_]): RuntimeException = { - new RuntimeException(s"class `${cls.getName}` is not supported by `MapObjects` as " + - "resulting collection.") + def classUnsupportedByMapObjectsError(cls: Class[_]): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2018", + messageParameters = Map("cls" -> cls.getName)) } - def nullAsMapKeyNotAllowedError(): RuntimeException = { - new RuntimeException("Cannot use null as map key!") + def nullAsMapKeyNotAllowedError(): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2019", + messageParameters = Map.empty) } def methodNotDeclaredError(name: String): Throwable = { @@ -417,28 +464,41 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { s"""A method named "$name" is not declared in any enclosing class nor any supertype""") } - def constructorNotFoundError(cls: String): Throwable = { - new RuntimeException(s"Couldn't find a valid constructor on $cls") + def constructorNotFoundError(cls: String): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2020", + messageParameters = Map("cls" -> cls.toString())) } - def primaryConstructorNotFoundError(cls: Class[_]): Throwable = { - new RuntimeException(s"Couldn't find a primary constructor on $cls") + def primaryConstructorNotFoundError(cls: Class[_]): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2021", + messageParameters = Map("cls" -> cls.toString())) } - def unsupportedNaturalJoinTypeError(joinType: JoinType): Throwable = { - new RuntimeException("Unsupported natural join type " + joinType) + def unsupportedNaturalJoinTypeError(joinType: JoinType): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2022", + messageParameters = Map("joinType" -> joinType.toString())) } - def notExpectedUnresolvedEncoderError(attr: AttributeReference): Throwable = { - new RuntimeException(s"Unresolved encoder expected, but $attr was found.") + def notExpectedUnresolvedEncoderError(attr: AttributeReference): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2023", + messageParameters = Map("attr" -> attr.toString())) } - def unsupportedEncoderError(): Throwable = { - new RuntimeException("Only expression encoders are supported for now.") + def unsupportedEncoderError(): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2024", + messageParameters = Map.empty) } - def notOverrideExpectedMethodsError(className: String, m1: String, m2: String): Throwable = { - new RuntimeException(s"$className must override either $m1 or $m2") + def notOverrideExpectedMethodsError( + className: String, m1: String, m2: String): SparkRuntimeException = { + new SparkRuntimeException( + errorClass = "_LEGACY_ERROR_TEMP_2025", + messageParameters = Map("className" -> className, "m1" -> m1, "m2" -> m2)) } def failToConvertValueToJsonError(value: AnyRef, cls: Class[_], dataType: DataType): Throwable = { diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/PercentileSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/PercentileSuite.scala index 5f7abbdfa0a..61ccaefb270 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/PercentileSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/aggregate/PercentileSuite.scala @@ -17,8 +17,8 @@ package org.apache.spark.sql.catalyst.expressions.aggregate -import org.apache.spark.SparkException import org.apache.spark.SparkFunSuite +import org.apache.spark.SparkIllegalArgumentException import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.analysis.TypeCheckResult._ import org.apache.spark.sql.catalyst.analysis.UnresolvedAttribute @@ -321,13 +321,15 @@ class PercentileSuite extends SparkFunSuite { val buffer = new GenericInternalRow(new Array[Any](2)) agg.initialize(buffer) - val caught = - intercept[SparkException]{ - // Add some non-empty row with negative frequency - agg.update(buffer, InternalRow(1, -5)) - agg.eval(buffer) - } - assert(caught.getMessage.startsWith("Negative values found in ")) + checkError( + exception = + intercept[SparkIllegalArgumentException]{ + // Add some non-empty row with negative frequency + agg.update(buffer, InternalRow(1, -5)) + agg.eval(buffer) + }, + errorClass = "_LEGACY_ERROR_TEMP_2013", + parameters = Map("frequencyExpression" -> "CAST(boundreference() AS INT)")) } private def compareEquals( diff --git a/sql/core/src/test/resources/sql-tests/results/ansi/date.sql.out b/sql/core/src/test/resources/sql-tests/results/ansi/date.sql.out index 3c165871889..f8e88cdba0b 100644 --- a/sql/core/src/test/resources/sql-tests/results/ansi/date.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ansi/date.sql.out @@ -50,8 +50,14 @@ select make_date(2000, 13, 1) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for MonthOfYear (valid values 1 - 12): 13. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for MonthOfYear (valid values 1 - 12): 13" + } +} -- !query @@ -59,8 +65,14 @@ select make_date(2000, 1, 33) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for DayOfMonth (valid values 1 - 28/31): 33. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for DayOfMonth (valid values 1 - 28/31): 33" + } +} -- !query @@ -226,8 +238,13 @@ select next_day("2015-07-23", "xx") -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Illegal input for day of week: xx. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2002", + "messageParameters" : { + "message" : "Illegal input for day of week: xx" + } +} -- !query diff --git a/sql/core/src/test/resources/sql-tests/results/ansi/timestamp.sql.out b/sql/core/src/test/resources/sql-tests/results/ansi/timestamp.sql.out index c80256d0a8b..59137f5ea72 100644 --- a/sql/core/src/test/resources/sql-tests/results/ansi/timestamp.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ansi/timestamp.sql.out @@ -149,8 +149,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 61) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 61. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 61" + } +} -- !query @@ -174,8 +180,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 99.999999) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 99. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 99" + } +} -- !query @@ -183,8 +195,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 999.999999) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 999. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 999" + } +} -- !query diff --git a/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out b/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out index 73ac127b9e0..1103aff05d8 100755 --- a/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/postgreSQL/date.sql.out @@ -673,8 +673,14 @@ select make_date(2013, 2, 30) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid date 'FEBRUARY 30'. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid date 'FEBRUARY 30'" + } +} -- !query @@ -682,8 +688,14 @@ select make_date(2013, 13, 1) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for MonthOfYear (valid values 1 - 12): 13. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for MonthOfYear (valid values 1 - 12): 13" + } +} -- !query @@ -691,8 +703,14 @@ select make_date(2013, 11, -1) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for DayOfMonth (valid values 1 - 28/31): -1. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for DayOfMonth (valid values 1 - 28/31): -1" + } +} -- !query diff --git a/sql/core/src/test/resources/sql-tests/results/regexp-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/regexp-functions.sql.out index 9ef1802738a..adeea49a3e3 100644 --- a/sql/core/src/test/resources/sql-tests/results/regexp-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/regexp-functions.sql.out @@ -4,8 +4,14 @@ SELECT regexp_extract('1a 2b 14m', '\\d+') -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 1 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "1" + } +} -- !query @@ -21,8 +27,14 @@ SELECT regexp_extract('1a 2b 14m', '\\d+', 1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 1 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "1" + } +} -- !query @@ -30,8 +42,14 @@ SELECT regexp_extract('1a 2b 14m', '\\d+', 2) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 2 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "2" + } +} -- !query @@ -39,8 +57,10 @@ SELECT regexp_extract('1a 2b 14m', '\\d+', -1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -The specified group index cannot be less than zero +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2006" +} -- !query @@ -96,8 +116,14 @@ SELECT regexp_extract('1a 2b 14m', '(\\d+)([a-z]+)', 3) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 2, but the specified group index is 3 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "2", + "groupIndex" : "3" + } +} -- !query @@ -105,8 +131,10 @@ SELECT regexp_extract('1a 2b 14m', '(\\d+)([a-z]+)', -1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -The specified group index cannot be less than zero +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2006" +} -- !query @@ -147,8 +175,14 @@ SELECT regexp_extract_all('1a 2b 14m', '\\d+') -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 1 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "1" + } +} -- !query @@ -164,8 +198,14 @@ SELECT regexp_extract_all('1a 2b 14m', '\\d+', 1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 1 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "1" + } +} -- !query @@ -173,8 +213,14 @@ SELECT regexp_extract_all('1a 2b 14m', '\\d+', 2) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 0, but the specified group index is 2 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "0", + "groupIndex" : "2" + } +} -- !query @@ -182,8 +228,10 @@ SELECT regexp_extract_all('1a 2b 14m', '\\d+', -1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -The specified group index cannot be less than zero +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2006" +} -- !query @@ -239,8 +287,14 @@ SELECT regexp_extract_all('1a 2b 14m', '(\\d+)([a-z]+)', 3) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -Regex group count is 2, but the specified group index is 3 +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2007", + "messageParameters" : { + "groupCount" : "2", + "groupIndex" : "3" + } +} -- !query @@ -248,8 +302,10 @@ SELECT regexp_extract_all('1a 2b 14m', '(\\d+)([a-z]+)', -1) -- !query schema struct<> -- !query output -java.lang.IllegalArgumentException -The specified group index cannot be less than zero +org.apache.spark.SparkIllegalArgumentException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2006" +} -- !query diff --git a/sql/core/src/test/resources/sql-tests/results/timestampNTZ/timestamp-ansi.sql.out b/sql/core/src/test/resources/sql-tests/results/timestampNTZ/timestamp-ansi.sql.out index ea3332f1e56..51936c99ef4 100644 --- a/sql/core/src/test/resources/sql-tests/results/timestampNTZ/timestamp-ansi.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/timestampNTZ/timestamp-ansi.sql.out @@ -149,8 +149,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 61) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 61. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 61" + } +} -- !query @@ -174,8 +180,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 99.999999) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 99. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 99" + } +} -- !query @@ -183,8 +195,14 @@ SELECT make_timestamp(1, 1, 1, 1, 1, 999.999999) -- !query schema struct<> -- !query output -java.time.DateTimeException -Invalid value for SecondOfMinute (valid values 0 - 59): 999. If necessary set spark.sql.ansi.enabled to false to bypass this error. +org.apache.spark.SparkDateTimeException +{ + "errorClass" : "_LEGACY_ERROR_TEMP_2000", + "messageParameters" : { + "ansiConfig" : "\"spark.sql.ansi.enabled\"", + "message" : "Invalid value for SecondOfMinute (valid values 0 - 59): 999" + } +} -- !query --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org