Skip to content

Commit c7b3bdb

Browse files
authored
fix: ALTER TABLE with a USING INDEX clause (#2384)
1 parent 4e3d7a5 commit c7b3bdb

File tree

2 files changed

+54
-17
lines changed

2 files changed

+54
-17
lines changed

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9195,7 +9195,11 @@ AlterExpression AlterExpression():
91959195
LOOKAHEAD(2) (<K_PRIMARY> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setPkColumns(columnNames); })
91969196

91979197
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
9198-
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
9198+
[
9199+
<K_USING> { alterExp.addParameters("USING"); }
9200+
[ <K_INDEX> { alterExp.addParameters("INDEX"); } ]
9201+
sk4=RelObjectName() { alterExp.addParameters(sk4); }
9202+
]
91999203
|
92009204
LOOKAHEAD(2) (
92019205
(tk=<K_KEY> { alterExp.setUk(true); } | tk=<K_INDEX>)
@@ -9324,7 +9328,11 @@ AlterExpression AlterExpression():
93249328
|
93259329
( <K_UNIQUE> ((<K_KEY> { alterExp.setUk(true); } | <K_INDEX>) (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { alterExp.setUkName(tk.image); } )?
93269330
columnNames=ColumnsNamesList() { alterExp.setUkColumns(columnNames); }
9327-
[ <K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
9331+
[
9332+
<K_USING> { alterExp.addParameters("USING"); }
9333+
[ <K_INDEX> { alterExp.addParameters("INDEX"); } ]
9334+
sk4=RelObjectName() { alterExp.addParameters(sk4); }
9335+
]
93289336
[ LOOKAHEAD(2) index = IndexWithComment(index) { alterExp.setIndex(index); } ]
93299337
)
93309338
|
@@ -9414,7 +9422,11 @@ AlterExpression AlterExpression():
94149422
alterExp.setIndex(index);
94159423
}
94169424
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
9417-
[ <K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
9425+
[
9426+
<K_USING> { alterExp.addParameters("USING"); }
9427+
[ <K_INDEX> { alterExp.addParameters("INDEX"); } ]
9428+
sk4=RelObjectName() { alterExp.addParameters(sk4); }
9429+
]
94189430
[ LOOKAHEAD(2) index = IndexWithComment(index) { alterExp.setIndex(index); } ]
94199431
)
94209432
|
@@ -9446,7 +9458,11 @@ AlterExpression AlterExpression():
94469458
alterExp.setIndex(index);
94479459
}
94489460
constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); }
9449-
[ <K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }]
9461+
[
9462+
<K_USING> { alterExp.addParameters("USING"); }
9463+
[ <K_INDEX> { alterExp.addParameters("INDEX"); } ]
9464+
sk4=RelObjectName() { alterExp.addParameters(sk4); }
9465+
]
94509466
[ LOOKAHEAD(2) index = IndexWithComment(index) { alterExp.setIndex(index); } ]
94519467
)
94529468
|

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

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,21 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12-
import java.util.Arrays;
13-
import java.util.Collections;
14-
import java.util.List;
15-
import java.util.stream.Stream;
16-
12+
import static net.sf.jsqlparser.test.TestUtils.assertDeparse;
13+
import static net.sf.jsqlparser.test.TestUtils.assertEqualsObjectTree;
14+
import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
15+
import static net.sf.jsqlparser.test.TestUtils.assertStatementCanBeDeparsedAs;
1716
import static org.junit.jupiter.api.Assertions.assertEquals;
1817
import static org.junit.jupiter.api.Assertions.assertFalse;
1918
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
2019
import static org.junit.jupiter.api.Assertions.assertNotNull;
2120
import static org.junit.jupiter.api.Assertions.assertNull;
2221
import static org.junit.jupiter.api.Assertions.assertTrue;
23-
import org.junit.jupiter.api.Test;
24-
import org.junit.jupiter.params.ParameterizedTest;
25-
import org.junit.jupiter.params.provider.Arguments;
26-
import org.junit.jupiter.params.provider.MethodSource;
2722

23+
import java.util.Arrays;
24+
import java.util.Collections;
25+
import java.util.List;
26+
import java.util.stream.Stream;
2827
import net.sf.jsqlparser.JSQLParserException;
2928
import net.sf.jsqlparser.expression.StringValue;
3029
import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
@@ -43,10 +42,10 @@
4342
import net.sf.jsqlparser.statement.create.table.Index.ColumnParams;
4443
import net.sf.jsqlparser.statement.create.table.NamedConstraint;
4544
import net.sf.jsqlparser.statement.create.table.PartitionDefinition;
46-
import static net.sf.jsqlparser.test.TestUtils.assertDeparse;
47-
import static net.sf.jsqlparser.test.TestUtils.assertEqualsObjectTree;
48-
import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed;
49-
import static net.sf.jsqlparser.test.TestUtils.assertStatementCanBeDeparsedAs;
45+
import org.junit.jupiter.api.Test;
46+
import org.junit.jupiter.params.ParameterizedTest;
47+
import org.junit.jupiter.params.provider.Arguments;
48+
import org.junit.jupiter.params.provider.MethodSource;
5049

5150
public class AlterTest {
5251

@@ -2234,4 +2233,26 @@ public void testAlterTableAddIndexInvisible() throws JSQLParserException {
22342233

22352234
assertSqlCanBeParsedAndDeparsed(sql);
22362235
}
2236+
2237+
@Test
2238+
public void testAlterTableAddConstraintPrimaryKeyUsingIndexName() throws JSQLParserException {
2239+
String sql =
2240+
"ALTER TABLE TNWAV ADD CONSTRAINT PK_TNWAV PRIMARY KEY (NWNAME, ZEILE, BESTGRU) USING INDEX PK_TNWAV";
2241+
Statement stmt = CCJSqlParserUtil.parse(sql);
2242+
assertInstanceOf(Alter.class, stmt);
2243+
2244+
Alter alter = (Alter) stmt;
2245+
assertEquals("TNWAV", alter.getTable().getFullyQualifiedName());
2246+
2247+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
2248+
assertNotNull(alterExpressions);
2249+
assertEquals(1, alterExpressions.size());
2250+
2251+
AlterExpression alterExp = alterExpressions.get(0);
2252+
assertEquals(AlterOperation.ADD, alterExp.getOperation());
2253+
assertNotNull(alterExp.getIndex());
2254+
assertEquals(Arrays.asList("USING", "INDEX", "PK_TNWAV"), alterExp.getParameters());
2255+
2256+
assertSqlCanBeParsedAndDeparsed(sql);
2257+
}
22372258
}

0 commit comments

Comments
 (0)