Skip to content

Commit 91a0e33

Browse files
committed
still make keywork reserved
1 parent 87289cb commit 91a0e33

File tree

5 files changed

+49
-23
lines changed

5 files changed

+49
-23
lines changed

docs/sql-keywords.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Below is a list of all the keywords in Spark SQL.
8787
<tr><td>DATA</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
8888
<tr><td>DATABASE</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
8989
<tr><td>DATABASES</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
90-
<tr><td>DAY</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
90+
<tr><td>DAY</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
9191
<tr><td>DBPROPERTIES</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
9292
<tr><td>DEFINED</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
9393
<tr><td>DELETE</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
@@ -134,7 +134,7 @@ Below is a list of all the keywords in Spark SQL.
134134
<tr><td>GROUP</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
135135
<tr><td>GROUPING</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
136136
<tr><td>HAVING</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
137-
<tr><td>HOUR</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
137+
<tr><td>HOUR</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
138138
<tr><td>IF</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
139139
<tr><td>IGNORE</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
140140
<tr><td>IMPORT</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
@@ -174,7 +174,7 @@ Below is a list of all the keywords in Spark SQL.
174174
<tr><td>MERGE</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
175175
<tr><td>MINUS</td><td>reserved</td><td>strict-non-reserved</td><td>non-reserved</td></tr>
176176
<tr><td>MINUTE</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
177-
<tr><td>MONTH</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
177+
<tr><td>MONTH</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
178178
<tr><td>MSCK</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
179179
<tr><td>NAMESPACE</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
180180
<tr><td>NAMESPACES</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
@@ -233,7 +233,7 @@ Below is a list of all the keywords in Spark SQL.
233233
<tr><td>ROW</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
234234
<tr><td>ROWS</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
235235
<tr><td>SCHEMA</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
236-
<tr><td>SECOND</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
236+
<tr><td>SECOND</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
237237
<tr><td>SELECT</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
238238
<tr><td>SEMI</td><td>reserved</td><td>strict-non-reserved</td><td>non-reserved</td></tr>
239239
<tr><td>SEPARATED</td><td>non-reserved</td><td>non-reserved</td><td>non-reserved</td></tr>
@@ -288,5 +288,5 @@ Below is a list of all the keywords in Spark SQL.
288288
<tr><td>WHERE</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
289289
<tr><td>WINDOW</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
290290
<tr><td>WITH</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
291-
<tr><td>YEAR</td><td>non-reserved</td><td>non-reserved</td><td>reserved</td></tr>
291+
<tr><td>YEAR</td><td>reserved</td><td>non-reserved</td><td>reserved</td></tr>
292292
</table>

sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -820,22 +820,32 @@ errorCapturingMultiUnitsInterval
820820
;
821821

822822
multiUnitsInterval
823-
: (intervalValue identifier)+
823+
: (intervalValue intervalUnit)+
824824
;
825825

826826
errorCapturingUnitToUnitInterval
827827
: body=unitToUnitInterval (error1=multiUnitsInterval | error2=unitToUnitInterval)?
828828
;
829829

830830
unitToUnitInterval
831-
: value=intervalValue from=identifier TO to=identifier
831+
: value=intervalValue from=intervalUnit TO to=intervalUnit
832832
;
833833

834834
intervalValue
835835
: (PLUS | MINUS)? (INTEGER_VALUE | DECIMAL_VALUE)
836836
| STRING
837837
;
838838

839+
intervalUnit
840+
: DAY
841+
| HOUR
842+
| MINUTE
843+
| MONTH
844+
| SECOND
845+
| YEAR
846+
| identifier
847+
;
848+
839849
colPosition
840850
: position=FIRST | position=AFTER afterCol=errorCapturingIdentifier
841851
;
@@ -1007,7 +1017,6 @@ ansiNonReserved
10071017
| DATA
10081018
| DATABASE
10091019
| DATABASES
1010-
| DAY
10111020
| DBPROPERTIES
10121021
| DEFINED
10131022
| DELETE
@@ -1038,7 +1047,6 @@ ansiNonReserved
10381047
| FUNCTIONS
10391048
| GLOBAL
10401049
| GROUPING
1041-
| HOUR
10421050
| IF
10431051
| IGNORE
10441052
| IMPORT
@@ -1067,8 +1075,6 @@ ansiNonReserved
10671075
| MAP
10681076
| MATCHED
10691077
| MERGE
1070-
| MINUTE
1071-
| MONTH
10721078
| MSCK
10731079
| NAMESPACE
10741080
| NAMESPACES
@@ -1115,7 +1121,6 @@ ansiNonReserved
11151121
| ROW
11161122
| ROWS
11171123
| SCHEMA
1118-
| SECOND
11191124
| SEPARATED
11201125
| SERDE
11211126
| SERDEPROPERTIES
@@ -1154,7 +1159,6 @@ ansiNonReserved
11541159
| VALUES
11551160
| VIEW
11561161
| WINDOW
1157-
| YEAR
11581162
;
11591163

