Skip to content

Commit ef64c9d

Browse files
authored
Merge pull request #37 from s-sathish/master
Support KEY without a name in create table syntax
2 parents 697603f + e26faaa commit ef64c9d

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

innodb-java-reader/src/main/java/com/alibaba/innodb/java/reader/schema/TableDefUtil.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616
import org.apache.commons.collections.CollectionUtils;
1717
import org.apache.commons.lang3.StringUtils;
1818

19+
import java.util.HashMap;
1920
import java.util.List;
2021
import java.util.Locale;
22+
import java.util.Map;
2123
import java.util.stream.Collectors;
2224

2325
import lombok.extern.slf4j.Slf4j;
@@ -98,6 +100,7 @@ private static void handleCollation(CreateTable stmt, TableDef tableDef) {
98100
private static void handleIndex(CreateTable stmt, TableDef tableDef) {
99101
List<Index> indices = stmt.getIndexes();
100102
if (CollectionUtils.isNotEmpty(indices)) {
103+
Map<String, Integer> indexesSoFar = new HashMap<>();
101104
for (Index index : indices) {
102105
if (KeyMeta.Type.isValid(index.getType())) {
103106
List<String> colNames = getColumnNames(index);
@@ -106,8 +109,15 @@ private static void handleIndex(CreateTable stmt, TableDef tableDef) {
106109
tableDef.setPrimaryKeyColumns(colNames);
107110
} else if (KeyMeta.Type.isValidSk(index.getType())) {
108111
// handle sk
112+
String indexName = index.getName() == null ? colNames.get(0) : index.getName();
113+
if (indexesSoFar.containsKey(indexName)) {
114+
indexesSoFar.put(indexName, indexesSoFar.get(indexName) + 1);
115+
indexName = indexName + '_' + indexesSoFar.get(indexName);
116+
} else {
117+
indexesSoFar.put(indexName, 1);
118+
}
109119
tableDef.addSecondaryKeyColumns(index.getType().toUpperCase(),
110-
index.getName(), colNames);
120+
indexName, colNames);
111121
} else {
112122
// handle fulltext and foreign key
113123
tableDef.addSecondaryKeyColumns(index.getType().toUpperCase(),

innodb-java-reader/src/test/java/com/alibaba/innodb/java/reader/schema/TableDefUtilTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,4 +618,28 @@ public void testMakeUniqueKeyAsPrimaryKey() {
618618
assertThat(tableDef.getSecondaryKeyMetaMap().size(), is(0));
619619
}
620620

621+
@Test
622+
public void testKeyWithoutName() {
623+
String sql = "CREATE TABLE `key_without_name` (\n"
624+
+ " `keyWithoutName1` VARCHAR(16) NOT NULL,\n"
625+
+ " `keyWithoutName2` VARCHAR(16) NOT NULL,\n"
626+
+ " `keyWithoutName3` VARCHAR(16) NOT NULL,\n"
627+
+ " `keyWithoutName4` VARCHAR(16) NOT NULL,\n"
628+
+ " `keyWithoutName5` VARCHAR(16) NOT NULL,\n"
629+
+ " UNIQUE KEY (`keyWithoutName1`),\n"
630+
+ " UNIQUE KEY (`keyWithoutName1`, `keyWithoutName2`),\n"
631+
+ " UNIQUE KEY (`keyWithoutName1`, `keyWithoutName2`, `keyWithoutName3`),\n"
632+
+ " UNIQUE KEY (`keyWithoutName4`),\n"
633+
+ " UNIQUE KEY `namedKey` (`keyWithoutName5`)\n"
634+
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8";
635+
TableDef tableDef = TableDefUtil.covertToTableDef(sql);
636+
System.out.println(tableDef);
637+
638+
assertThat(tableDef.getSecondaryKeyMetaList().get(0).getName(), is("keyWithoutName1"));
639+
assertThat(tableDef.getSecondaryKeyMetaList().get(1).getName(), is("keyWithoutName1_2"));
640+
assertThat(tableDef.getSecondaryKeyMetaList().get(2).getName(), is("keyWithoutName1_3"));
641+
assertThat(tableDef.getSecondaryKeyMetaList().get(3).getName(), is("keyWithoutName4"));
642+
assertThat(tableDef.getSecondaryKeyMetaList().get(4).getName(), is("namedKey"));
643+
}
644+
621645
}

0 commit comments

Comments
 (0)