Skip to content

Commit 11dbda3

Browse files
committed
fixes #178, merged upstream
2 parents cb2674e + 36379b2 commit 11dbda3

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ public void setOnDeleteCascade(boolean onDeleteCascade) {
5353
this.onDeleteCascade = onDeleteCascade;
5454
}
5555

56+
private boolean onDeleteRestrict;
57+
58+
public boolean isOnDeleteRestrict() {
59+
return onDeleteRestrict;
60+
}
61+
62+
public void setOnDeleteRestrict(boolean onDeleteRestrict) {
63+
this.onDeleteRestrict = onDeleteRestrict;
64+
}
65+
66+
private boolean onDeleteSetNull;
67+
68+
public boolean isOnDeleteSetNull() {
69+
return onDeleteSetNull;
70+
}
71+
72+
public void setOnDeleteSetNull(boolean onDeleteSetNull) {
73+
this.onDeleteSetNull = onDeleteSetNull;
74+
}
75+
5676
private List<String> fkColumns;
5777

5878
public List<String> getFkColumns() {
@@ -159,6 +179,10 @@ public String toString() {
159179
PlainSelect.getStringList(fkSourceColumns)).append(")");
160180
if (isOnDeleteCascade()) {
161181
b.append(" ON DELETE CASCADE");
182+
} else if (isOnDeleteRestrict()) {
183+
b.append(" ON DELETE RESTRICT");
184+
} else if (isOnDeleteSetNull()) {
185+
b.append(" ON DELETE SET NULL");
162186
}
163187
} else if (fkIndex != null) {
164188
b.append(fkIndex);

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
226226
| <K_MERGE: "MERGE">
227227
| <K_MATCHED: "MATCHED">
228228
| <K_CASCADE: "CASCADE">
229+
| <K_RESTRICT: "RESTRICT">
229230
}
230231

231232
TOKEN : /* Numeric Constants */
@@ -2775,7 +2776,11 @@ Alter Alter():
27752776
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alter.setFkColumns(columnNames); }
27762777
<K_REFERENCES> tk=<S_IDENTIFIER> columnNames=ColumnsNamesList()
27772778
{ alter.setFkSourceTable(tk.image); alter.setFkSourceColumns(columnNames); }
2778-
[<K_ON> <K_DELETE> <K_CASCADE> { alter.setOnDeleteCascade(true); } ] )
2779+
[<K_ON> <K_DELETE>
2780+
(<K_CASCADE> { alter.setOnDeleteCascade(true); }
2781+
| <K_RESTRICT> { alter.setOnDeleteRestrict(true); }
2782+
| <K_SET> <K_NULL> { alter.setOnDeleteSetNull(true); } ) ]
2783+
)
27792784
|
27802785
(
27812786
{

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,16 @@ public void testAlterTableForgeignKey() throws JSQLParserException {
3838
public void testAlterTableAddConstraint() throws JSQLParserException {
3939
assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT FK_RESOURCELINKTYPE_PARENTTYPE_PRIMARYKEY FOREIGN KEY (PARENTTYPE_PRIMARYKEY) REFERENCES RESOURCETYPE(PRIMARYKEY)");
4040
}
41+
42+
public void testAlterTableForgeignKey2() throws JSQLParserException {
43+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)");
44+
}
45+
46+
public void testAlterTableForgeignKey3() throws JSQLParserException {
47+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE RESTRICT");
48+
}
49+
50+
public void testAlterTableForgeignKey4() throws JSQLParserException {
51+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE SET NULL");
52+
}
4153
}

0 commit comments

Comments
 (0)