Skip to content

Commit b39f8da

Browse files
committed
Merge pull request #179 from bgaborg/master
fixes #178
2 parents 36379b2 + 11dbda3 commit b39f8da

File tree

3 files changed

+47
-7
lines changed

3 files changed

+47
-7
lines changed

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.sf.jsqlparser.statement.Statement;
2727
import net.sf.jsqlparser.statement.StatementVisitor;
2828
import net.sf.jsqlparser.statement.create.table.ColDataType;
29+
import net.sf.jsqlparser.statement.create.table.ForeignKeyIndex;
2930
import net.sf.jsqlparser.statement.select.PlainSelect;
3031

3132
/**
@@ -40,6 +41,7 @@ public class Alter implements Statement {
4041
private List<String> pkColumns;
4142
private List<String> ukColumns;
4243
private String ukName;
44+
private ForeignKeyIndex fkIndex = null;
4345

4446
private boolean onDeleteCascade;
4547

@@ -154,6 +156,14 @@ public void accept(StatementVisitor statementVisitor) {
154156
statementVisitor.visit(this);
155157
}
156158

159+
public ForeignKeyIndex getFkIndex() {
160+
return fkIndex;
161+
}
162+
163+
public void setFkIndex(ForeignKeyIndex fkIndex) {
164+
this.fkIndex = fkIndex;
165+
}
166+
157167
@Override
158168
public String toString() {
159169
StringBuilder b = new StringBuilder();
@@ -165,15 +175,18 @@ public String toString() {
165175
} else if (ukColumns != null) {
166176
b.append("UNIQUE KEY ").append(ukName).append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
167177
} else if (fkColumns != null) {
168-
b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).append(") REFERENCES ").append(fkSourceTable).append(" (").append(PlainSelect.getStringList(fkSourceColumns)).append(")");
178+
b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).append(") REFERENCES ").append(fkSourceTable).append(" (").append(
179+
PlainSelect.getStringList(fkSourceColumns)).append(")");
169180
if (isOnDeleteCascade()) {
170181
b.append(" ON DELETE CASCADE");
171182
} else if (isOnDeleteRestrict()) {
172183
b.append(" ON DELETE RESTRICT");
173184
} else if (isOnDeleteSetNull()) {
174185
b.append(" ON DELETE SET NULL");
175186
}
176-
}
177-
return b.toString();
187+
} else if (fkIndex != null) {
188+
b.append(fkIndex);
189+
}
190+
return b.toString();
178191
}
179192
}

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2748,8 +2748,12 @@ Alter Alter():
27482748
Alter alter = new Alter();
27492749
Table table;
27502750
Token tk;
2751+
Token tk2 = null;
2752+
String sk3 = null;
27512753
ColDataType dataType;
27522754
List<String> columnNames = null;
2755+
ForeignKeyIndex fkIndex = null;
2756+
Table fkTable = null;
27532757
}
27542758
{
27552759
<K_ALTER> <K_TABLE> table=Table() { alter.setTable(table); }
@@ -2772,10 +2776,29 @@ Alter Alter():
27722776
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alter.setFkColumns(columnNames); }
27732777
<K_REFERENCES> tk=<S_IDENTIFIER> columnNames=ColumnsNamesList()
27742778
{ alter.setFkSourceTable(tk.image); alter.setFkSourceColumns(columnNames); }
2775-
[<K_ON> <K_DELETE>
2776-
(<K_CASCADE> { alter.setOnDeleteCascade(true); }
2777-
| <K_RESTRICT> { alter.setOnDeleteRestrict(true); }
2778-
| <K_SET> <K_NULL> { alter.setOnDeleteSetNull(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+
)
2784+
|
2785+
(
2786+
{
2787+
fkIndex = new ForeignKeyIndex();
2788+
}
2789+
[<K_CONSTRAINT> sk3=RelObjectName() {fkIndex.setName(sk3);} ]
2790+
tk=<K_FOREIGN> tk2=<K_KEY>
2791+
columnNames=ColumnsNamesList()
2792+
{
2793+
fkIndex.setType(tk.image + " " + tk2.image);
2794+
fkIndex.setColumnsNames(columnNames);
2795+
}
2796+
<K_REFERENCES> fkTable=Table() columnNames=ColumnsNamesList()
2797+
{
2798+
fkIndex.setTable(fkTable);
2799+
fkIndex.setReferencedColumnNames(columnNames);
2800+
alter.setFkIndex(fkIndex);
2801+
}
27792802
)
27802803
)
27812804

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public void testAlterTableUniqueKey() throws JSQLParserException {
3434
public void testAlterTableForgeignKey() throws JSQLParserException {
3535
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE CASCADE");
3636
}
37+
38+
public void testAlterTableAddConstraint() throws JSQLParserException {
39+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT FK_RESOURCELINKTYPE_PARENTTYPE_PRIMARYKEY FOREIGN KEY (PARENTTYPE_PRIMARYKEY) REFERENCES RESOURCETYPE(PRIMARYKEY)");
40+
}
3741

3842
public void testAlterTableForgeignKey2() throws JSQLParserException {
3943
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)");

0 commit comments

Comments
 (0)