You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ma...@apache.org on 2023/06/30 18:25:17 UTC

[spark] branch master updated: [SPARK-41487][SQL] Assign name to _LEGACY_ERROR_TEMP_1020

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 706829d9731 [SPARK-41487][SQL] Assign name to _LEGACY_ERROR_TEMP_1020
706829d9731 is described below

commit 706829d97312c6812bf791d9893d0a70d81676ae
Author: itholic <ha...@databricks.com>
AuthorDate: Fri Jun 30 21:25:04 2023 +0300

    [SPARK-41487][SQL] Assign name to _LEGACY_ERROR_TEMP_1020
    
    ### What changes were proposed in this pull request?
    
    This PR proposes to assign name to _LEGACY_ERROR_TEMP_1020, "INVALID_USAGE_OF_STAR_OR_REGEX".
    
    ### Why are the changes needed?
    
    We should assign proper name to _LEGACY_ERROR_TEMP_*
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    `./build/sbt "sql/testOnly org.apache.spark.sql.SQLQueryTestSuite*`
    
    Closes #39702 from itholic/LEGACY_1020.
    
    Authored-by: itholic <ha...@databricks.com>
    Signed-off-by: Max Gekk <ma...@gmail.com>
---
 .../src/main/resources/error/error-classes.json    | 11 +--
 .../spark/sql/catalyst/analysis/Analyzer.scala     |  2 +-
 .../spark/sql/errors/QueryCompilationErrors.scala  |  2 +-
 .../sql/catalyst/analysis/AnalysisErrorSuite.scala | 86 ++++++++++++++++------
 .../catalyst/analysis/ResolveSubquerySuite.scala   |  6 +-
 .../org/apache/spark/sql/DataFrameSuite.scala      | 11 ++-
 .../scala/org/apache/spark/sql/DatasetSuite.scala  |  4 +-
 7 files changed, 82 insertions(+), 40 deletions(-)

diff --git a/common/utils/src/main/resources/error/error-classes.json b/common/utils/src/main/resources/error/error-classes.json
index abe88db1267..3cc35d668e0 100644
--- a/common/utils/src/main/resources/error/error-classes.json
+++ b/common/utils/src/main/resources/error/error-classes.json
@@ -1596,6 +1596,12 @@
       "The url is invalid: <url>. If necessary set <ansiConfig> to \"false\" to bypass this error."
     ]
   },
+  "INVALID_USAGE_OF_STAR_OR_REGEX" : {
+    "message" : [
+      "Invalid usage of <elem> in <prettyName>."
+    ],
+    "sqlState" : "42000"
+  },
   "INVALID_VIEW_TEXT" : {
     "message" : [
       "The view <viewName> cannot be displayed due to invalid view text: <viewText>. This may be caused by an unauthorized modification of the view or an incorrect query syntax. Please check your query syntax and verify that the view has not been tampered with."
@@ -3169,11 +3175,6 @@
       "<quoted> is a permanent view, which is not supported by streaming reading API such as `DataStreamReader.table` yet."
     ]
   },
-  "_LEGACY_ERROR_TEMP_1020" : {
-    "message" : [
-      "Invalid usage of <elem> in <prettyName>."
-    ]
-  },
   "_LEGACY_ERROR_TEMP_1021" : {
     "message" : [
       "count(<targetString>.*) is not allowed. Please use count(*) or expand the columns manually, e.g. count(col1, col2)."
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 32cec909401..b61dbae686b 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
@@ -1897,7 +1897,7 @@ class Analyzer(override val catalogManager: CatalogManager) extends RuleExecutor
           })
         // count(*) has been replaced by count(1)
         case o if containsStar(o.children) =>
-          throw QueryCompilationErrors.invalidStarUsageError(s"expression '${o.prettyName}'",
+          throw QueryCompilationErrors.invalidStarUsageError(s"expression `${o.prettyName}`",
             extractStar(o.children))
       }
     }
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 94cbf880b57..e02708105d2 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
@@ -475,7 +475,7 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase {
     }
     val elem = Seq(starMsg, resExprMsg).flatten.mkString(" and ")
     new AnalysisException(
-      errorClass = "_LEGACY_ERROR_TEMP_1020",
+      errorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
       messageParameters = Map("elem" -> elem, "prettyName" -> prettyName))
   }
 
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
index f994c999903..fdaeadc5445 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/AnalysisErrorSuite.scala
@@ -332,10 +332,12 @@ class AnalysisErrorSuite extends AnalysisTest {
     "UNRESOLVED_COLUMN.WITH_SUGGESTION",
     Map("objectName" -> "`havingCondition`", "proposal" -> "`max(b)`"))
 
