Skip to content

Commit 18c1a2c

Browse files
minleejaemj-db
andauthored
feat mysql alter force,engine,algorithm,lock (#2121)
Co-authored-by: mj-db <mj.db@kakaocorp.com>
1 parent e122bcf commit 18c1a2c

File tree

4 files changed

+89
-16
lines changed

4 files changed

+89
-16
lines changed

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public class AlterExpression implements Serializable {
6161
private String characterSet;
6262
private String collation;
6363
private String lockOption;
64+
private String algorithmOption;
65+
private String engineOption;
6466
private String commentText;
6567
private String tableOption;
6668

@@ -438,6 +440,22 @@ public void setLockOption(String lockOption) {
438440
this.lockOption = lockOption;
439441
}
440442

443+
public String getAlgorithmOption() {
444+
return algorithmOption;
445+
}
446+
447+
public void setAlgorithmOption(String algorithmOption) {
448+
this.algorithmOption = algorithmOption;
449+
}
450+
451+
public String getEngineOption() {
452+
return engineOption;
453+
}
454+
455+
public void setEngineOption(String engineOption) {
456+
this.engineOption = engineOption;
457+
}
458+
441459
public boolean getUseEqual() {
442460
return useEqual;
443461
}
@@ -478,6 +496,24 @@ public String toString() {
478496
b.append(optionalSpecifier);
479497
} else if (operation == AlterOperation.SET_TABLE_OPTION) {
480498
b.append(tableOption);
499+
} else if (operation == AlterOperation.ENGINE) {
500+
b.append("ENGINE ");
501+
if (useEqual) {
502+
b.append("= ");
503+
}
504+
b.append(engineOption);
505+
} else if (operation == AlterOperation.ALGORITHM) {
506+
b.append("ALGORITHM ");
507+
if (useEqual) {
508+
b.append("= ");
509+
}
510+
b.append(algorithmOption);
511+
} else if (operation == AlterOperation.LOCK) {
512+
b.append("LOCK ");
513+
if (useEqual) {
514+
b.append("= ");
515+
}
516+
b.append(lockOption);
481517
} else if (getOldIndex() != null) {
482518
b.append("RENAME");
483519
switch (operation) {

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,7 +10,7 @@
1010
package net.sf.jsqlparser.statement.alter;
1111

1212
public enum AlterOperation {
13-
ADD, ALTER, DROP, DROP_PRIMARY_KEY, DROP_UNIQUE, DROP_FOREIGN_KEY, MODIFY, CHANGE, CONVERT, ALGORITHM, RENAME, RENAME_TABLE, RENAME_INDEX, RENAME_KEY, RENAME_CONSTRAINT, COMMENT, COMMENT_WITH_EQUAL_SIGN, UNSPECIFIC, ADD_PARTITION, DROP_PARTITION, TRUNCATE_PARTITION, SET_TABLE_OPTION, LOCK;
13+
ADD, ALTER, DROP, DROP_PRIMARY_KEY, DROP_UNIQUE, DROP_FOREIGN_KEY, MODIFY, CHANGE, CONVERT, ALGORITHM, RENAME, RENAME_TABLE, RENAME_INDEX, RENAME_KEY, RENAME_CONSTRAINT, COMMENT, COMMENT_WITH_EQUAL_SIGN, UNSPECIFIC, ADD_PARTITION, DROP_PARTITION, TRUNCATE_PARTITION, SET_TABLE_OPTION, ENGINE, FORCE, LOCK;
1414

1515
public static AlterOperation from(String operation) {
1616
return Enum.valueOf(AlterOperation.class, operation.toUpperCase());

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

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7167,7 +7167,6 @@ AlterExpression AlterExpression():
71677167
(
71687168
(
71697169
<K_ADD> { alterExp.setOperation(AlterOperation.ADD);
7170-
System.out.println("test");
71717170
}
71727171
|
71737172
<K_ALTER> { alterExp.setOperation(AlterOperation.ALTER); }
@@ -7438,12 +7437,16 @@ AlterExpression AlterExpression():
74387437
)
74397438
)
74407439
|
7440+
(
7441+
<K_FORCE>{ alterExp.setOperation(AlterOperation.FORCE); }
7442+
)
7443+
|
74417444
(
74427445
<K_ALGORITHM> {
74437446
alterExp.setOperation(AlterOperation.ALGORITHM);
74447447
}
74457448
["=" { alterExp.setUseEqual(true);} ]
7446-
sk3 = RelObjectName() {alterExp.addParameters(sk3); }
7449+
sk3 = RelObjectName() {alterExp.setAlgorithmOption(sk3); }
74477450
)
74487451
|
74497452
(
@@ -7453,6 +7456,11 @@ AlterExpression AlterExpression():
74537456
["=" { alterExp.setUseEqual(true);} ]
74547457
sk3 = RelObjectName() {alterExp.setLockOption(sk3); }
74557458
)
7459+
|
7460+
(<K_ENGINE> {alterExp.setOperation(AlterOperation.ENGINE);}
7461+
["=" { alterExp.setUseEqual(true);} ]
7462+
sk3 = RelObjectName() {alterExp.setEngineOption(sk3); }
7463+
)
74567464
|
74577465
LOOKAHEAD(2) <K_RENAME> { alterExp.setOperation(AlterOperation.RENAME); } [ <K_COLUMN> { alterExp.hasColumn(true);} ]
74587466
( tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER> ) { alterExp.setColOldName(tk.image); }
@@ -7516,17 +7524,6 @@ AlterExpression AlterExpression():
75167524
}
75177525
)
75187526
|
7519-
(<K_ENGINE> {alterExp.setOperation(AlterOperation.SET_TABLE_OPTION);}
7520-
["=" { alterExp.setUseEqual(true);} ]
7521-
tk=<S_IDENTIFIER> {
7522-
if (alterExp.getUseEqual()) {
7523-
alterExp.setTableOption("ENGINE = " + tk.image);
7524-
} else {
7525-
alterExp.setTableOption("ENGINE " + tk.image);
7526-
}
7527-
}
7528-
)
7529-
|
75307527
LOOKAHEAD(2)
75317528
(<K_RENAME> ((<K_INDEX> {alterExp.setOperation(AlterOperation.RENAME_INDEX);}
75327529
| <K_KEY> {alterExp.setOperation(AlterOperation.RENAME_KEY);})

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

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,8 +1354,48 @@ public void testIssue2114AlterTableEngine() throws JSQLParserException {
13541354
assertEquals(1, alterExpressions.size());
13551355

13561356
AlterExpression engineExp = alterExpressions.get(0);
1357-
assertEquals(AlterOperation.SET_TABLE_OPTION, engineExp.getOperation());
1358-
assertEquals(engineExp.getTableOption(), "ENGINE = InnoDB");
1357+
assertEquals(AlterOperation.ENGINE, engineExp.getOperation());
1358+
assertEquals(engineExp.getEngineOption(), "InnoDB");
13591359
assertSqlCanBeParsedAndDeparsed(sql);
13601360
}
1361+
1362+
@Test
1363+
public void testIssue2118AlterTableForceAndEngine() throws JSQLParserException {
1364+
String sql1 = "ALTER TABLE my_table FORCE";
1365+
Statement stmt1 = CCJSqlParserUtil.parse(sql1);
1366+
assertTrue(stmt1 instanceof Alter);
1367+
Alter alter1 = (Alter) stmt1;
1368+
List<AlterExpression> alterExpressions1 = alter1.getAlterExpressions();
1369+
assertNotNull(alterExpressions1);
1370+
assertEquals(1, alterExpressions1.size());
1371+
1372+
AlterExpression forceExp = alterExpressions1.get(0);
1373+
assertEquals(AlterOperation.FORCE, forceExp.getOperation());
1374+
assertSqlCanBeParsedAndDeparsed(sql1);
1375+
1376+
String sql2 = "ALTER TABLE tbl_name FORCE, ENGINE=InnoDB, ALGORITHM=INPLACE, LOCK=NONE";
1377+
Statement stmt2 = CCJSqlParserUtil.parse(sql2);
1378+
assertTrue(stmt2 instanceof Alter);
1379+
Alter alter2 = (Alter) stmt2;
1380+
List<AlterExpression> alterExpressions2 = alter2.getAlterExpressions();
1381+
assertNotNull(alterExpressions2);
1382+
assertEquals(4, alterExpressions2.size());
1383+
1384+
AlterExpression forceExp2 = alterExpressions2.get(0);
1385+
assertEquals(AlterOperation.FORCE, forceExp2.getOperation());
1386+
1387+
AlterExpression engineExp = alterExpressions2.get(1);
1388+
assertEquals(AlterOperation.ENGINE, engineExp.getOperation());
1389+
assertEquals(engineExp.getEngineOption(), "InnoDB");
1390+
1391+
AlterExpression algorithmExp = alterExpressions2.get(2);
1392+
assertEquals(AlterOperation.ALGORITHM, algorithmExp.getOperation());
1393+
assertEquals("INPLACE", algorithmExp.getAlgorithmOption());
1394+
1395+
AlterExpression lockExp = alterExpressions2.get(3);
1396+
assertEquals(AlterOperation.LOCK, lockExp.getOperation());
1397+
assertEquals("NONE", lockExp.getLockOption());
1398+
1399+
assertSqlCanBeParsedAndDeparsed(sql2);
1400+
}
13611401
}

0 commit comments

Comments
 (0)