11601164
// When `SQL_standard_keyword_behavior=false`, there are 2 kinds of keywords in Spark SQL.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2088,7 +2088,7 @@ class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging
20882088
*/
20892089
override def visitMultiUnitsInterval(ctx: MultiUnitsIntervalContext): CalendarInterval = {
20902090
withOrigin(ctx) {
2091-
val units = ctx.identifier().asScala
2091+
val units = ctx.intervalUnit().asScala
20922092
val values = ctx.intervalValue().asScala
20932093
try {
20942094
assert(units.length == values.length)

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
554554
"current_time",
555555
"current_timestamp",
556556
"current_user",
557+
"day",
557558
"distinct",
558559
"else",
559560
"end",
@@ -569,6 +570,7 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
569570
"grant",
570571
"group",
571572
"having",
573+
"hour",
572574
"in",
573575
"inner",
574576
"intersect",
@@ -578,6 +580,8 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
578580
"last_value",
579581
"leading",
580582
"left",
583+
"minute",
584+
"month",
581585
"natural",
582586
"not",
583587
"null",
@@ -594,6 +598,7 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
594598
"semi",
595599
"session_user",
596600
"minus",
601+
"second",
597602
"some",
598603
"table",
599604
"then",
@@ -606,7 +611,8 @@ class TableIdentifierParserSuite extends SparkFunSuite with SQLHelper {
606611
"using",
607612
"when",
608613
"where",
609-
"with")
614+
"with",
615+
"year")
610616

611617
val nonReservedKeywordsInAnsiMode = allCandidateKeywords -- reservedKeywordsInAnsiMode
612618

sql/core/src/test/resources/sql-tests/results/ansi/interval.sql.out

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -480,9 +480,15 @@ struct<INTERVAL '40 minutes 32 seconds':interval>
480480
-- !query 59
481481
select interval 30 day day
482482
-- !query 59 schema
483-
struct<day:interval>
483+
struct<>
484484
-- !query 59 output
485-
30 days
485+
org.apache.spark.sql.catalyst.parser.ParseException
486+
487+
no viable alternative at input 'day'(line 1, pos 23)
488+
489+
== SQL ==
490+
select interval 30 day day
491+
-----------------------^^^
486492

487493

488494
-- !query 60
@@ -766,17 +772,27 @@ select interval (-30) day
766772
-- !query 81 schema
767773
struct<>
768774
-- !query 81 output
769-
org.apache.spark.sql.AnalysisException
770-
Undefined function: 'interval'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7
775+
org.apache.spark.sql.catalyst.parser.ParseException
776+
777+
no viable alternative at input 'day'(line 1, pos 22)
778+
779+
== SQL ==
780+
select interval (-30) day
781+
----------------------^^^
771782

772783

773784
-- !query 82
774785
select interval (a + 1) day
775786
-- !query 82 schema
776787
struct<>
777788
-- !query 82 output
778-
org.apache.spark.sql.AnalysisException
779-
Undefined function: 'interval'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7
789+
org.apache.spark.sql.catalyst.parser.ParseException
790+
791+
no viable alternative at input 'day'(line 1, pos 24)
792+
793+
== SQL ==
794+
select interval (a + 1) day
795+
------------------------^^^
780796

781797

782798
-- !query 83
@@ -786,11 +802,11 @@ struct<>
786802
-- !query 83 output
787803
org.apache.spark.sql.catalyst.parser.ParseException
788804

789-
extraneous input 'day' expecting <EOF>(line 1, pos 27)
805+
no viable alternative at input 'day'(line 1, pos 23)
790806

791807
== SQL ==
792808
select interval 30 day day day
793-
---------------------------^^^
809+
-----------------------^^^
794810

795811

796812
-- !query 84

0 commit comments

Comments
 (0)