@@ -719,6 +719,35 @@ TOKEN:
719719 }
720720}
721721
722+ /**
723+ * Parses identifiers including standard SQL identifiers, quoted identifiers, and specific keywords.
724+ *
725+ * This is used in cases where certain SQL keywords (like NAME, NEXT, VALUE, etc.) can appear
726+ * as identifiers (e.g., table names, column names) depending on the SQL dialect or context.
727+ *
728+ * Supported tokens:
729+ * - <S_IDENTIFIER>: Standard unquoted SQL identifier
730+ * - <S_QUOTED_IDENTIFIER>: Quoted identifier (e.g., `identifier` or "identifier")
731+ * - <K_NAME>, <K_NEXT>, <K_VALUE>, <K_PUBLIC>, <K_STRING>: Specific keywords treated as identifiers
732+ *
733+ * @return Token representing the identifier or keyword used as identifier
734+ */
735+ Token KeywordOrIdentifier():
736+ {
737+ Token tk;
738+ }
739+ {
740+ (
741+ tk = <S_IDENTIFIER>
742+ | tk = <S_QUOTED_IDENTIFIER>
743+ | tk = <K_NAME>
744+ | tk = <K_NEXT>
745+ | tk = <K_VALUE>
746+ | tk = <K_PUBLIC>
747+ | tk = <K_STRING>
748+ )
749+ { return tk; }
750+ }
722751
723752Statement Statement() #Statement:
724753{
@@ -7997,9 +8026,9 @@ AlterExpression AlterExpression():
79978026 )
79988027 |
79998028 LOOKAHEAD(2) <K_RENAME> { alterExp.setOperation(AlterOperation.RENAME); } [ <K_COLUMN> { alterExp.hasColumn(true);} ]
8000- ( tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER> ) { alterExp.setColOldName(tk.image); }
8029+ ( tk=KeywordOrIdentifier() ) { alterExp.setColOldName(tk.image); }
80018030 <K_TO>
8002- (tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER> ) { alterExp.setColumnName(tk2.image); }
8031+ ( tk2=KeywordOrIdentifier() ) { alterExp.setColumnName(tk2.image); }
80038032 |
80048033 LOOKAHEAD(2)(
80058034 <K_RENAME> <K_TO> {alterExp.setOperation(AlterOperation.RENAME_TABLE);}
0 commit comments