Skip to content
Merged
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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ Also I would like to know about needed examples or documentation stuff.

## Extensions in the latest SNAPSHOT version 4.5

- Add support for `... ALTER COLUMN ... DROP DEFAULT`

Additionally, we have fixed many errors and improved the code quality and the test coverage.

## Extensions of JSqlParser releases
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public class AlterExpression {
private List<ColumnDataType> colDataTypeList;
private List<ColumnDropNotNull> columnDropNotNullList;

private List<ColumnDropDefault> columnDropDefaultList;

private List<String> pkColumns;
private List<String> ukColumns;
private String ukName;
Expand Down Expand Up @@ -239,6 +241,13 @@ public void addColDropNotNull(ColumnDropNotNull columnDropNotNull) {
columnDropNotNullList.add(columnDropNotNull);
}

public void addColDropDefault(ColumnDropDefault columnDropDefault) {
if (columnDropDefaultList == null) {
columnDropDefaultList = new ArrayList<>();
}
columnDropDefaultList.add(columnDropDefault);
}

public List<String> getFkSourceColumns() {
return fkSourceColumns;
}
Expand Down Expand Up @@ -425,20 +434,11 @@ public String toString() {
b.append(")");
}
} else if (getColumnDropNotNullList() != null) {
if (operation == AlterOperation.CHANGE) {
if (optionalSpecifier != null) {
b.append(optionalSpecifier).append(" ");
}
b.append(columnOldName).append(" ");
} else if (columnDropNotNullList.size() > 1) {
b.append("(");
} else {
b.append("COLUMN ");
}
b.append("COLUMN ");
b.append(PlainSelect.getStringList(columnDropNotNullList));
if (columnDropNotNullList.size() > 1) {
b.append(")");
}
} else if ( columnDropDefaultList != null && !columnDropDefaultList.isEmpty() ) {
b.append("COLUMN ");
b.append(PlainSelect.getStringList(columnDropDefaultList));
} else if (constraintName != null) {
b.append("CONSTRAINT ");
if (usingIfExists) {
Expand Down Expand Up @@ -731,4 +731,22 @@ public String toString() {
return columnName + " DROP" + (withNot ? " NOT " : " ") + "NULL";
}
}

public static final class ColumnDropDefault {

private final String columnName;

public ColumnDropDefault(String columnName) {
this.columnName = columnName;
}

public String getColumnName() {
return columnName;
}

@Override
public String toString() {
return columnName + " DROP DEFAULT";
}
}
}
36 changes: 32 additions & 4 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -5430,6 +5430,21 @@ AlterExpression.ColumnDropNotNull AlterExpressionColumnDropNotNull():
}
}

AlterExpression.ColumnDropDefault AlterExpressionColumnDropDefault():
{
String columnName = null;
boolean withNot = false;
ColDataType dataType = null;
List<String> columnSpecs = null;
List<String> parameter = null;
}
{
columnName = RelObjectName() <K_DROP> <K_DEFAULT>
{
return new AlterExpression.ColumnDropDefault(columnName);
}
}

List<ConstraintState> AlterExpressionConstraintState():
{
List<ConstraintState> retval = new ArrayList<ConstraintState>();
Expand Down Expand Up @@ -5485,6 +5500,7 @@ AlterExpression AlterExpression():
Table fkTable = null;
AlterExpression.ColumnDataType alterExpressionColumnDataType = null;
AlterExpression.ColumnDropNotNull alterExpressionColumnDropNotNull = null;
AlterExpression.ColumnDropDefault alterExpressionColumnDropDefault = null;
ReferentialAction.Action action = null;

// for captureRest()
Expand Down Expand Up @@ -5512,10 +5528,22 @@ AlterExpression AlterExpression():
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
)
|
LOOKAHEAD(3) ( (LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); })?
(LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); }
|
alterExpressionColumnDropNotNull = AlterExpressionColumnDropNotNull() { alterExp.addColDropNotNull( alterExpressionColumnDropNotNull); })
LOOKAHEAD(3) (
( LOOKAHEAD(2) <K_COLUMN> { alterExp.hasColumn(true); } )?

(
LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType() {
alterExp.addColDataType(alterExpressionColumnDataType);
}
|
LOOKAHEAD(3) alterExpressionColumnDropNotNull = AlterExpressionColumnDropNotNull() {
alterExp.addColDropNotNull( alterExpressionColumnDropNotNull);
}
|
alterExpressionColumnDropDefault = AlterExpressionColumnDropDefault() {
alterExp.addColDropDefault( alterExpressionColumnDropDefault);
}
)
)
|
(
Expand Down
16 changes: 12 additions & 4 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,22 +131,22 @@ public void testAlterTableAddUniqueConstraint() throws JSQLParserException {
}

@Test
public void testAlterTableForgeignKey2() throws JSQLParserException {
public void testAlterTableForeignKey2() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)");
}

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

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

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

@Test
public void testAlterTableChangeColumnDropDefault() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY COLUMN b DROP DEFAULT", true);
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP DEFAULT, COLUMN c DROP DEFAULT)", true);
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP NOT NULL, COLUMN b DROP DEFAULT)", true);
assertSqlCanBeParsedAndDeparsed("ALTER TABLE a MODIFY (COLUMN b DROP DEFAULT, COLUMN b DROP NOT NULL)", true);
}

}