Skip to content

Commit de0e871

Browse files
Add support for ... ALTER COLUMN ... DROP DEFAULT (#1532)
1 parent 81caf3a commit de0e871

File tree

4 files changed

+77
-21
lines changed

4 files changed

+77
-21
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ Also I would like to know about needed examples or documentation stuff.
5454

5555
## Extensions in the latest SNAPSHOT version 4.5
5656

57+
- Add support for `... ALTER COLUMN ... DROP DEFAULT`
58+
5759
Additionally, we have fixed many errors and improved the code quality and the test coverage.
5860

5961
## Extensions of JSqlParser releases

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

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class AlterExpression {
4040
private List<ColumnDataType> colDataTypeList;
4141
private List<ColumnDropNotNull> columnDropNotNullList;
4242

43+
private List<ColumnDropDefault> columnDropDefaultList;
44+
4345
private List<String> pkColumns;
4446
private List<String> ukColumns;
4547
private String ukName;
@@ -239,6 +241,13 @@ public void addColDropNotNull(ColumnDropNotNull columnDropNotNull) {
239241
columnDropNotNullList.add(columnDropNotNull);
240242
}
241243

244+
public void addColDropDefault(ColumnDropDefault columnDropDefault) {
245+
if (columnDropDefaultList == null) {
246+
columnDropDefaultList = new ArrayList<>();
247+
}
248+
columnDropDefaultList.add(columnDropDefault);
249+
}
250+
242251
public List<String> getFkSourceColumns() {
243252
return fkSourceColumns;
244253
}
@@ -425,20 +434,11 @@ public String toString() {
425434
b.append(")");
426435
}
427436
} else if (getColumnDropNotNullList() != null) {
428-
if (operation == AlterOperation.CHANGE) {
429-
if (optionalSpecifier != null) {
430-
b.append(optionalSpecifier).append(" ");
431-
}
432-
b.append(columnOldName).append(" ");
433-
} else if (columnDropNotNullList.size() > 1) {
434-
b.append("(");
435-
} else {
436-
b.append("COLUMN ");
437-
}
437+
b.append("COLUMN ");
438438
b.append(PlainSelect.getStringList(columnDropNotNullList));
439-
if (columnDropNotNullList.size() > 1) {
440-
b.append(")");
441-
}
439+
} else if ( columnDropDefaultList != null && !columnDropDefaultList.isEmpty() ) {
440+
b.append("COLUMN ");
441+
b.append(PlainSelect.getStringList(columnDropDefaultList));
442442
} else if (constraintName != null) {
443443
b.append("CONSTRAINT ");
444444
if (usingIfExists) {
@@ -731,4 +731,22 @@ public String toString() {
731731
return columnName + " DROP" + (withNot ? " NOT " : " ") + "NULL";
732732
}
733733
}
734+
735+
public static final class ColumnDropDefault {
736+
737+
private final String columnName;
738+
739+
public ColumnDropDefault(String columnName) {
740+
this.columnName = columnName;
741+
}
742+
743+
public String getColumnName() {
744+
return columnName;
745+
}
746+
747+
@Override
748+
public String toString() {
749+
return columnName + " DROP DEFAULT";
750+
}
751+
}
734752
}

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

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5494,6 +5494,21 @@ AlterExpression.ColumnDropNotNull AlterExpressionColumnDropNotNull():
54945494
}
54955495
}
54965496

5497+
AlterExpression.ColumnDropDefault AlterExpressionColumnDropDefault():
5498+
{
5499+
String columnName = null;
5500+
boolean withNot = false;
5501+
ColDataType dataType = null;
5502+
List<String> columnSpecs = null;
5503+
List<String> parameter = null;
5504+
}
5505+
{
5506+
columnName = RelObjectName() <K_DROP> <K_DEFAULT>
5507+
{
5508+
return new AlterExpression.ColumnDropDefault(columnName);
5509+
}
5510+
}
5511+
54975512
List<ConstraintState> AlterExpressionConstraintState():
54985513
{
54995514
List<ConstraintState> retval = new ArrayList<ConstraintState>();
@@ -5549,6 +5564,7 @@ AlterExpression AlterExpression():
55495564
Table fkTable = null;
55505565
AlterExpression.ColumnDataType alterExpressionColumnDataType = null;
55515566
AlterExpression.ColumnDropNotNull alterExpressionColumnDropNotNull = null;
5567+
AlterExpression.ColumnDropDefault alterExpressionColumnDropDefault = null;
55525568
ReferentialAction.Action action = null;
55535569

55545570
// for captureRest()
@@ -5576,10 +5592,22 @@ AlterExpression AlterExpression():
55765592
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
55775593
)
55785594
|
5579-
LOOKAHEAD(3) ( (LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); })?
5580-
(LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); }
5581-
|
5582-
alterExpressionColumnDropNotNull = AlterExpressionColumnDropNotNull() { alterExp.addColDropNotNull( alterExpressionColumnDropNotNull); })
5595+
LOOKAHEAD(3) (
5596+
( LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); } )?
5597+
5598+
(
5599+
LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType() {
5600+
alterExp.addColDataType(alterExpressionColumnDataType);
5601+
}
5602+
|
5603+
LOOKAHEAD(3) alterExpressionColumnDropNotNull = AlterExpressionColumnDropNotNull() {
5604+
alterExp.addColDropNotNull( alterExpressionColumnDropNotNull);
5605+
}
5606+
|
5607+
alterExpressionColumnDropDefault = AlterExpressionColumnDropDefault() {
5608+
alterExp.addColDropDefault( alterExpressionColumnDropDefault);
5609+
}
5610+
)
55835611
)
55845612
|
55855613
(

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,22 @@ public void testAlterTableAddUniqueConstraint() throws JSQLParserException {
131131
}
132132

133133
@Test
134-
public void testAlterTableForgeignKey2() throws JSQLParserException {
134+
public void testAlterTableForeignKey2() throws JSQLParserException {
135135
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)");
136136
}
137137

138138
@Test
139-
public void testAlterTableForgeignKey3() throws JSQLParserException {
139+
public void testAlterTableForeignKey3() throws JSQLParserException {
140140
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE RESTRICT");
141141
}
142142

143143
@Test
144-
public void testAlterTableForgeignKey4() throws JSQLParserException {
144+
public void testAlterTableForeignKey4() throws JSQLParserException {
145145
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE SET NULL");
146146
}
147147

148148
@Test
149-
public void testAlterTableForgeignWithFkSchema() throws JSQLParserException {
149+
public void testAlterTableForeignWithFkSchema() throws JSQLParserException {
150150
final String FK_SCHEMA_NAME = "my_schema";
151151
final String FK_TABLE_NAME = "ra_user";
152152
String sql = "ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES " + FK_SCHEMA_NAME + "." + FK_TABLE_NAME + " (id) ON DELETE SET NULL";
@@ -776,4 +776,12 @@ public void testAlterTableChangeColumnDropNotNull() throws JSQLParserException {
776776
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP NOT NULL, COLUMN c DROP NOT NULL)", true);
777777
}
778778

779+
@Test
780+
public void testAlterTableChangeColumnDropDefault() throws JSQLParserException {
781+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY COLUMN b DROP DEFAULT", true);
782+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP DEFAULT, COLUMN c DROP DEFAULT)", true);
783+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP NOT NULL, COLUMN b DROP DEFAULT)", true);
784+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP DEFAULT, COLUMN b DROP NOT NULL)", true);
785+
}
786+
779787
}

0 commit comments

Comments
 (0)