Skip to content

Commit 0bd163a

Browse files
committed
add test case about add index
1 parent 887effb commit 0bd163a

File tree

3 files changed

+72
-3
lines changed

3 files changed

+72
-3
lines changed

src/main/java/net/sf/jsqlparser/statement/create/table/Index.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ public String getName() {
8181

8282
public void setName(String name) {
8383
this.name.clear();
84-
this.name.add(name);
84+
if (name != null) {
85+
this.name.add(name);
86+
}
8587
}
8688

8789
public void setName(List<String> name) {

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7818,8 +7818,13 @@ AlterExpression AlterExpression():
78187818
|
78197819
LOOKAHEAD(2) (
78207820
(tk=<K_KEY> { alterExp.setUk(true); } | tk=<K_INDEX>)
7821-
sk3 = RelObjectName()
7822-
columnNames = ColumnsNamesList()
7821+
(
7822+
LOOKAHEAD(2)
7823+
sk3 = RelObjectName()
7824+
columnNames = ColumnsNamesList()
7825+
|
7826+
columnNames = ColumnsNamesList()
7827+
)
78237828
{
78247829
index = new Index().withType(tk.image).withName(sk3).withColumnsNames(columnNames);
78257830
alterExp.setIndex(index);

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1916,4 +1916,66 @@ public void testAlterTableAddFullTextIndexWithOptions() throws JSQLParserExcepti
19161916

19171917
assertSqlCanBeParsedAndDeparsed(sql);
19181918
}
1919+
1920+
@Test
1921+
public void testAlterTableAddUnnamedIndex() throws JSQLParserException {
1922+
String sql = "ALTER TABLE employees ADD INDEX (name1, name2)";
1923+
1924+
Statement stmt = CCJSqlParserUtil.parse(sql);
1925+
Alter alter = (Alter) stmt;
1926+
1927+
assertEquals("employees", alter.getTable().getFullyQualifiedName());
1928+
1929+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
1930+
assertNotNull(alterExpressions);
1931+
assertEquals(1, alterExpressions.size());
1932+
1933+
AlterExpression indexExp = alterExpressions.get(0);
1934+
assertEquals(AlterOperation.ADD, indexExp.getOperation());
1935+
1936+
Index index = indexExp.getIndex();
1937+
assertNotNull(index);
1938+
assertNull(index.getName());
1939+
1940+
List<String> columnNames = index.getColumnsNames();
1941+
assertEquals(2, columnNames.size());
1942+
assertEquals("name1", columnNames.get(0));
1943+
assertEquals("name2", columnNames.get(1));
1944+
1945+
assertSqlCanBeParsedAndDeparsed(sql);
1946+
}
1947+
1948+
@Test
1949+
public void testAlterTableAddIndexWithOptions() throws JSQLParserException {
1950+
String sql = "ALTER TABLE employees ADD INDEX idx_lastname (last_name) " +
1951+
"USING BTREE KEY_BLOCK_SIZE = 16 COMMENT 'Performance tuning' VISIBLE";
1952+
1953+
Statement stmt = CCJSqlParserUtil.parse(sql);
1954+
Alter alter = (Alter) stmt;
1955+
1956+
assertEquals("employees", alter.getTable().getFullyQualifiedName());
1957+
1958+
List<AlterExpression> alterExpressions = alter.getAlterExpressions();
1959+
assertNotNull(alterExpressions);
1960+
assertEquals(1, alterExpressions.size());
1961+
1962+
AlterExpression indexExp = alterExpressions.get(0);
1963+
assertEquals(AlterOperation.ADD, indexExp.getOperation());
1964+
1965+
Index index = indexExp.getIndex();
1966+
assertNotNull(index);
1967+
assertEquals("INDEX", index.getIndexKeyword()); // 명시적 "INDEX" 키워드
1968+
assertEquals("idx_lastname", index.getName());
1969+
assertEquals("last_name", index.getColumnsNames().get(0));
1970+
1971+
List<String> indexSpec = index.getIndexSpec();
1972+
assertNotNull(indexSpec);
1973+
assertEquals(3, indexSpec.size());
1974+
assertEquals("USING BTREE", indexSpec.get(0));
1975+
assertEquals("KEY_BLOCK_SIZE=16", indexSpec.get(1));
1976+
assertEquals("COMMENT 'Performance tuning'", indexSpec.get(2));
1977+
assertEquals("VISIBLE", indexSpec.get(3));
1978+
1979+
assertSqlCanBeParsedAndDeparsed(sql);
1980+
}
19191981
}

0 commit comments

Comments
 (0)