Skip to content

Commit aa7df62

Browse files
authored
fix(parser): support Oracle USING INDEX TABLESPACE in ALTER TABLE ADD CONSTRAINT (#2498)
1 parent a5765f3 commit aa7df62

2 files changed

Lines changed: 51 additions & 2 deletions

File tree

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11717,7 +11717,7 @@ ForeignKeyIndex ForeignKeySpec(String constraintName):
1171711717
}
1171811718

1171911719
/**
11720-
* Parses USING [INDEX] name clause in ALTER TABLE constraint tails.
11720+
* Parses USING [INDEX] [name] [TABLESPACE name] clause in ALTER TABLE constraint tails.
1172111721
*/
1172211722
void AlterExpressionUsingIndex(AlterExpression alterExp):
1172311723
{
@@ -11726,7 +11726,14 @@ void AlterExpressionUsingIndex(AlterExpression alterExp):
1172611726
{
1172711727
<K_USING> { alterExp.addParameters("USING"); }
1172811728
[ LOOKAHEAD(2) <K_INDEX> { alterExp.addParameters("INDEX"); } ]
11729-
sk4=RelObjectName() { alterExp.addParameters(sk4); }
11729+
(
11730+
LOOKAHEAD(2, <K_TABLESPACE>) <K_TABLESPACE> sk4=RelObjectName()
11731+
{ alterExp.addParameters("TABLESPACE"); alterExp.addParameters(sk4); }
11732+
|
11733+
sk4=RelObjectName() { alterExp.addParameters(sk4); }
11734+
[ LOOKAHEAD(2) <K_TABLESPACE> sk4=RelObjectName()
11735+
{ alterExp.addParameters("TABLESPACE"); alterExp.addParameters(sk4); } ]
11736+
)
1173011737
}
1173111738

1173211739
/**

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2364,4 +2364,46 @@ public void testAlterTableAddConstraintPrimaryKeyUsingIndexName() throws JSQLPar
23642364

23652365
assertSqlCanBeParsedAndDeparsed(sql);
23662366
}
2367+
2368+
@Test
2369+
public void testAlterTableAddConstraintPrimaryKeyUsingIndexTablespace()
2370+
throws JSQLParserException {
2371+
String sql =
2372+
"ALTER TABLE bfmcs.your_table ADD CONSTRAINT your_table_pk PRIMARY KEY (ID) USING INDEX TABLESPACE your_tablespace";
2373+
Statement stmt = CCJSqlParserUtil.parse(sql);
2374+
assertInstanceOf(Alter.class, stmt);
2375+
2376+
Alter alter = (Alter) stmt;
2377+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
2378+
assertNotNull(alterExpressions);
2379+
assertEquals(1, alterExpressions.size());
2380+
2381+
AlterExpression alterExp = alterExpressions.get(0);
2382+
assertEquals(AlterOperation.ADD, alterExp.getOperation());
2383+
assertEquals(Arrays.asList("USING", "INDEX", "TABLESPACE", "your_tablespace"),
2384+
alterExp.getParameters());
2385+
2386+
assertSqlCanBeParsedAndDeparsed(sql);
2387+
}
2388+
2389+
@Test
2390+
public void testAlterTableAddConstraintPrimaryKeyUsingIndexNameAndTablespace()
2391+
throws JSQLParserException {
2392+
String sql =
2393+
"ALTER TABLE your_table ADD CONSTRAINT pk_test PRIMARY KEY (ID) USING INDEX idx_test TABLESPACE ts_test";
2394+
Statement stmt = CCJSqlParserUtil.parse(sql);
2395+
assertInstanceOf(Alter.class, stmt);
2396+
2397+
Alter alter = (Alter) stmt;
2398+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
2399+
assertNotNull(alterExpressions);
2400+
assertEquals(1, alterExpressions.size());
2401+
2402+
AlterExpression alterExp = alterExpressions.get(0);
2403+
assertEquals(AlterOperation.ADD, alterExp.getOperation());
2404+
assertEquals(Arrays.asList("USING", "INDEX", "idx_test", "TABLESPACE", "ts_test"),
2405+
alterExp.getParameters());
2406+
2407+
assertSqlCanBeParsedAndDeparsed(sql);
2408+
}
23672409
}

0 commit comments

Comments
 (0)