Skip to content

Commit cb2674e

Browse files
committed
fixes #178
1 parent da1e074 commit cb2674e

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
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

@@ -134,6 +136,14 @@ public void accept(StatementVisitor statementVisitor) {
134136
statementVisitor.visit(this);
135137
}
136138

139+
public ForeignKeyIndex getFkIndex() {
140+
return fkIndex;
141+
}
142+
143+
public void setFkIndex(ForeignKeyIndex fkIndex) {
144+
this.fkIndex = fkIndex;
145+
}
146+
137147
@Override
138148
public String toString() {
139149
StringBuilder b = new StringBuilder();
@@ -145,11 +155,14 @@ public String toString() {
145155
} else if (ukColumns != null) {
146156
b.append("UNIQUE KEY ").append(ukName).append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
147157
} else if (fkColumns != null) {
148-
b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).append(") REFERENCES ").append(fkSourceTable).append(" (").append(PlainSelect.getStringList(fkSourceColumns)).append(")");
158+
b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).append(") REFERENCES ").append(fkSourceTable).append(" (").append(
159+
PlainSelect.getStringList(fkSourceColumns)).append(")");
149160
if (isOnDeleteCascade()) {
150161
b.append(" ON DELETE CASCADE");
151162
}
152-
}
153-
return b.toString();
163+
} else if (fkIndex != null) {
164+
b.append(fkIndex);
165+
}
166+
return b.toString();
154167
}
155168
}

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2747,8 +2747,12 @@ Alter Alter():
27472747
Alter alter = new Alter();
27482748
Table table;
27492749
Token tk;
2750+
Token tk2 = null;
2751+
String sk3 = null;
27502752
ColDataType dataType;
27512753
List<String> columnNames = null;
2754+
ForeignKeyIndex fkIndex = null;
2755+
Table fkTable = null;
27522756
}
27532757
{
27542758
<K_ALTER> <K_TABLE> table=Table() { alter.setTable(table); }
@@ -2772,6 +2776,25 @@ Alter Alter():
27722776
<K_REFERENCES> tk=<S_IDENTIFIER> columnNames=ColumnsNamesList()
27732777
{ alter.setFkSourceTable(tk.image); alter.setFkSourceColumns(columnNames); }
27742778
[<K_ON> <K_DELETE> <K_CASCADE> { alter.setOnDeleteCascade(true); } ] )
2779+
|
2780+
(
2781+
{
2782+
fkIndex = new ForeignKeyIndex();
2783+
}
2784+
[<K_CONSTRAINT> sk3=RelObjectName() {fkIndex.setName(sk3);} ]
2785+
tk=<K_FOREIGN> tk2=<K_KEY>
2786+
columnNames=ColumnsNamesList()
2787+
{
2788+
fkIndex.setType(tk.image + " " + tk2.image);
2789+
fkIndex.setColumnsNames(columnNames);
2790+
}
2791+
<K_REFERENCES> fkTable=Table() columnNames=ColumnsNamesList()
2792+
{
2793+
fkIndex.setTable(fkTable);
2794+
fkIndex.setReferencedColumnNames(columnNames);
2795+
alter.setFkIndex(fkIndex);
2796+
}
2797+
)
27752798
)
27762799

27772800
{

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,4 +34,8 @@ 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
}

0 commit comments

Comments
 (0)