Skip to content

Commit

Permalink
Added support for DROP INDEX, ADD UNIQUE INDEX, ALGORITHM and USING (#…
Browse files Browse the repository at this point in the history
…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>
  • Loading branch information
PraTrick authored and wumpz committed Feb 19, 2019
1 parent 3209a16 commit 2830c17
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public class AlterExpression {
private List<String> fkColumns;
private String fkSourceTable;
private List<String> fkSourceColumns;
private boolean uk;
private boolean useEqual;

private List<ConstraintState> constraints;
private List<String> parameters;
Expand Down Expand Up @@ -206,6 +208,22 @@ public List<String> getParameters() {
return parameters;
}

public boolean getUseEqual() {
return useEqual;
}

public void setUseEqual(boolean useEqual) {
this.useEqual = useEqual;
}

public boolean getUk() {
return uk;
}

public void setUk(boolean uk) {
this.uk = uk;
}

@Override
public String toString() {

Expand Down Expand Up @@ -241,7 +259,12 @@ public String toString() {
} else if (ukColumns != null) {
b.append("UNIQUE");
if (ukName != null) {
b.append(" KEY ").append(ukName);
if (getUk()) {
b.append(" KEY ");
} else {
b.append(" INDEX ");
}
b.append(ukName);
}
b.append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
} else if (fkColumns != null) {
Expand All @@ -261,6 +284,9 @@ public String toString() {
if (getConstraints() != null && !getConstraints().isEmpty()) {
b.append(' ').append(PlainSelect.getStringList(constraints, false, false));
}
if (getUseEqual()) {
b.append('=');
}
if (parameters!=null && !parameters.isEmpty()) {
b.append(' ').append(PlainSelect.getStringList(parameters, false, false));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
package net.sf.jsqlparser.statement.alter;

public enum AlterOperation {
ADD, ALTER, DROP, MODIFY, CHANGE;
ADD, ALTER, DROP, MODIFY, CHANGE, ALGORITHM;
}
36 changes: 32 additions & 4 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
{
<K_ACTION: "ACTION">
| <K_ADD:"ADD">
| <K_ALGORITHM: "ALGORITHM">
| <K_ALL:"ALL">
| <K_ALTER:"ALTER">
| <K_AND:"AND">
Expand Down Expand Up @@ -3785,6 +3786,7 @@ AlterExpression AlterExpression():
Token tk;
Token tk2 = null;
String sk3 = null;
String sk4 = null;
ColDataType dataType;
List<String> columnNames = null;
List<ConstraintState> constraints = null;
Expand All @@ -3798,10 +3800,13 @@ AlterExpression AlterExpression():
(
((<K_ADD> { alterExp.setOperation(AlterOperation.ADD); } | <K_ALTER> { alterExp.setOperation(AlterOperation.ALTER); } | <K_MODIFY> { alterExp.setOperation(AlterOperation.MODIFY); })
(
LOOKAHEAD(2) ( <K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); } ) constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
LOOKAHEAD(2) (
<K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); }
) constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
|
LOOKAHEAD(2) (
tk = < K_INDEX >
(tk=<K_KEY> { alterExp.setUk(true); } | tk=<K_INDEX>)
sk3 = RelObjectName()
columnNames = ColumnsNamesList()
{
Expand All @@ -3812,6 +3817,7 @@ AlterExpression AlterExpression():
alterExp.setIndex(index);
}
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
)
|
( (LOOKAHEAD(2) <K_COLUMN>)?
Expand All @@ -3823,7 +3829,9 @@ AlterExpression AlterExpression():
("," alterExpressionColumnDataType = AlterExpressionColumnDataType() { alterExp.addColDataType(alterExpressionColumnDataType); } )* ")"
)
|
( <K_UNIQUE> (<K_KEY> (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setUkName(tk.image); } )? columnNames=ColumnsNamesList() { alterExp.setUkColumns(columnNames); } )
( <K_UNIQUE> ((<K_KEY> { alterExp.setUk(true); } | <K_INDEX>) (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setUkName(tk.image); } )?
columnNames=ColumnsNamesList() { alterExp.setUkColumns(columnNames); }
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }])
|
//following two choices regarding foreign keys should be merged
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setFkColumns(columnNames); }
Expand Down Expand Up @@ -3865,6 +3873,7 @@ AlterExpression AlterExpression():
alterExp.setIndex(index);
}
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
)
|
(
Expand All @@ -3877,7 +3886,7 @@ AlterExpression AlterExpression():
)
|
(
tk=<K_UNIQUE> (tk2=<K_KEY>)?
tk=<K_UNIQUE> (tk2=<K_KEY> { alterExp.setUk(true); } | tk2=<K_INDEX>)?
columnNames=ColumnsNamesList()
{
index = new NamedConstraint();
Expand All @@ -3887,6 +3896,7 @@ AlterExpression AlterExpression():
alterExp.setIndex(index);
}
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
)
|
(
Expand Down Expand Up @@ -3936,6 +3946,16 @@ AlterExpression AlterExpression():

)
|
( tk=<K_INDEX>
(tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>)
{
index = new Index();
index.setType(tk.image);
index.setName(tk2.image);
alterExp.setIndex(index);
}
)
|
( <K_CONSTRAINT> [<K_IF> <K_EXISTS> { alterExp.setConstraintIfExists(true); } ]
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
{
Expand All @@ -3944,6 +3964,14 @@ AlterExpression AlterExpression():
)
)
)
|
(<K_ALGORITHM>
{
alterExp.setOperation(AlterOperation.ALGORITHM);
}
["=" { alterExp.setUseEqual(true);} ]
sk3 = RelObjectName() {alterExp.addParameters(sk3); }
)
)

{
Expand Down
10 changes: 10 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -368,4 +368,14 @@ public void testIssue633() throws JSQLParserException {
public void testIssue679() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("ALTER TABLE tb_session_status ADD INDEX idx_user_id_name (user_id, user_name(10)), ADD INDEX idx_user_name (user_name)");
}

@Test
public void testAlterTableIndex586() throws Exception {
Statement result = CCJSqlParserUtil.parse("ALTER TABLE biz_add_fee DROP INDEX operation_time, " +
"ADD UNIQUE INDEX operation_time (`operation_time`, `warehouse_code`, `customerid`, `fees_type`, `external_no`) " +
"USING BTREE, ALGORITHM = INPLACE");
assertEquals("ALTER TABLE biz_add_fee DROP INDEX operation_time , " +
"ADD UNIQUE INDEX operation_time (`operation_time`, `warehouse_code`, `customerid`, `fees_type`, `external_no`) " +
"USING BTREE, ALGORITHM = INPLACE", result.toString());
}
}

0 comments on commit 2830c17

Please sign in to comment.