Skip to content

Commit a3c6cd6

Browse files
committed
[SPARK-40998][SQL] Rename the error class _LEGACY_ERROR_TEMP_0040 to INVALID_IDENTIFIER
### What changes were proposed in this pull request? In the PR, I propose to assign the proper name `INVALID_IDENTIFIER ` to the legacy error class `_LEGACY_ERROR_TEMP_0040 `, and modify test suite to use `checkError()` which checks the error class name, context and etc. ### 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 the modified test suites: ``` $ build/sbt "core/testOnly *SparkThrowableSuite" $ build/sbt "test:testOnly *ErrorParserSuite" ``` Closes #38484 from MaxGekk/invalid-identifier-error-class. Authored-by: Max Gekk <[email protected]> Signed-off-by: Max Gekk <[email protected]>
1 parent 1072204 commit a3c6cd6

File tree

4 files changed

+41
-41
lines changed

4 files changed

+41
-41
lines changed

core/src/main/resources/error/error-classes.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,11 @@
569569
],
570570
"sqlState" : "22023"
571571
},
572+
"INVALID_IDENTIFIER" : {
573+
"message" : [
574+
"The identifier <ident> is invalid. Please, consider quoting it with back-quotes as `<ident>`."
575+
]
576+
},
572577
"INVALID_JSON_SCHEMA_MAP_TYPE" : {
573578
"message" : [
574579
"Input schema <jsonSchema> can only contain STRING as a key type for a MAP."
@@ -1376,11 +1381,6 @@
13761381
"Unsupported SQL statement."
13771382
]
13781383
},
1379-
"_LEGACY_ERROR_TEMP_0040" : {
1380-
"message" : [
1381-
"Possibly unquoted identifier <ident> detected. Please consider quoting it with back-quotes as `<ident>`."
1382-
]
1383-
},
13841384
"_LEGACY_ERROR_TEMP_0041" : {
13851385
"message" : [
13861386
"Found duplicate clauses: <clauseName>."

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/ParseDriver.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ case object PostProcessor extends SqlBaseParserBaseListener {
325325
override def exitErrorIdent(ctx: SqlBaseParser.ErrorIdentContext): Unit = {
326326
val ident = ctx.getParent.getText
327327

328-
throw QueryParsingErrors.unquotedIdentifierError(ident, ctx)
328+
throw QueryParsingErrors.invalidIdentifierError(ident, ctx)
329329
}
330330

331331
/** Remove the back ticks from an Identifier. */

sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryParsingErrors.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,9 +448,9 @@ private[sql] object QueryParsingErrors extends QueryErrorsBase {
448448
Some("_LEGACY_ERROR_TEMP_0039"))
449449
}
450450

451-
def unquotedIdentifierError(ident: String, ctx: ErrorIdentContext): Throwable = {
451+
def invalidIdentifierError(ident: String, ctx: ErrorIdentContext): Throwable = {
452452
new ParseException(
453-
errorClass = "_LEGACY_ERROR_TEMP_0040",
453+
errorClass = "INVALID_IDENTIFIER",
454454
messageParameters = Map("ident" -> ident),
455455
ctx)
456456
}

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ErrorParserSuite.scala

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,22 @@ class ErrorParserSuite extends AnalysisTest {
4242
test("hyphen in identifier - DDL tests") {
4343
checkError(
4444
exception = parseException("USE test-test"),
45-
errorClass = "_LEGACY_ERROR_TEMP_0040",
45+
errorClass = "INVALID_IDENTIFIER",
4646
parameters = Map("ident" -> "test-test"))
4747
checkError(
4848
exception = parseException("CREATE DATABASE IF NOT EXISTS my-database"),
49-
errorClass = "_LEGACY_ERROR_TEMP_0040",
49+
errorClass = "INVALID_IDENTIFIER",
5050
parameters = Map("ident" -> "my-database"))
5151
checkError(
5252
exception = parseException(
5353
"""
5454
|ALTER DATABASE my-database
5555
|SET DBPROPERTIES ('p1'='v1')""".stripMargin),
56-
errorClass = "_LEGACY_ERROR_TEMP_0040",
56+
errorClass = "INVALID_IDENTIFIER",
5757
parameters = Map("ident" -> "my-database"))
5858
checkError(
5959
exception = parseException("DROP DATABASE my-database"),
60-
errorClass = "_LEGACY_ERROR_TEMP_0040",
60+
errorClass = "INVALID_IDENTIFIER",
6161
parameters = Map("ident" -> "my-database"))
6262
checkError(
6363
exception = parseException(
@@ -66,7 +66,7 @@ class ErrorParserSuite extends AnalysisTest {
6666
|CHANGE COLUMN
6767
|test-col TYPE BIGINT
6868
""".stripMargin),
69-
errorClass = "_LEGACY_ERROR_TEMP_0040",
69+
errorClass = "INVALID_IDENTIFIER",
7070
parameters = Map("ident" -> "test-col"))
7171
checkError(
7272
exception = parseException(
@@ -75,7 +75,7 @@ class ErrorParserSuite extends AnalysisTest {
7575
|RENAME COLUMN
7676
|test-col TO test
7777
""".stripMargin),
78-
errorClass = "_LEGACY_ERROR_TEMP_0040",
78+
errorClass = "INVALID_IDENTIFIER",
7979
parameters = Map("ident" -> "test-col"))
8080
checkError(
8181
exception = parseException(
@@ -84,7 +84,7 @@ class ErrorParserSuite extends AnalysisTest {
8484
|RENAME COLUMN
8585
|test TO test-col
8686
""".stripMargin),
87-
errorClass = "_LEGACY_ERROR_TEMP_0040",
87+
errorClass = "INVALID_IDENTIFIER",
8888
parameters = Map("ident" -> "test-col"))
8989
checkError(
9090
exception = parseException(
@@ -93,23 +93,23 @@ class ErrorParserSuite extends AnalysisTest {
9393
|DROP COLUMN
9494
|test-col, test
9595
""".stripMargin),
96-
errorClass = "_LEGACY_ERROR_TEMP_0040",
96+
errorClass = "INVALID_IDENTIFIER",
9797
parameters = Map("ident" -> "test-col"))
9898
checkError(
9999
exception = parseException("CREATE TABLE test (attri-bute INT)"),
100-
errorClass = "_LEGACY_ERROR_TEMP_0040",
100+
errorClass = "INVALID_IDENTIFIER",
101101
parameters = Map("ident" -> "attri-bute"))
102102
checkError(
103103
exception = parseException("CREATE FUNCTION test-func as org.test.func"),
104-
errorClass = "_LEGACY_ERROR_TEMP_0040",
104+
errorClass = "INVALID_IDENTIFIER",
105105
parameters = Map("ident" -> "test-func"))
106106
checkError(
107107
exception = parseException("DROP FUNCTION test-func as org.test.func"),
108-
errorClass = "_LEGACY_ERROR_TEMP_0040",
108+
errorClass = "INVALID_IDENTIFIER",
109109
parameters = Map("ident" -> "test-func"))
110110
checkError(
111111
exception = parseException("SHOW FUNCTIONS LIKE test-func"),
112-
errorClass = "_LEGACY_ERROR_TEMP_0040",
112+
errorClass = "INVALID_IDENTIFIER",
113113
parameters = Map("ident" -> "test-func"))
114114
checkError(
115115
exception = parseException(
@@ -120,68 +120,68 @@ class ErrorParserSuite extends AnalysisTest {
120120
|LOCATION '/user/external/page_view'
121121
|TBLPROPERTIES ('p1'='v1', 'p2'='v2')
122122
|AS SELECT * FROM src""".stripMargin),
123-
errorClass = "_LEGACY_ERROR_TEMP_0040",
123+
errorClass = "INVALID_IDENTIFIER",
124124
parameters = Map("ident" -> "page-view"))
125125
checkError(
126126
exception = parseException(
127127
"""
128128
|CREATE TABLE IF NOT EXISTS tab
129129
|USING test-provider
130130
|AS SELECT * FROM src""".stripMargin),
131-
errorClass = "_LEGACY_ERROR_TEMP_0040",
131+
errorClass = "INVALID_IDENTIFIER",
132132
parameters = Map("ident" -> "test-provider"))
133133
checkError(
134134
exception = parseException("SHOW TABLES IN hyphen-database"),
135-
errorClass = "_LEGACY_ERROR_TEMP_0040",
135+
errorClass = "INVALID_IDENTIFIER",
136136
parameters = Map("ident" -> "hyphen-database"))
137137
checkError(
138138
exception = parseException("SHOW TABLE EXTENDED IN hyphen-db LIKE \"str\""),
139-
errorClass = "_LEGACY_ERROR_TEMP_0040",
139+
errorClass = "INVALID_IDENTIFIER",
140140
parameters = Map("ident" -> "hyphen-db"))
141141
checkError(
142142
exception = parseException("SHOW COLUMNS IN t FROM test-db"),
143-
errorClass = "_LEGACY_ERROR_TEMP_0040",
143+
errorClass = "INVALID_IDENTIFIER",
144144
parameters = Map("ident" -> "test-db"))
145145
checkError(
146146
exception = parseException("DESC SCHEMA EXTENDED test-db"),
147-
errorClass = "_LEGACY_ERROR_TEMP_0040",
147+
errorClass = "INVALID_IDENTIFIER",
148148
parameters = Map("ident" -> "test-db"))
149149
checkError(
150150
exception = parseException("ANALYZE TABLE test-table PARTITION (part1)"),
151-
errorClass = "_LEGACY_ERROR_TEMP_0040",
151+
errorClass = "INVALID_IDENTIFIER",
152152
parameters = Map("ident" -> "test-table"))
153153
checkError(
154154
exception = parseException("LOAD DATA INPATH \"path\" INTO TABLE my-tab"),
155-
errorClass = "_LEGACY_ERROR_TEMP_0040",
155+
errorClass = "INVALID_IDENTIFIER",
156156
parameters = Map("ident" -> "my-tab"))
157157
}
158158

159159
test("hyphen in identifier - DML tests") {
160160
// dml tests
161161
checkError(
162162
exception = parseException("SELECT * FROM table-with-hyphen"),
163-
errorClass = "_LEGACY_ERROR_TEMP_0040",
163+
errorClass = "INVALID_IDENTIFIER",
164164
parameters = Map("ident" -> "table-with-hyphen"))
165165
// special test case: minus in expression shouldn't be treated as hyphen in identifiers
166166
checkError(
167167
exception = parseException("SELECT a-b FROM table-with-hyphen"),
168-
errorClass = "_LEGACY_ERROR_TEMP_0040",
168+
errorClass = "INVALID_IDENTIFIER",
169169
parameters = Map("ident" -> "table-with-hyphen"))
170170
checkError(
171171
exception = parseException("SELECT a-b AS a-b FROM t"),
172-
errorClass = "_LEGACY_ERROR_TEMP_0040",
172+
errorClass = "INVALID_IDENTIFIER",
173173
parameters = Map("ident" -> "a-b"))
174174
checkError(
175175
exception = parseException("SELECT a-b FROM table-hyphen WHERE a-b = 0"),
176-
errorClass = "_LEGACY_ERROR_TEMP_0040",
176+
errorClass = "INVALID_IDENTIFIER",
177177
parameters = Map("ident" -> "table-hyphen"))
178178
checkError(
179179
exception = parseException("SELECT (a - test_func(b-c)) FROM test-table"),
180-
errorClass = "_LEGACY_ERROR_TEMP_0040",
180+
errorClass = "INVALID_IDENTIFIER",
181181
parameters = Map("ident" -> "test-table"))
182182
checkError(
183183
exception = parseException("WITH a-b AS (SELECT 1 FROM s) SELECT * FROM s;"),
184-
errorClass = "_LEGACY_ERROR_TEMP_0040",
184+
errorClass = "INVALID_IDENTIFIER",
185185
parameters = Map("ident" -> "a-b"))
186186
checkError(
187187
exception = parseException(
@@ -190,7 +190,7 @@ class ErrorParserSuite extends AnalysisTest {
190190
|FROM t1 JOIN t2
191191
|USING (a, b, at-tr)
192192
""".stripMargin),
193-
errorClass = "_LEGACY_ERROR_TEMP_0040",
193+
errorClass = "INVALID_IDENTIFIER",
194194
parameters = Map("ident" -> "at-tr"))
195195
checkError(
196196
exception = parseException(
@@ -199,7 +199,7 @@ class ErrorParserSuite extends AnalysisTest {
199199
|OVER (PARTITION BY category ORDER BY revenue DESC) as hyphen-rank
200200
|FROM productRevenue
201201
""".stripMargin),
202-
errorClass = "_LEGACY_ERROR_TEMP_0040",
202+
errorClass = "INVALID_IDENTIFIER",
203203
parameters = Map("ident" -> "hyphen-rank"))
204204
checkError(
205205
exception = parseException(
@@ -210,7 +210,7 @@ class ErrorParserSuite extends AnalysisTest {
210210
|GROUP BY fake-breaker
211211
|ORDER BY c
212212
""".stripMargin),
213-
errorClass = "_LEGACY_ERROR_TEMP_0040",
213+
errorClass = "INVALID_IDENTIFIER",
214214
parameters = Map("ident" -> "grammar-breaker"))
215215
assert(parsePlan(
216216
"""
@@ -231,15 +231,15 @@ class ErrorParserSuite extends AnalysisTest {
231231
|WINDOW hyphen-window AS
232232
| (PARTITION BY a, b ORDER BY c rows BETWEEN 1 PRECEDING AND 1 FOLLOWING)
233233
""".stripMargin),
234-
errorClass = "_LEGACY_ERROR_TEMP_0040",
234+
errorClass = "INVALID_IDENTIFIER",
235235
parameters = Map("ident" -> "hyphen-window"))
236236
checkError(
237237
exception = parseException(
238238
"""
239239
|SELECT * FROM tab
240240
|WINDOW window_ref AS window-ref
241241
""".stripMargin),
242-
errorClass = "_LEGACY_ERROR_TEMP_0040",
242+
errorClass = "INVALID_IDENTIFIER",
243243
parameters = Map("ident" -> "window-ref"))
244244
checkError(
245245
exception = parseException(
@@ -248,7 +248,7 @@ class ErrorParserSuite extends AnalysisTest {
248248
|FROM t-a INNER JOIN tb
249249
|ON ta.a = tb.a AND ta.tag = tb.tag
250250
""".stripMargin),
251-
errorClass = "_LEGACY_ERROR_TEMP_0040",
251+
errorClass = "INVALID_IDENTIFIER",
252252
parameters = Map("ident" -> "t-a"))
253253
checkError(
254254
exception = parseException(
@@ -257,7 +257,7 @@ class ErrorParserSuite extends AnalysisTest {
257257
|SELECT a
258258
|SELECT b
259259
""".stripMargin),
260-
errorClass = "_LEGACY_ERROR_TEMP_0040",
260+
errorClass = "INVALID_IDENTIFIER",
261261
parameters = Map("ident" -> "test-table"))
262262
}
263263

0 commit comments

Comments
 (0)