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 f373df8a757 [SPARK-42158][SQL] Integrate `_LEGACY_ERROR_TEMP_1003`
into `FIELD_NOT_FOUND`
f373df8a757 is described below
commit f373df8a757e36ea84275c637087045d6cca3939
Author: itholic <[email protected]>
AuthorDate: Fri Jan 27 10:40:47 2023 +0300
[SPARK-42158][SQL] Integrate `_LEGACY_ERROR_TEMP_1003` into
`FIELD_NOT_FOUND`
### What changes were proposed in this pull request?
This PR proposes to integrate `_LEGACY_ERROR_TEMP_1003` into
`FIELD_NOT_FOUND`
### Why are the changes needed?
We should deduplicate the similar error classes into single error class by
merging them.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Fixed exiting UTs.
Closes #39706 from itholic/LEGACY_1003.
Authored-by: itholic <[email protected]>
Signed-off-by: Max Gekk <[email protected]>
---
core/src/main/resources/error/error-classes.json | 5 --
.../spark/sql/catalyst/analysis/Analyzer.scala | 3 +-
.../spark/sql/errors/QueryCompilationErrors.scala | 8 ++-
.../spark/sql/connector/AlterTableTests.scala | 18 +++++-
.../connector/V2CommandsCaseSensitivitySuite.scala | 64 +++++++++++++++-------
5 files changed, 65 insertions(+), 33 deletions(-)
diff --git a/core/src/main/resources/error/error-classes.json
b/core/src/main/resources/error/error-classes.json
index 5d2e184874a..e6876751a22 100644
--- a/core/src/main/resources/error/error-classes.json
+++ b/core/src/main/resources/error/error-classes.json
@@ -2031,11 +2031,6 @@
"Try moving this class out of its parent class."
]
},
- "_LEGACY_ERROR_TEMP_1003" : {
- "message" : [
- "Couldn't find the reference column for <after> at <parentName>."
- ]
- },
"_LEGACY_ERROR_TEMP_1004" : {
"message" : [
"Window specification <windowName> is not defined in the WINDOW clause."
diff --git
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
index f0c22471afa..6f27c97ddf9 100644
---
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
+++
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
@@ -4053,9 +4053,8 @@ class Analyzer(override val catalogManager:
CatalogManager)
case Some(colName) =>
ResolvedFieldPosition(ColumnPosition.after(colName))
case None =>
- val name = if (resolvedParentName.isEmpty) "root" else
resolvedParentName.quoted
throw
QueryCompilationErrors.referenceColNotFoundForAlterTableChangesError(
- after, name)
+ col.colName, allFields)
}
case _ => ResolvedFieldPosition(u.position)
}
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 c415fb91c5d..1a8c42b599e 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
@@ -295,10 +295,12 @@ private[sql] object QueryCompilationErrors extends
QueryErrorsBase {
}
def referenceColNotFoundForAlterTableChangesError(
- after: TableChange.After, parentName: String): Throwable = {
+ fieldName: String, fields: Array[String]): Throwable = {
new AnalysisException(
- errorClass = "_LEGACY_ERROR_TEMP_1003",
- messageParameters = Map("after" -> after.toString, "parentName" ->
parentName))
+ errorClass = "FIELD_NOT_FOUND",
+ messageParameters = Map(
+ "fieldName" -> toSQLId(fieldName),
+ "fields" -> fields.mkString(", ")))
}
def windowSpecificationNotDefinedError(windowName: String): Throwable = {
diff --git
a/sql/core/src/test/scala/org/apache/spark/sql/connector/AlterTableTests.scala
b/sql/core/src/test/scala/org/apache/spark/sql/connector/AlterTableTests.scala
index b69a0628f3e..2047212a4ea 100644
---
a/sql/core/src/test/scala/org/apache/spark/sql/connector/AlterTableTests.scala
+++
b/sql/core/src/test/scala/org/apache/spark/sql/connector/AlterTableTests.scala
@@ -160,7 +160,11 @@ trait AlterTableTests extends SharedSparkSession with
QueryErrorsBase {
val e1 = intercept[AnalysisException](
sql(s"ALTER TABLE $t ADD COLUMN c string AFTER non_exist"))
- assert(e1.getMessage().contains("Couldn't find the reference column"))
+ checkError(
+ exception = e1,
+ errorClass = "FIELD_NOT_FOUND",
+ parameters = Map("fieldName" -> "`c`", "fields" -> "a, point, b")
+ )
sql(s"ALTER TABLE $t ADD COLUMN point.y int FIRST")
assert(getTableMetadata(tableName).schema == new StructType()
@@ -181,7 +185,11 @@ trait AlterTableTests extends SharedSparkSession with
QueryErrorsBase {
val e2 = intercept[AnalysisException](
sql(s"ALTER TABLE $t ADD COLUMN point.x2 int AFTER non_exist"))
- assert(e2.getMessage().contains("Couldn't find the reference column"))
+ checkError(
+ exception = e2,
+ errorClass = "FIELD_NOT_FOUND",
+ parameters = Map("fieldName" -> "`x2`", "fields" -> "y, x, z")
+ )
}
}
@@ -218,7 +226,11 @@ trait AlterTableTests extends SharedSparkSession with
QueryErrorsBase {
// The new column being referenced should come before being referenced.
val e = intercept[AnalysisException](
sql(s"ALTER TABLE $t ADD COLUMNS (yy int AFTER xx, xx int)"))
- assert(e.getMessage().contains("Couldn't find the reference column for
AFTER xx at root"))
+ checkError(
+ exception = e,
+ errorClass = "FIELD_NOT_FOUND",
+ parameters = Map("fieldName" -> "`yy`", "fields" -> "a, x, y, z, b,
point")
+ )
}
}
diff --git
a/sql/core/src/test/scala/org/apache/spark/sql/connector/V2CommandsCaseSensitivitySuite.scala
b/sql/core/src/test/scala/org/apache/spark/sql/connector/V2CommandsCaseSensitivitySuite.scala
index ffe8bbb2833..44cd4f0f9b3 100644
---
a/sql/core/src/test/scala/org/apache/spark/sql/connector/V2CommandsCaseSensitivitySuite.scala
+++
b/sql/core/src/test/scala/org/apache/spark/sql/connector/V2CommandsCaseSensitivitySuite.scala
@@ -160,8 +160,7 @@ class V2CommandsCaseSensitivitySuite
test("AlterTable: add column resolution - positional") {
Seq("ID", "iD").foreach { ref =>
- alterTableTest(
- AddColumns(
+ val alter = AddColumns(
table,
Seq(QualifiedColType(
None,
@@ -170,15 +169,21 @@ class V2CommandsCaseSensitivitySuite
true,
None,
Some(UnresolvedFieldPosition(ColumnPosition.after(ref))),
- None))),
- Seq("reference column", ref)
- )
+ None)))
+ Seq(true, false).foreach { caseSensitive =>
+ withSQLConf(SQLConf.CASE_SENSITIVE.key -> caseSensitive.toString) {
+ assertAnalysisErrorClass(
+ inputPlan = alter,
+ expectedErrorClass = "FIELD_NOT_FOUND",
+ expectedMessageParameters = Map("fieldName" -> "`f`", "fields" ->
"id, data, point")
+ )
+ }
+ }
}
}
test("AlterTable: add column resolution - column position referencing new
column") {
- alterTableTest(
- AddColumns(
+ val alter = AddColumns(
table,
Seq(QualifiedColType(
None,
@@ -195,15 +200,21 @@ class V2CommandsCaseSensitivitySuite
true,
None,
Some(UnresolvedFieldPosition(ColumnPosition.after("X"))),
- None))),
- Seq("Couldn't find the reference column for AFTER X at root")
- )
+ None)))
+ Seq(true, false).foreach { caseSensitive =>
+ withSQLConf(SQLConf.CASE_SENSITIVE.key -> caseSensitive.toString) {
+ assertAnalysisErrorClass(
+ inputPlan = alter,
+ expectedErrorClass = "FIELD_NOT_FOUND",
+ expectedMessageParameters = Map("fieldName" -> "`y`", "fields" ->
"id, data, point, x")
+ )
+ }
+ }
}
test("AlterTable: add column resolution - nested positional") {
Seq("X", "Y").foreach { ref =>
- alterTableTest(
- AddColumns(
+ val alter = AddColumns(
table,
Seq(QualifiedColType(
Some(UnresolvedFieldName(Seq("point"))),
@@ -212,15 +223,21 @@ class V2CommandsCaseSensitivitySuite
true,
None,
Some(UnresolvedFieldPosition(ColumnPosition.after(ref))),
- None))),
- Seq("reference column", ref)
- )
+ None)))
+ Seq(true, false).foreach { caseSensitive =>
+ withSQLConf(SQLConf.CASE_SENSITIVE.key -> caseSensitive.toString) {
+ assertAnalysisErrorClass(
+ inputPlan = alter,
+ expectedErrorClass = "FIELD_NOT_FOUND",
+ expectedMessageParameters = Map("fieldName" -> "`z`", "fields" ->
"x, y")
+ )
+ }
+ }
}
}
test("AlterTable: add column resolution - column position referencing new
nested column") {
- alterTableTest(
- AddColumns(
+ val alter = AddColumns(
table,
Seq(QualifiedColType(
Some(UnresolvedFieldName(Seq("point"))),
@@ -237,9 +254,16 @@ class V2CommandsCaseSensitivitySuite
true,
None,
Some(UnresolvedFieldPosition(ColumnPosition.after("Z"))),
- None))),
- Seq("Couldn't find the reference column for AFTER Z at point")
- )
+ None)))
+ Seq(true, false).foreach { caseSensitive =>
+ withSQLConf(SQLConf.CASE_SENSITIVE.key -> caseSensitive.toString) {
+ assertAnalysisErrorClass(
+ inputPlan = alter,
+ expectedErrorClass = "FIELD_NOT_FOUND",
+ expectedMessageParameters = Map("fieldName" -> "`zz`", "fields" ->
"x, y, z")
+ )
+ }
+ }
}
test("SPARK-36372: Adding duplicate columns should not be allowed") {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]