From 49cde6ec41aa295c0d9c1a1a019ebc3cd3b48d59 Mon Sep 17 00:00:00 2001 From: onepintwig Date: Wed, 12 Nov 2025 16:37:22 +0000 Subject: [PATCH] [feat] Add 'K_DATA' to KeywordOrIdentifier to allow usages of 'data' as an identifier Allows for support of data as a column name when changing or dropping a column in an alter table statement --- .../jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 7 ++++--- .../net/sf/jsqlparser/statement/alter/AlterTest.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 0f2dd1df6..69afc0734 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -886,7 +886,7 @@ TOKEN: * Supported tokens: * - : Standard unquoted SQL identifier * - : Quoted identifier (e.g., `identifier` or "identifier") - * - , , , , : Specific keywords treated as identifiers + * - , , , , , : Specific keywords treated as identifiers * * @return Token representing the identifier or keyword used as identifier */ @@ -903,6 +903,7 @@ Token KeywordOrIdentifier(): | tk = | tk = | tk = + | tk = ) { return tk; } } @@ -9414,7 +9415,7 @@ AlterExpression AlterExpression(): { alterExp.setOperation(AlterOperation.CHANGE); } [ { alterExp.hasColumn(true); alterExp.setOptionalSpecifier("COLUMN"); } ] ( - (tk= | tk=) + (tk=KeywordOrIdentifier()) alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.withColumnOldName(tk.image).addColDataType(alterExpressionColumnDataType); } ) ) @@ -9448,7 +9449,7 @@ AlterExpression AlterExpression(): ( LOOKAHEAD(2) { alterExp.hasColumn(true); } )? [ { alterExp.setUsingIfExists(true); } ] // @todo: replace with a proper identifier - (tk= | tk= | tk=) { alterExp.setColumnName(tk.image); } + (tk=KeywordOrIdentifier() ) { alterExp.setColumnName(tk.image); } [ "INVALIDATE" { alterExp.addParameters("INVALIDATE"); } ] diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java index 559517b9d..749e12853 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java @@ -249,6 +249,11 @@ public void testAlterTableDropColumn2() throws JSQLParserException { assertEquals("col2", col2Exp.getColumnName()); } + @Test + public void testAlterTableDropColumnIssue2339() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE test DROP COLUMN Data"); + } + @Test public void testAlterTableDropConstraint() throws JSQLParserException { final String sql = "ALTER TABLE test DROP CONSTRAINT YYY"; @@ -455,6 +460,11 @@ public void testAlterTableChangeColumn4() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_test CHANGE c1 c2 INT (10)"); } + @Test + public void testAlterTableChangeColumnIssue2339() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_test CHANGE data INT (10)"); + } + @Test public void testAlterTableAddColumnWithZone() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed(