Skip to content

Commit dd70254

Browse files
committed
feat mysql alter drop partition
1 parent 0780720 commit dd70254

File tree

4 files changed

+63
-2
lines changed

4 files changed

+63
-2
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ public class AlterExpression implements Serializable {
4949
private boolean uk;
5050
private boolean useEqual;
5151

52+
public List<String> getPartitions() {
53+
return partitions;
54+
}
55+
56+
public void setPartitions(List<String> partitions) {
57+
this.partitions = partitions;
58+
}
59+
60+
private List<String> partitions;
5261
private List<PartitionDefinition> partitionDefinitions;
5362
private List<ConstraintState> constraints;
5463
private List<String> parameters;

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, TRUNCATE_PARTITION, 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, 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: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7060,6 +7060,26 @@ List<PartitionDefinition> PartitionDefinitions():
70607060
}
70617061
}
70627062

7063+
7064+
List<String> PartitionNamesList() :
7065+
{
7066+
Token tk;
7067+
List<String> partitionNames = new ArrayList<String>();
7068+
}
7069+
{
7070+
tk = <S_IDENTIFIER> {
7071+
partitionNames.add(tk.image);
7072+
}
7073+
(
7074+
"," tk = <S_IDENTIFIER> {
7075+
partitionNames.add(tk.image);
7076+
}
7077+
)*
7078+
{
7079+
return partitionNames;
7080+
}
7081+
}
7082+
70637083
/**
70647084
* This production needs refactoring to multiple smaller productions. The target class should
70657085
* be splitted as well.
@@ -7081,6 +7101,7 @@ AlterExpression AlterExpression():
70817101
AlterExpression.ColumnDropNotNull alterExpressionColumnDropNotNull = null;
70827102
AlterExpression.ColumnDropDefault alterExpressionColumnDropDefault = null;
70837103
ReferentialAction.Action action = null;
7104+
List<String> partitions = null;
70847105
List<PartitionDefinition> partitionDefinition = null;
70857106
String truncatePartitionName = null;
70867107

@@ -7126,7 +7147,6 @@ AlterExpression AlterExpression():
71267147
|
71277148
(
71287149
<K_PARTITION> {
7129-
System.out.println("test _ Partition");
71307150
alterExp.setOperation(AlterOperation.ADD_PARTITION);
71317151
}
71327152
partitionDefinition=PartitionDefinitions() {
@@ -7296,6 +7316,15 @@ AlterExpression AlterExpression():
72967316
|
72977317
<K_DROP> { alterExp.setOperation(AlterOperation.DROP); }
72987318
(
7319+
(
7320+
<K_PARTITION> {
7321+
alterExp.setOperation(AlterOperation.DROP_PARTITION);
7322+
}
7323+
partitions=PartitionNamesList() {
7324+
alterExp.setPartitions(partitions);
7325+
}
7326+
)
7327+
|
72997328
(
73007329
(
73017330
// we use the PK Columns Field instead of the Column Field

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,4 +1229,27 @@ public void testIssue2106AlterTableAddPartitionCodeTransaction() throws JSQLPars
12291229
assertEquals(Collections.singletonList("'20210901'"), partitions.get(0).getValues());
12301230
assertEquals("InnoDB", partitions.get(0).getStorageEngine());
12311231
}
1232+
1233+
@Test
1234+
public void testIssue2106AlterTableDropPartition() throws JSQLParserException {
1235+
String sql =
1236+
"ALTER TABLE dkpg_payment_details DROP PARTITION p202007, p202008, p202009, p202010";
1237+
Statement stmt = CCJSqlParserUtil.parse(sql);
1238+
assertTrue(stmt instanceof Alter);
1239+
Alter alter = (Alter) stmt;
1240+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
1241+
assertNotNull(alterExpressions);
1242+
assertEquals(1, alterExpressions.size());
1243+
1244+
AlterExpression partitionExp = alterExpressions.get(0);
1245+
assertEquals(AlterOperation.DROP_PARTITION, partitionExp.getOperation());
1246+
List<String> partitionNames = partitionExp.getPartitions();
1247+
assertNotNull(partitionNames);
1248+
assertEquals(4, partitionNames.size());
1249+
1250+
assertEquals("p202007", partitionNames.get(0));
1251+
assertEquals("p202008", partitionNames.get(1));
1252+
assertEquals("p202009", partitionNames.get(2));
1253+
assertEquals("p202010", partitionNames.get(3));
1254+
}
12321255
}

0 commit comments

Comments
 (0)