Skip to content

Commit e645193

Browse files
tmnsurwumpz
authored andcommitted
fixes #320 (#576)
* fixes #320
1 parent bf95154 commit e645193

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3477,7 +3477,33 @@ AlterExpression AlterExpression():
34773477
checkCs.setExpression(exp);
34783478
alterExp.setIndex(checkCs);
34793479
}
3480-
) )
3480+
)
3481+
|
3482+
(
3483+
tk=<K_UNIQUE> tk2=<K_KEY>
3484+
columnNames=ColumnsNamesList()
3485+
{
3486+
index = new NamedConstraint();
3487+
index.setName(sk3);
3488+
index.setType(tk.image + " " + tk2.image);
3489+
index.setColumnsNames(columnNames);
3490+
alterExp.setIndex(index);
3491+
}
3492+
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3493+
)
3494+
|
3495+
(
3496+
tk=<K_KEY>
3497+
columnNames=ColumnsNamesList()
3498+
{
3499+
index = new NamedConstraint();
3500+
index.setName(sk3);
3501+
index.setType(tk.image);
3502+
index.setColumnsNames(columnNames);
3503+
alterExp.setIndex(index);
3504+
}
3505+
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3506+
) )
34813507
)
34823508
)
34833509
)

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
44
import static net.sf.jsqlparser.test.TestUtils.assertStatementCanBeDeparsedAs;
55

6+
import java.util.Arrays;
67
import java.util.List;
78

89
import junit.framework.TestCase;
@@ -252,4 +253,28 @@ public void testDropColumnRestrictIssue551() throws JSQLParserException {
252253
assertStatementCanBeDeparsedAs(stmt, "ALTER TABLE table1 DROP COLUMN NewColumn");
253254

254255
}
256+
257+
public void testAddConstraintKeyIssue320() throws JSQLParserException {
258+
String tableName = "table1";
259+
String columnName1 = "col1";
260+
String columnName2 = "col2";
261+
String columnName3 = "col3";
262+
String columnName4 = "col4";
263+
String constraintName1 = "table1_constraint_1";
264+
String constraintName2 = "table1_constraint_2";
265+
266+
for(String constraintType : Arrays.asList("UNIQUE KEY", "KEY")) {
267+
Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ")");
268+
269+
assertStatementCanBeDeparsedAs(stmt, "ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ")");
270+
271+
stmt = CCJSqlParserUtil.parse("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ", " + columnName2 + ")");
272+
273+
assertStatementCanBeDeparsedAs(stmt, "ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ", " + columnName2 + ")");
274+
275+
stmt = CCJSqlParserUtil.parse("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ", " + columnName2 + "), ADD CONSTRAINT " + constraintName2 + " " + constraintType + " (" + columnName3 + ", " + columnName4 + ")");
276+
277+
assertStatementCanBeDeparsedAs(stmt, "ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ", " + columnName2 + "), ADD CONSTRAINT " + constraintName2 + " " + constraintType + " (" + columnName3 + ", " + columnName4 + ")");
278+
}
279+
}
255280
}

0 commit comments

Comments
 (0)