Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,15 @@
@SuppressWarnings({"PMD.CyclomaticComplexity"})
public class AlterExpression implements Serializable {

public enum TableRenameKeyword {
NONE, TO, AS
}

private final Set<ReferentialAction> referentialActions = new LinkedHashSet<>(2);
private AlterOperation operation;
private String optionalSpecifier;
private String newTableName;
private TableRenameKeyword tableRenameKeyword = TableRenameKeyword.TO;
private String columnName;
// private ColDataType dataType;
private String columnOldName;
Expand Down Expand Up @@ -449,6 +454,14 @@ public void setNewTableName(String newTableName) {
this.newTableName = newTableName;
}

public TableRenameKeyword getTableRenameKeyword() {
return tableRenameKeyword;
}

public void setTableRenameKeyword(TableRenameKeyword tableRenameKeyword) {
this.tableRenameKeyword = tableRenameKeyword;
}

public String getColumnName() {
return columnName;
}
Expand Down Expand Up @@ -1217,6 +1230,16 @@ public AlterExpression withOptionalSpecifier(String optionalSpecifier) {
return this;
}

public AlterExpression withNewTableName(String newTableName) {
setNewTableName(newTableName);
return this;
}

public AlterExpression withTableRenameKeyword(TableRenameKeyword tableRenameKeyword) {
setTableRenameKeyword(tableRenameKeyword);
return this;
}

public AlterExpression withColumnName(String columnName) {
this.setColumnName(columnName);
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@ protected void appendBody(StringBuilder b) {
b.append(getColumnOldName()).append(" TO ").append(getColumnName());
break;
case RENAME_TABLE:
b.append("RENAME TO ").append(getNewTableName());
b.append("RENAME");
if (getTableRenameKeyword() != TableRenameKeyword.NONE) {
b.append(" ").append(getTableRenameKeyword());
}
b.append(" ").append(getNewTableName());
break;
case RENAME_INDEX:
case RENAME_KEY:
Expand Down
19 changes: 16 additions & 3 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -13571,7 +13571,7 @@ AlterExpression AlterExpressionAddAlterModify():

/**
* Parses all RENAME variants within ALTER TABLE.
* Handles: RENAME [COLUMN] old TO new, RENAME TO tablename,
* Handles: RENAME [COLUMN] old TO new, RENAME [TO|AS] tablename, RENAME tablename,
* RENAME INDEX/KEY/CONSTRAINT old TO new.
*/
AlterExpression AlterExpressionRenameOp():
Expand Down Expand Up @@ -13602,17 +13602,30 @@ AlterExpression AlterExpressionRenameOp():
}
|
LOOKAHEAD(2) (
<K_TO> { alterExp.setOperation(AlterOperation.RENAME_TABLE); }
(tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>) { alterExp.setNewTableName(tk2.image); }
(tk=<K_TO> | tk=<K_AS>) {
alterExp.setOperation(AlterOperation.RENAME_TABLE);
alterExp.setTableRenameKeyword(AlterExpression.TableRenameKeyword.valueOf(
tk.image.toUpperCase(Locale.ROOT)));
}
tk2=KeywordOrIdentifier() { alterExp.setNewTableName(tk2.image); }
)
|
LOOKAHEAD(3)
(
{ alterExp.setOperation(AlterOperation.RENAME); }
[ <K_COLUMN> { alterExp.hasColumn(true); } ]
(tk=KeywordOrIdentifier()) { alterExp.setColOldName(tk.image); }
<K_TO>
(tk2=KeywordOrIdentifier()) { alterExp.setColumnName(tk2.image); }
)
|
(
{
alterExp.setOperation(AlterOperation.RENAME_TABLE);
alterExp.setTableRenameKeyword(AlterExpression.TableRenameKeyword.NONE);
}
tk2=KeywordOrIdentifier() { alterExp.setNewTableName(tk2.image); }
)
)
{ return alterExp; }
}
Expand Down
18 changes: 18 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,24 @@ public void testAlterTableRenameColumnIssue2447() throws JSQLParserException {
assertEquals(expression.getColumnName(), "type2");
}

@Test
public void testMySqlAlterTableRenameVariants() throws JSQLParserException {
Alter withoutKeyword = (Alter) assertSqlCanBeParsedAndDeparsed(
"ALTER TABLE t1 RENAME t2");
AlterExpression rename = withoutKeyword.getAlterExpressions().get(0);
assertEquals(AlterOperation.RENAME_TABLE, rename.getOperation());
assertEquals("t2", rename.getNewTableName());
assertEquals(AlterExpression.TableRenameKeyword.NONE, rename.getTableRenameKeyword());

Alter withAs = (Alter) assertSqlCanBeParsedAndDeparsed("ALTER TABLE t1 RENAME AS t2");
assertEquals(AlterExpression.TableRenameKeyword.AS,
withAs.getAlterExpressions().get(0).getTableRenameKeyword());

Alter withTo = (Alter) assertSqlCanBeParsedAndDeparsed("ALTER TABLE t1 RENAME TO t2");
assertEquals(AlterExpression.TableRenameKeyword.TO,
withTo.getAlterExpressions().get(0).getTableRenameKeyword());
}

@Test
public void testAlterTableForeignKeyIssue981() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed(
Expand Down
Loading