-  errorTest(
+  errorClassTest(
     "unresolved star expansion in max",
     testRelation2.groupBy($"a")(sum(UnresolvedStar(None))),
-    "Invalid usage of '*' in expression 'sum'." :: Nil)
+    errorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+    messageParameters = Map("elem" -> "'*'", "prettyName" -> "expression `sum`")
+  )
 
   errorClassTest(
     "sorting by unsupported column types",
@@ -1200,38 +1202,74 @@ class AnalysisErrorSuite extends AnalysisTest {
     val t2 = LocalRelation(b, c).as("t2")
 
     // SELECT * FROM t1 WHERE a = (SELECT sum(c) FROM t2 WHERE t1.* = t2.b)
-    assertAnalysisError(
+    assertAnalysisErrorClass(
       Filter(EqualTo(a, ScalarSubquery(t2.select(sum(c)).where(star("t1") === b))), t1),
-      "Invalid usage of '*' in Filter" :: Nil
+      expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+      expectedMessageParameters = Map("elem" -> "'*'", "prettyName" -> "Filter")
     )
 
     // SELECT * FROM t1 JOIN t2 ON (EXISTS (SELECT 1 FROM t2 WHERE t1.* = b))
-    assertAnalysisError(
+    assertAnalysisErrorClass(
       t1.join(t2, condition = Some(Exists(t2.select(1).where(star("t1") === b)))),
-      "Invalid usage of '*' in Filter" :: Nil
+      expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+      expectedMessageParameters = Map("elem" -> "'*'", "prettyName" -> "Filter")
     )
   }
 
   test("SPARK-36488: Regular expression expansion should fail with a meaningful message") {
     withSQLConf(SQLConf.SUPPORT_QUOTED_REGEX_COLUMN_NAME.key -> "true") {
-      assertAnalysisError(testRelation.select(Divide(UnresolvedRegex(".?", None, false), "a")),
-        s"Invalid usage of regular expression '.?' in" :: Nil)
-      assertAnalysisError(testRelation.select(
-        Divide(UnresolvedRegex(".?", None, false), UnresolvedRegex(".*", None, false))),
-        s"Invalid usage of regular expressions '.?', '.*' in" :: Nil)
-      assertAnalysisError(testRelation.select(
-        Divide(UnresolvedRegex(".?", None, false), UnresolvedRegex(".?", None, false))),
-        s"Invalid usage of regular expression '.?' in" :: Nil)
-      assertAnalysisError(testRelation.select(Divide(UnresolvedStar(None), "a")),
-        "Invalid usage of '*' in" :: Nil)
-      assertAnalysisError(testRelation.select(Divide(UnresolvedStar(None), UnresolvedStar(None))),
-        "Invalid usage of '*' in" :: Nil)
-      assertAnalysisError(testRelation.select(Divide(UnresolvedStar(None),
-        UnresolvedRegex(".?", None, false))),
-        "Invalid usage of '*' and regular expression '.?' in" :: Nil)
-      assertAnalysisError(testRelation.select(Least(Seq(UnresolvedStar(None),
-        UnresolvedRegex(".*", None, false), UnresolvedRegex(".?", None, false)))),
-        "Invalid usage of '*' and regular expressions '.*', '.?' in" :: Nil)
+      assertAnalysisErrorClass(
+        testRelation.select(Divide(UnresolvedRegex(".?", None, false), "a")),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "regular expression '.?'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(
+          Divide(UnresolvedRegex(".?", None, false), UnresolvedRegex(".*", None, false))),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "regular expressions '.?', '.*'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(
+          Divide(UnresolvedRegex(".?", None, false), UnresolvedRegex(".?", None, false))),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "regular expression '.?'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(Divide(UnresolvedStar(None), "a")),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "'*'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(Divide(UnresolvedStar(None), UnresolvedStar(None))),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "'*'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(Divide(UnresolvedStar(None), UnresolvedRegex(".?", None, false))),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "'*' and regular expression '.?'",
+          "prettyName" -> "expression `divide`")
+      )
+      assertAnalysisErrorClass(
+        testRelation.select(Least(Seq(UnresolvedStar(None),
+          UnresolvedRegex(".*", None, false), UnresolvedRegex(".?", None, false)))),
+        expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+        expectedMessageParameters = Map(
+          "elem" -> "'*' and regular expressions '.*', '.?'",
+          "prettyName" -> "expression `least`")
+      )
     }
   }
 }
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveSubquerySuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveSubquerySuite.scala
index 679d6c26d2d..120c6702475 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveSubquerySuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ResolveSubquerySuite.scala
@@ -245,10 +245,10 @@ class ResolveSubquerySuite extends AnalysisTest {
       LateralJoin(t1,
         LateralSubquery(t0.select(newArray.as(newArray.sql)), Seq(a, b)), Inner, None)
     )
-    assertAnalysisError(
+    assertAnalysisErrorClass(
       lateralJoin(t1.as("t1"), t0.select(Count(star("t1")))),
-      Seq("Invalid usage of '*' in expression 'count'")
-    )
+      expectedErrorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+      expectedMessageParameters = Map("elem" -> "'*'", "prettyName" -> "expression `count`"))
   }
 
   test("SPARK-35618: lateral join with struct type star expansion") {
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
index 6a90b3409d3..36aeca3bc20 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameSuite.scala
@@ -343,10 +343,13 @@ class DataFrameSuite extends QueryTest
 
   test("Star Expansion - explode should fail with a meaningful message if it takes a star") {
     val df = Seq(("1,2"), ("4"), ("7,8,9")).toDF("csv")
-    val e = intercept[AnalysisException] {
-      df.select(explode($"*"))
-    }
-    assert(e.getMessage.contains("Invalid usage of '*' in expression 'explode'"))
+    checkError(
+      exception = intercept[AnalysisException] {
+        df.select(explode($"*"))
+      },
+      errorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
+      parameters = Map("elem" -> "'*'", "prettyName" -> "expression `explode`")
+    )
   }
 
   test("explode on output of array-valued function") {
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala
index 0766dd2e772..c09c6d18b66 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala
@@ -602,7 +602,7 @@ class DatasetSuite extends QueryTest
           (g, iter) => Iterator(g, iter.mkString(", "))
         }
       },
-      errorClass = "_LEGACY_ERROR_TEMP_1020",
+      errorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
       parameters = Map("elem" -> "'*'", "prettyName" -> "MapGroups"))
   }
 
@@ -630,7 +630,7 @@ class DatasetSuite extends QueryTest
           (g, iter) => Iterator(g, iter.mkString(", "))
         }
       },
-      errorClass = "_LEGACY_ERROR_TEMP_1020",
+      errorClass = "INVALID_USAGE_OF_STAR_OR_REGEX",
       parameters = Map("elem" -> "'*'", "prettyName" -> "MapGroups"))
   }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org