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 df7e2d07f04 [SPARK-43345][SPARK-43346][SQL] Rename the error classes _LEGACY_ERROR_TEMP_[0041|1206] df7e2d07f04 is described below commit df7e2d07f04c7e16af04c1292227a90516083de1 Author: Terry Kim <terry....@databricks.com> AuthorDate: Fri May 19 10:49:29 2023 +0300 [SPARK-43345][SPARK-43346][SQL] Rename the error classes _LEGACY_ERROR_TEMP_[0041|1206] ### What changes were proposed in this pull request? This PR proposes to assign the proper names to the following `_LEGACY_ERROR_TEMP*` error classes: * `_LEGACY_ERROR_TEMP_0041` -> `DUPLICATE_CLAUSES` * `_LEGACY_ERROR_TEMP_1206` -> `COLUMN_NOT_DEFINED_IN_TABLE` ### Why are the changes needed? Proper name improves user experience w/ Spark SQL. ### Does this PR introduce _any_ user-facing change? Yes, the PR changes an user-facing error message. ### How was this patch tested? By running modified test suties. Closes #41020 from imback82/error_messages. Authored-by: Terry Kim <terry....@databricks.com> Signed-off-by: Max Gekk <max.g...@gmail.com> --- core/src/main/resources/error/error-classes.json | 20 ++++++------ .../spark/sql/errors/QueryCompilationErrors.scala | 8 ++--- .../spark/sql/errors/QueryParsingErrors.scala | 2 +- .../spark/sql/catalyst/parser/DDLParserSuite.scala | 36 +++++++++++----------- .../command/CreateNamespaceParserSuite.scala | 8 ++--- .../sql/execution/command/DDLParserSuite.scala | 4 +-- .../spark/sql/execution/command/DDLSuite.scala | 16 +++++----- .../execution/command/PlanResolutionSuite.scala | 14 ++++----- .../spark/sql/hive/execution/HiveDDLSuite.scala | 2 +- 9 files changed, 55 insertions(+), 55 deletions(-) diff --git a/core/src/main/resources/error/error-classes.json b/core/src/main/resources/error/error-classes.json index e7203c0292b..dcfe8165735 100644 --- a/core/src/main/resources/error/error-classes.json +++ b/core/src/main/resources/error/error-classes.json @@ -186,6 +186,11 @@ ], "sqlState" : "42711" }, + "COLUMN_NOT_DEFINED_IN_TABLE" : { + "message" : [ + "<colType> column <colName> is not defined in table <tableName>, defined table columns are: <tableCols>." + ] + }, "COLUMN_NOT_FOUND" : { "message" : [ "The column <colName> cannot be found. Verify the spelling and correctness of the column name according to the SQL config <caseSensitiveConfig>." @@ -556,6 +561,11 @@ ], "sqlState" : "23505" }, + "DUPLICATE_CLAUSES" : { + "message" : [ + "Found duplicate clauses: <clauseName>. Please, remove one of them." + ] + }, "DUPLICATE_KEY" : { "message" : [ "Found duplicate keys <keyColumn>." @@ -2265,11 +2275,6 @@ "Unsupported SQL statement." ] }, - "_LEGACY_ERROR_TEMP_0041" : { - "message" : [ - "Found duplicate clauses: <clauseName>." - ] - }, "_LEGACY_ERROR_TEMP_0043" : { "message" : [ "Expected format is 'RESET' or 'RESET key'. If you want to include special characters in key, please use quotes, e.g., RESET `key`." @@ -3198,11 +3203,6 @@ "Expected only partition pruning predicates: <nonPartitionPruningPredicates>." ] }, - "_LEGACY_ERROR_TEMP_1206" : { - "message" : [ - "<colType> column <colName> is not defined in table <tableName>, defined table columns are: <tableCols>." - ] - }, "_LEGACY_ERROR_TEMP_1207" : { "message" : [ "The duration and time inputs to window must be an integer, long or string literal." 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 ad0a17ef4f4..bd987dab5bc 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 @@ -2132,12 +2132,12 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase { def columnNotDefinedInTableError( colType: String, colName: String, tableName: String, tableCols: Seq[String]): Throwable = { new AnalysisException( - errorClass = "_LEGACY_ERROR_TEMP_1206", + errorClass = "COLUMN_NOT_DEFINED_IN_TABLE", messageParameters = Map( "colType" -> colType, - "colName" -> colName, - "tableName" -> tableName, - "tableCols" -> tableCols.mkString(", "))) + "colName" -> toSQLId(colName), + "tableName" -> toSQLId(tableName), + "tableCols" -> tableCols.map(toSQLId).mkString(", "))) } def invalidLiteralForWindowDurationError(): Throwable = { diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala index 6240bbc07cf..0dbf7c22e84 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala @@ -460,7 +460,7 @@ private[sql] object QueryParsingErrors extends QueryErrorsBase { def duplicateClausesError(clauseName: String, ctx: ParserRuleContext): Throwable = { new ParseException( - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", messageParameters = Map("clauseName" -> clauseName), ctx) } diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/DDLParserSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/DDLParserSuite.scala index 0c6aa0dd25c..e0b0a83b34e 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/DDLParserSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/DDLParserSuite.scala @@ -678,7 +678,7 @@ class DDLParserSuite extends AnalysisTest { val sql1 = createTableHeader("TBLPROPERTIES('test' = 'test2')") checkError( exception = parseException(sql1), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "TBLPROPERTIES"), context = ExpectedContext( fragment = sql1, @@ -688,7 +688,7 @@ class DDLParserSuite extends AnalysisTest { val sql2 = createTableHeader("LOCATION '/tmp/file'") checkError( exception = parseException(sql2), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "LOCATION"), context = ExpectedContext( fragment = sql2, @@ -698,7 +698,7 @@ class DDLParserSuite extends AnalysisTest { val sql3 = createTableHeader("COMMENT 'a table'") checkError( exception = parseException(sql3), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "COMMENT"), context = ExpectedContext( fragment = sql3, @@ -708,7 +708,7 @@ class DDLParserSuite extends AnalysisTest { val sql4 = createTableHeader("CLUSTERED BY(b) INTO 256 BUCKETS") checkError( exception = parseException(sql4), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "CLUSTERED BY"), context = ExpectedContext( fragment = sql4, @@ -718,7 +718,7 @@ class DDLParserSuite extends AnalysisTest { val sql5 = createTableHeader("PARTITIONED BY (b)") checkError( exception = parseException(sql5), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "PARTITIONED BY"), context = ExpectedContext( fragment = sql5, @@ -728,7 +728,7 @@ class DDLParserSuite extends AnalysisTest { val sql6 = createTableHeader("PARTITIONED BY (c int)") checkError( exception = parseException(sql6), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "PARTITIONED BY"), context = ExpectedContext( fragment = sql6, @@ -738,7 +738,7 @@ class DDLParserSuite extends AnalysisTest { val sql7 = createTableHeader("STORED AS parquet") checkError( exception = parseException(sql7), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "STORED AS/BY"), context = ExpectedContext( fragment = sql7, @@ -748,7 +748,7 @@ class DDLParserSuite extends AnalysisTest { val sql8 = createTableHeader("STORED AS INPUTFORMAT 'in' OUTPUTFORMAT 'out'") checkError( exception = parseException(sql8), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "STORED AS/BY"), context = ExpectedContext( fragment = sql8, @@ -758,7 +758,7 @@ class DDLParserSuite extends AnalysisTest { val sql9 = createTableHeader("ROW FORMAT SERDE 'serde'") checkError( exception = parseException(sql9), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "ROW FORMAT"), context = ExpectedContext( fragment = sql9, @@ -768,7 +768,7 @@ class DDLParserSuite extends AnalysisTest { val sql10 = replaceTableHeader("TBLPROPERTIES('test' = 'test2')") checkError( exception = parseException(sql10), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "TBLPROPERTIES"), context = ExpectedContext( fragment = sql10, @@ -778,7 +778,7 @@ class DDLParserSuite extends AnalysisTest { val sql11 = replaceTableHeader("LOCATION '/tmp/file'") checkError( exception = parseException(sql11), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "LOCATION"), context = ExpectedContext( fragment = sql11, @@ -788,7 +788,7 @@ class DDLParserSuite extends AnalysisTest { val sql12 = replaceTableHeader("COMMENT 'a table'") checkError( exception = parseException(sql12), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "COMMENT"), context = ExpectedContext( fragment = sql12, @@ -798,7 +798,7 @@ class DDLParserSuite extends AnalysisTest { val sql13 = replaceTableHeader("CLUSTERED BY(b) INTO 256 BUCKETS") checkError( exception = parseException(sql13), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "CLUSTERED BY"), context = ExpectedContext( fragment = sql13, @@ -808,7 +808,7 @@ class DDLParserSuite extends AnalysisTest { val sql14 = replaceTableHeader("PARTITIONED BY (b)") checkError( exception = parseException(sql14), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "PARTITIONED BY"), context = ExpectedContext( fragment = sql14, @@ -818,7 +818,7 @@ class DDLParserSuite extends AnalysisTest { val sql15 = replaceTableHeader("PARTITIONED BY (c int)") checkError( exception = parseException(sql15), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "PARTITIONED BY"), context = ExpectedContext( fragment = sql15, @@ -828,7 +828,7 @@ class DDLParserSuite extends AnalysisTest { val sql16 = replaceTableHeader("STORED AS parquet") checkError( exception = parseException(sql16), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "STORED AS/BY"), context = ExpectedContext( fragment = sql16, @@ -838,7 +838,7 @@ class DDLParserSuite extends AnalysisTest { val sql17 = replaceTableHeader("STORED AS INPUTFORMAT 'in' OUTPUTFORMAT 'out'") checkError( exception = parseException(sql17), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "STORED AS/BY"), context = ExpectedContext( fragment = sql17, @@ -848,7 +848,7 @@ class DDLParserSuite extends AnalysisTest { val sql18 = replaceTableHeader("ROW FORMAT SERDE 'serde'") checkError( exception = parseException(sql18), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "ROW FORMAT"), context = ExpectedContext( fragment = sql18, diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/CreateNamespaceParserSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/CreateNamespaceParserSuite.scala index 918816d873d..46ccc0b1312 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/CreateNamespaceParserSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/CreateNamespaceParserSuite.scala @@ -70,7 +70,7 @@ class CreateNamespaceParserSuite extends AnalysisTest with SharedSparkSession { val sql1 = createNamespace("COMMENT 'namespace_comment'") checkError( exception = parseException(sql1), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "COMMENT"), context = ExpectedContext( fragment = sql1, @@ -80,7 +80,7 @@ class CreateNamespaceParserSuite extends AnalysisTest with SharedSparkSession { val sql2 = createNamespace("LOCATION '/home/user/db'") checkError( exception = parseException(sql2), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "LOCATION"), context = ExpectedContext( fragment = sql2, @@ -90,7 +90,7 @@ class CreateNamespaceParserSuite extends AnalysisTest with SharedSparkSession { val sql3 = createNamespace("WITH PROPERTIES ('a'='a', 'b'='b', 'c'='c')") checkError( exception = parseException(sql3), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "WITH PROPERTIES"), context = ExpectedContext( fragment = sql3, @@ -100,7 +100,7 @@ class CreateNamespaceParserSuite extends AnalysisTest with SharedSparkSession { val sql4 = createNamespace("WITH DBPROPERTIES ('a'='a', 'b'='b', 'c'='c')") checkError( exception = parseException(sql4), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "WITH DBPROPERTIES"), context = ExpectedContext( fragment = sql4, diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala index c291cc85aae..817c7d5e6bd 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLParserSuite.scala @@ -630,7 +630,7 @@ class DDLParserSuite extends AnalysisTest with SharedSparkSession { val sql1 = createViewStatement("COMMENT 'BLABLA'") checkError( exception = parseException(sql1), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "COMMENT"), context = ExpectedContext( fragment = sql1, @@ -640,7 +640,7 @@ class DDLParserSuite extends AnalysisTest with SharedSparkSession { val sql2 = createViewStatement("TBLPROPERTIES('prop1Key'=\"prop1Val\")") checkError( exception = parseException(sql2), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "TBLPROPERTIES"), context = ExpectedContext( fragment = sql2, diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala index 88f22023e34..effb5bc52b7 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala @@ -534,12 +534,12 @@ abstract class DDLSuite extends QueryTest with DDLSuiteBase { exception = intercept[AnalysisException] { sql("CREATE TABLE tbl(a int, b string) USING json PARTITIONED BY (c)") }, - errorClass = "_LEGACY_ERROR_TEMP_1206", + errorClass = "COLUMN_NOT_DEFINED_IN_TABLE", parameters = Map( "colType" -> "partition", - "colName" -> "c", - "tableName" -> s"$SESSION_CATALOG_NAME.default.tbl", - "tableCols" -> "a, b")) + "colName" -> "`c`", + "tableName" -> s"`$SESSION_CATALOG_NAME`.`default`.`tbl`", + "tableCols" -> "`a`, `b`")) } test("create table - bucket column names not in table definition") { @@ -547,12 +547,12 @@ abstract class DDLSuite extends QueryTest with DDLSuiteBase { exception = intercept[AnalysisException] { sql("CREATE TABLE tbl(a int, b string) USING json CLUSTERED BY (c) INTO 4 BUCKETS") }, - errorClass = "_LEGACY_ERROR_TEMP_1206", + errorClass = "COLUMN_NOT_DEFINED_IN_TABLE", parameters = Map( "colType" -> "bucket", - "colName" -> "c", - "tableName" -> s"$SESSION_CATALOG_NAME.default.tbl", - "tableCols" -> "a, b")) + "colName" -> "`c`", + "tableName" -> s"`$SESSION_CATALOG_NAME`.`default`.`tbl`", + "tableCols" -> "`a`, `b`")) } test("create table - column repeated in partition columns") { diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/PlanResolutionSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/PlanResolutionSuite.scala index 013e7227aef..1b389d77142 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/PlanResolutionSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/PlanResolutionSuite.scala @@ -2525,49 +2525,49 @@ class PlanResolutionSuite extends AnalysisTest { val sql1 = createTableHeader("TBLPROPERTIES('test' = 'test2')") checkError( exception = parseException(parsePlan)(sql1), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "TBLPROPERTIES"), context = ExpectedContext(fragment = sql1, start = 0, stop = 117)) val sql2 = createTableHeader("LOCATION '/tmp/file'") checkError( exception = parseException(parsePlan)(sql2), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "LOCATION"), context = ExpectedContext(fragment = sql2, start = 0, stop = 95)) val sql3 = createTableHeader("COMMENT 'a table'") checkError( exception = parseException(parsePlan)(sql3), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "COMMENT"), context = ExpectedContext(fragment = sql3, start = 0, stop = 89)) val sql4 = createTableHeader("CLUSTERED BY(b) INTO 256 BUCKETS") checkError( exception = parseException(parsePlan)(sql4), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "CLUSTERED BY"), context = ExpectedContext(fragment = sql4, start = 0, stop = 119)) val sql5 = createTableHeader("PARTITIONED BY (k int)") checkError( exception = parseException(parsePlan)(sql5), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "PARTITIONED BY"), context = ExpectedContext(fragment = sql5, start = 0, stop = 99)) val sql6 = createTableHeader("STORED AS parquet") checkError( exception = parseException(parsePlan)(sql6), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "STORED AS/BY"), context = ExpectedContext(fragment = sql6, start = 0, stop = 89)) val sql7 = createTableHeader("ROW FORMAT SERDE 'parquet.hive.serde.ParquetHiveSerDe'") checkError( exception = parseException(parsePlan)(sql7), - errorClass = "_LEGACY_ERROR_TEMP_0041", + errorClass = "DUPLICATE_CLAUSES", parameters = Map("clauseName" -> "ROW FORMAT"), context = ExpectedContext(fragment = sql7, start = 0, stop = 163)) } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala index 6fd17ed5d9e..f64ffee7a66 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala @@ -563,7 +563,7 @@ class HiveDDLSuite test("create partitioned table without specifying data type for the partition columns") { assertAnalysisError( "CREATE TABLE tbl(a int) PARTITIONED BY (b) STORED AS parquet", - "partition column b is not defined in table") + "partition column `b` is not defined in table") } test("add/drop partition with location - managed table") { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org