Skip to content

Commit 41630ca

Browse files
committed
Merge pull request #185 from schweighart/fix-alter-drop
Support for alter table drop column/constraint
2 parents 0bb2358 + 58dd28a commit 41630ca

File tree

3 files changed

+63
-7
lines changed

3 files changed

+63
-7
lines changed

src/main/java/net/sf/jsqlparser/statement/alter/Alter.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class Alter implements Statement {
4242
private List<String> ukColumns;
4343
private String ukName;
4444
private ForeignKeyIndex fkIndex = null;
45+
private String operation;
46+
private String constraintName;
4547

4648
private boolean onDeleteCascade;
4749

@@ -93,6 +95,14 @@ public void setFkSourceTable(String fkSourceTable) {
9395
this.fkSourceTable = fkSourceTable;
9496
}
9597

98+
public String getOperation() {
99+
return operation;
100+
}
101+
102+
public void setOperation(String operation) {
103+
this.operation = operation;
104+
}
105+
96106
private List<String> fkSourceColumns;
97107

98108
public List<String> getFkSourceColumns() {
@@ -119,6 +129,14 @@ public void setColumnName(String columnName) {
119129
this.columnName = columnName;
120130
}
121131

132+
public String getConstraintName() {
133+
return this.constraintName;
134+
}
135+
136+
public void setConstraintName(final String constraintName) {
137+
this.constraintName = constraintName;
138+
}
139+
122140
public ColDataType getDataType() {
123141
return dataType;
124142
}
@@ -167,9 +185,14 @@ public void setFkIndex(ForeignKeyIndex fkIndex) {
167185
@Override
168186
public String toString() {
169187
StringBuilder b = new StringBuilder();
170-
b.append("ALTER TABLE ").append(table.getFullyQualifiedName()).append(" ADD ");
188+
b.append("ALTER TABLE ").append(table.getFullyQualifiedName()).append(" ").append(operation).append(" ");
171189
if (columnName != null) {
172-
b.append("COLUMN ").append(columnName).append(" ").append(dataType.toString());
190+
b.append("COLUMN ").append(columnName);
191+
if (dataType != null) {
192+
b.append(" ").append(dataType.toString());
193+
}
194+
} else if (constraintName != null) {
195+
b.append("CONSTRAINT ").append(constraintName);
173196
} else if (pkColumns != null) {
174197
b.append("PRIMARY KEY (").append(PlainSelect.getStringList(pkColumns)).append(")");
175198
} else if (ukColumns != null) {

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2773,13 +2773,16 @@ Alter Alter():
27732773
List<String> columnNames = null;
27742774
ForeignKeyIndex fkIndex = null;
27752775
Table fkTable = null;
2776+
Token alterDrop = null;
27762777
}
27772778
{
27782779
<K_ALTER> <K_TABLE> table=Table() { alter.setTable(table); }
2779-
2780-
<K_ADD>
2781-
2782-
(
2780+
(
2781+
(alterDrop = <K_ADD>
2782+
{
2783+
alter.setOperation(alterDrop.image);
2784+
}
2785+
(
27832786
( <K_COLUMN>
27842787
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) dataType=ColDataType()
27852788
{
@@ -2820,8 +2823,30 @@ Alter Alter():
28202823
alter.setFkIndex(fkIndex);
28212824
}
28222825
)
2826+
)
2827+
)
2828+
|
2829+
(alterDrop = <K_DROP>
2830+
{
2831+
alter.setOperation(alterDrop.image);
2832+
}
2833+
(
2834+
( <K_COLUMN>
2835+
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
2836+
{
2837+
alter.setColumnName(tk.image);
2838+
}
2839+
)
2840+
|
2841+
( <K_CONSTRAINT>
2842+
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
2843+
{
2844+
alter.setConstraintName(tk.image);
2845+
}
2846+
)
2847+
)
2848+
)
28232849
)
2824-
28252850
{
28262851
return alter;
28272852
}

src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,12 @@ public void testAlterTableForgeignKey3() throws JSQLParserException {
5050
public void testAlterTableForgeignKey4() throws JSQLParserException {
5151
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE SET NULL");
5252
}
53+
54+
public void testAlterTableDropColumn() throws JSQLParserException {
55+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test DROP COLUMN YYY");
56+
}
57+
58+
public void testAlterTableDropConstraint() throws JSQLParserException {
59+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test DROP CONSTRAINT YYY");
60+
}
5361
}

0 commit comments

Comments
 (0)