Skip to content

Commit 2830c17

Browse files
PraTrickwumpz
authored andcommitted
Added support for DROP INDEX, ADD UNIQUE INDEX, ALGORITHM and USING (#752)
* Merge recent changes in the master from the master (#1) * changed license header to represent the projects dual license * changed license header to represent the projects dual license * changed license header to represent the projects dual license * changed license header to represent the projects dual license * Added support for comment(s) for column definitions in CREATE TABLE s… (#743) * Added support for comment(s) for column definitions in CREATE TABLE statements * Added support for comment(s) for column definitions in CREATE TABLE statements #2 * To increase code coverage * To increase code coverage #2 * Added support for 'ALTER TABLE CHANGE COLUMN' (#741) * Added support for 'ALTER TABLE CHANGE COLUMN oldName newName columnDefinition'. Please see https://dev.mysql.com/doc/refman/8.0/en/alter-table.html for reference. * Returned import ordering to avoid conflicts * Improved the tests somewhat Now also test the getOptionalSpecifier() for both cases (null and not-null) * Expanded tests for ALTER TABLE ... CHANGE * implemented optimize for, fixes #348 * implemented optimize for, fixes #348 * Support for simple informix outer joins. (#745) * added support for simple informix outer joins added some test code * added support for simple informix outer joins added some test code * more testing for better code coverage * added support for simple informix outer joins added some test code * more testing for better code coverage * fixes #747 * fixes #733 * fixes #707 * Update README.md * Update README.md * Fix handles the following cases: 1) DROP INDEX 2) ADD UNIQUE INDEX 3) ALGORITHM 4) USING <index type>
1 parent 3209a16 commit 2830c17

4 files changed

Lines changed: 70 additions & 6 deletions

File tree

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ public class AlterExpression {
4040
private List<String> fkColumns;
4141
private String fkSourceTable;
4242
private List<String> fkSourceColumns;
43+
private boolean uk;
44+
private boolean useEqual;
4345

4446
private List<ConstraintState> constraints;
4547
private List<String> parameters;
@@ -206,6 +208,22 @@ public List<String> getParameters() {
206208
return parameters;
207209
}
208210

211+
public boolean getUseEqual() {
212+
return useEqual;
213+
}
214+
215+
public void setUseEqual(boolean useEqual) {
216+
this.useEqual = useEqual;
217+
}
218+
219+
public boolean getUk() {
220+
return uk;
221+
}
222+
223+
public void setUk(boolean uk) {
224+
this.uk = uk;
225+
}
226+
209227
@Override
210228
public String toString() {
211229

@@ -241,7 +259,12 @@ public String toString() {
241259
} else if (ukColumns != null) {
242260
b.append("UNIQUE");
243261
if (ukName != null) {
244-
b.append(" KEY ").append(ukName);
262+
if (getUk()) {
263+
b.append(" KEY ");
264+
} else {
265+
b.append(" INDEX ");
266+
}
267+
b.append(ukName);
245268
}
246269
b.append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
247270
} else if (fkColumns != null) {
@@ -261,6 +284,9 @@ public String toString() {
261284
if (getConstraints() != null && !getConstraints().isEmpty()) {
262285
b.append(' ').append(PlainSelect.getStringList(constraints, false, false));
263286
}
287+
if (getUseEqual()) {
288+
b.append('=');
289+
}
264290
if (parameters!=null && !parameters.isEmpty()) {
265291
b.append(' ').append(PlainSelect.getStringList(parameters, false, false));
266292
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@
1010
package net.sf.jsqlparser.statement.alter;
1111

1212
public enum AlterOperation {
13-
ADD, ALTER, DROP, MODIFY, CHANGE;
13+
ADD, ALTER, DROP, MODIFY, CHANGE, ALGORITHM;
1414
}

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

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
106106
{
107107
<K_ACTION: "ACTION">
108108
| <K_ADD:"ADD">
109+
| <K_ALGORITHM: "ALGORITHM">
109110
| <K_ALL:"ALL">
110111
| <K_ALTER:"ALTER">
111112
| <K_AND:"AND">
@@ -3785,6 +3786,7 @@ AlterExpression AlterExpression():
37853786
Token tk;
37863787
Token tk2 = null;
37873788
String sk3 = null;
3789+
String sk4 = null;
37883790
ColDataType dataType;
37893791
List<String> columnNames = null;
37903792
List<ConstraintState> constraints = null;
@@ -3798,10 +3800,13 @@ AlterExpression AlterExpression():
37983800
(
37993801
((<K_ADD> { alterExp.setOperation(AlterOperation.ADD); } | <K_ALTER> { alterExp.setOperation(AlterOperation.ALTER); } | <K_MODIFY> { alterExp.setOperation(AlterOperation.MODIFY); })
38003802
(
3801-
LOOKAHEAD(2) ( <K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); } ) constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3803+
LOOKAHEAD(2) (
3804+
<K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); }
3805+
) constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3806+
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
38023807
|
38033808
LOOKAHEAD(2) (
3804-
tk = < K_INDEX >
3809+
(tk=<K_KEY> { alterExp.setUk(true); } | tk=<K_INDEX>)
38053810
sk3 = RelObjectName()
38063811
columnNames = ColumnsNamesList()
38073812
{
@@ -3812,6 +3817,7 @@ AlterExpression AlterExpression():
38123817
alterExp.setIndex(index);
38133818
}
38143819
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3820+
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
38153821
)
38163822
|
38173823
( (LOOKAHEAD(2) <K_COLUMN>)?
@@ -3823,7 +3829,9 @@ AlterExpression AlterExpression():
38233829
("," alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); } )* ")"
38243830
)
38253831
|
3826-
( <K_UNIQUE> (<K_KEY> (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setUkName(tk.image); } )? columnNames=ColumnsNamesList() { alterExp.setUkColumns(columnNames); } )
3832+
( <K_UNIQUE> ((<K_KEY> { alterExp.setUk(true); } | <K_INDEX>) (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setUkName(tk.image); } )?
3833+
columnNames=ColumnsNamesList() { alterExp.setUkColumns(columnNames); }
3834+
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }])
38273835
|
38283836
//following two choices regarding foreign keys should be merged
38293837
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setFkColumns(columnNames); }
@@ -3865,6 +3873,7 @@ AlterExpression AlterExpression():
38653873
alterExp.setIndex(index);
38663874
}
38673875
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3876+
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
38683877
)
38693878
|
38703879
(
@@ -3877,7 +3886,7 @@ AlterExpression AlterExpression():
38773886
)
38783887
|
38793888
(
3880-
tk=<K_UNIQUE> (tk2=<K_KEY>)?
3889+
tk=<K_UNIQUE> (tk2=<K_KEY> { alterExp.setUk(true); } | tk2=<K_INDEX>)?
38813890
columnNames=ColumnsNamesList()
38823891
{
38833892
index = new NamedConstraint();
@@ -3887,6 +3896,7 @@ AlterExpression AlterExpression():
38873896
alterExp.setIndex(index);
38883897
}
38893898
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
3899+
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
38903900
)
38913901
|
38923902
(
@@ -3936,6 +3946,16 @@ AlterExpression AlterExpression():
39363946

39373947
)
39383948
|
3949+
( tk=<K_INDEX>
3950+
(tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>)
3951+
{
3952+
index = new Index();
3953+
index.setType(tk.image);
3954+
index.setName(tk2.image);
3955+
alterExp.setIndex(index);
3956+
}
3957+
)
3958+
|
39393959
( <K_CONSTRAINT> [<K_IF> <K_EXISTS> { alterExp.setConstraintIfExists(true); } ]
39403960
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
39413961
{
@@ -3944,6 +3964,14 @@ AlterExpression AlterExpression():
39443964
)
39453965
)
39463966
)
3967+
|
3968+
(<K_ALGORITHM>
3969+
{
3970+
alterExp.setOperation(AlterOperation.ALGORITHM);
3971+
}
3972+
["=" { alterExp.setUseEqual(true);} ]
3973+
sk3 = RelObjectName() {alterExp.addParameters(sk3); }
3974+
)
39473975
)
39483976

39493977
{

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,4 +368,14 @@ public void testIssue633() throws JSQLParserException {
368368
public void testIssue679() throws JSQLParserException {
369369
assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_session_status ADD INDEX idx_user_id_name (user_id, user_name(10)), ADD INDEX idx_user_name (user_name)");
370370
}
371+
372+
@Test
373+
public void testAlterTableIndex586() throws Exception {
374+
Statement result = CCJSqlParserUtil.parse("ALTER TABLE biz_add_fee DROP INDEX operation_time, " +
375+
"ADD UNIQUE INDEX operation_time (`operation_time`, `warehouse_code`, `customerid`, `fees_type`, `external_no`) " +
376+
"USING BTREE, ALGORITHM = INPLACE");
377+
assertEquals("ALTER TABLE biz_add_fee DROP INDEX operation_time , " +
378+
"ADD UNIQUE INDEX operation_time (`operation_time`, `warehouse_code`, `customerid`, `fees_type`, `external_no`) " +
379+
"USING BTREE, ALGORITHM = INPLACE", result.toString());
380+
}
371381
}

0 commit comments

Comments
 (0)