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 fbf81ebaef49 [SPARK-47263][SQL] Assign names to the legacy conditions
_LEGACY_ERROR_TEMP_13[44-46]
fbf81ebaef49 is described below
commit fbf81ebaef49baa4c19a936fb3884c2e62e6a49b
Author: xuping <[email protected]>
AuthorDate: Wed Sep 18 22:06:00 2024 +0200
[SPARK-47263][SQL] Assign names to the legacy conditions
_LEGACY_ERROR_TEMP_13[44-46]
### What changes were proposed in this pull request?
rename err class _LEGACY_ERROR_TEMP_13[44-46]: 44 removed, 45 to
DEFAULT_UNSUPPORTED, 46 to ADD_DEFAULT_UNSUPPORTED
### Why are the changes needed?
replace legacy err class name with semantically explicits.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Re run the UT class modified in the PR
(org.apache.spark.sql.sources.InsertSuite &
org.apache.spark.sql.types.StructTypeSuite)
### Was this patch authored or co-authored using generative AI tooling?
No
Closes #46320 from PaysonXu/SPARK-47263.
Authored-by: xuping <[email protected]>
Signed-off-by: Max Gekk <[email protected]>
---
.../src/main/resources/error/error-conditions.json | 27 ++++++++++------------
.../catalyst/util/ResolveDefaultColumnsUtil.scala | 9 +++++---
.../spark/sql/errors/QueryCompilationErrors.scala | 16 ++++---------
.../apache/spark/sql/types/StructTypeSuite.scala | 23 ++++++++++++------
.../org/apache/spark/sql/sources/InsertSuite.scala | 6 ++---
5 files changed, 41 insertions(+), 40 deletions(-)
diff --git a/common/utils/src/main/resources/error/error-conditions.json
b/common/utils/src/main/resources/error/error-conditions.json
index 25dd676c4aff..6463cc2c12da 100644
--- a/common/utils/src/main/resources/error/error-conditions.json
+++ b/common/utils/src/main/resources/error/error-conditions.json
@@ -1,4 +1,10 @@
{
+ "ADD_DEFAULT_UNSUPPORTED" : {
+ "message" : [
+ "Failed to execute <statementType> command because DEFAULT values are
not supported when adding new columns to previously existing target data source
with table provider: \"<dataSource>\"."
+ ],
+ "sqlState" : "42623"
+ },
"AGGREGATE_FUNCTION_WITH_NONDETERMINISTIC_EXPRESSION" : {
"message" : [
"Non-deterministic expression <sqlExpr> should not appear in the
arguments of an aggregate function."
@@ -1096,6 +1102,12 @@
],
"sqlState" : "42608"
},
+ "DEFAULT_UNSUPPORTED" : {
+ "message" : [
+ "Failed to execute <statementType> command because DEFAULT values are
not supported for target data source with table provider: \"<dataSource>\"."
+ ],
+ "sqlState" : "42623"
+ },
"DISTINCT_WINDOW_FUNCTION_UNSUPPORTED" : {
"message" : [
"Distinct window functions are not supported: <windowExpr>."
@@ -6673,21 +6685,6 @@
"Sinks cannot request distribution and ordering in continuous execution
mode."
]
},
- "_LEGACY_ERROR_TEMP_1344" : {
- "message" : [
- "Invalid DEFAULT value for column <fieldName>: <defaultValue> fails to
parse as a valid literal value."
- ]
- },
- "_LEGACY_ERROR_TEMP_1345" : {
- "message" : [
- "Failed to execute <statementType> command because DEFAULT values are
not supported for target data source with table provider: \"<dataSource>\"."
- ]
- },
- "_LEGACY_ERROR_TEMP_1346" : {
- "message" : [
- "Failed to execute <statementType> command because DEFAULT values are
not supported when adding new columns to previously existing target data source
with table provider: \"<dataSource>\"."
- ]
- },
"_LEGACY_ERROR_TEMP_2000" : {
"message" : [
"<message>. If necessary set <ansiConfig> to false to bypass this error."
diff --git
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ResolveDefaultColumnsUtil.scala
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ResolveDefaultColumnsUtil.scala
index 8b7392e71249..693ac8d94dbc 100644
---
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ResolveDefaultColumnsUtil.scala
+++
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ResolveDefaultColumnsUtil.scala
@@ -19,7 +19,7 @@ package org.apache.spark.sql.catalyst.util
import scala.collection.mutable.ArrayBuffer
-import org.apache.spark.{SparkThrowable, SparkUnsupportedOperationException}
+import org.apache.spark.{SparkException, SparkThrowable,
SparkUnsupportedOperationException}
import org.apache.spark.internal.{Logging, MDC}
import org.apache.spark.internal.LogKeys._
import org.apache.spark.sql.AnalysisException
@@ -412,8 +412,11 @@ object ResolveDefaultColumns extends QueryErrorsBase
case _: ExprLiteral | _: Cast => expr
}
} catch {
- case _: AnalysisException | _: MatchError =>
- throw
QueryCompilationErrors.failedToParseExistenceDefaultAsLiteral(field.name, text)
+ // AnalysisException thrown from analyze is already formatted, throw
it directly.
+ case ae: AnalysisException => throw ae
+ case _: MatchError =>
+ throw SparkException.internalError(s"parse existence default as
literal err," +
+ s" field name: ${field.name}, value: $text")
}
// The expression should be a literal value by this point, possibly
wrapped in a cast
// function. This is enforced by the execution of commands that assign
default values.
diff --git
a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala
b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala
index f268ef85ef1d..e324d4e9d2ed 100644
---
a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala
+++
b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala
@@ -3516,29 +3516,21 @@ private[sql] object QueryCompilationErrors extends
QueryErrorsBase with Compilat
"cond" -> toSQLExpr(cond)))
}
- def failedToParseExistenceDefaultAsLiteral(fieldName: String, defaultValue:
String): Throwable = {
- new AnalysisException(
- errorClass = "_LEGACY_ERROR_TEMP_1344",
- messageParameters = Map(
- "fieldName" -> fieldName,
- "defaultValue" -> defaultValue))
- }
-
def defaultReferencesNotAllowedInDataSource(
statementType: String, dataSource: String): Throwable = {
new AnalysisException(
- errorClass = "_LEGACY_ERROR_TEMP_1345",
+ errorClass = "DEFAULT_UNSUPPORTED",
messageParameters = Map(
- "statementType" -> statementType,
+ "statementType" -> toSQLStmt(statementType),
"dataSource" -> dataSource))
}
def addNewDefaultColumnToExistingTableNotAllowed(
statementType: String, dataSource: String): Throwable = {
new AnalysisException(
- errorClass = "_LEGACY_ERROR_TEMP_1346",
+ errorClass = "ADD_DEFAULT_UNSUPPORTED",
messageParameters = Map(
- "statementType" -> statementType,
+ "statementType" -> toSQLStmt(statementType),
"dataSource" -> dataSource))
}
diff --git
a/sql/catalyst/src/test/scala/org/apache/spark/sql/types/StructTypeSuite.scala
b/sql/catalyst/src/test/scala/org/apache/spark/sql/types/StructTypeSuite.scala
index 5ec1525bf9b6..6a67525dd02d 100644
---
a/sql/catalyst/src/test/scala/org/apache/spark/sql/types/StructTypeSuite.scala
+++
b/sql/catalyst/src/test/scala/org/apache/spark/sql/types/StructTypeSuite.scala
@@ -564,7 +564,6 @@ class StructTypeSuite extends SparkFunSuite with SQLHelper {
.putString(ResolveDefaultColumns.EXISTS_DEFAULT_COLUMN_METADATA_KEY,
"1 + 1")
.putString(ResolveDefaultColumns.CURRENT_DEFAULT_COLUMN_METADATA_KEY, "1 + 1")
.build())))
- val error = "fails to parse as a valid literal value"
assert(ResolveDefaultColumns.existenceDefaultValues(source2).length == 1)
assert(ResolveDefaultColumns.existenceDefaultValues(source2)(0) == 2)
@@ -576,9 +575,13 @@ class StructTypeSuite extends SparkFunSuite with SQLHelper
{
.putString(ResolveDefaultColumns.EXISTS_DEFAULT_COLUMN_METADATA_KEY,
"invalid")
.putString(ResolveDefaultColumns.CURRENT_DEFAULT_COLUMN_METADATA_KEY, "invalid")
.build())))
- assert(intercept[AnalysisException] {
- ResolveDefaultColumns.existenceDefaultValues(source3)
- }.getMessage.contains(error))
+
+ checkError(
+ exception = intercept[AnalysisException]{
+ ResolveDefaultColumns.existenceDefaultValues(source3)
+ },
+ condition = "INVALID_DEFAULT_VALUE.UNRESOLVED_EXPRESSION",
+ parameters = Map("statement" -> "", "colName" -> "`c1`", "defaultValue"
-> "invalid"))
// Negative test: StructType.defaultValues fails because the existence
default value fails to
// resolve.
@@ -592,9 +595,15 @@ class StructTypeSuite extends SparkFunSuite with SQLHelper
{
ResolveDefaultColumns.CURRENT_DEFAULT_COLUMN_METADATA_KEY,
"(SELECT 'abc' FROM missingtable)")
.build())))
- assert(intercept[AnalysisException] {
- ResolveDefaultColumns.existenceDefaultValues(source4)
- }.getMessage.contains(error))
+
+ checkError(
+ exception = intercept[AnalysisException]{
+ ResolveDefaultColumns.existenceDefaultValues(source4)
+ },
+ condition = "INVALID_DEFAULT_VALUE.SUBQUERY_EXPRESSION",
+ parameters = Map("statement" -> "",
+ "colName" -> "`c1`",
+ "defaultValue" -> "(SELECT 'abc' FROM missingtable)"))
}
test("SPARK-46629: Test STRUCT DDL with NOT NULL round trip") {
diff --git
a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala
b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala
index 57655a58a694..41447d8af574 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala
@@ -1998,7 +1998,7 @@ class InsertSuite extends DataSourceTest with
SharedSparkSession {
exception = intercept[AnalysisException] {
sql(s"create table t(a string default 'abc') using parquet")
},
- condition = "_LEGACY_ERROR_TEMP_1345",
+ condition = "DEFAULT_UNSUPPORTED",
parameters = Map("statementType" -> "CREATE TABLE", "dataSource" ->
"parquet"))
withTable("t") {
sql(s"create table t(a string, b int) using parquet")
@@ -2006,7 +2006,7 @@ class InsertSuite extends DataSourceTest with
SharedSparkSession {
exception = intercept[AnalysisException] {
sql("alter table t add column s bigint default 42")
},
- condition = "_LEGACY_ERROR_TEMP_1345",
+ condition = "DEFAULT_UNSUPPORTED",
parameters = Map(
"statementType" -> "ALTER TABLE ADD COLUMNS",
"dataSource" -> "parquet"))
@@ -2314,7 +2314,7 @@ class InsertSuite extends DataSourceTest with
SharedSparkSession {
// provider is now in the denylist.
sql(s"alter table t1 add column (b string default 'abc')")
},
- condition = "_LEGACY_ERROR_TEMP_1346",
+ condition = "ADD_DEFAULT_UNSUPPORTED",
parameters = Map(
"statementType" -> "ALTER TABLE ADD COLUMNS",
"dataSource" -> provider))
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]