diff --git a/ast/rewrite.go b/ast/rewrite.go index 32cc9e78f70c98ffe6d2f93381c71be4c5a5c692..38dc5b2ac014057bc88fdaf3050f7376ed577a8c 100644 --- a/ast/rewrite.go +++ b/ast/rewrite.go @@ -1688,7 +1688,6 @@ func MergeAlterTables(sqls ...string) map[string]string { // CREATE [UNIQUE|FULLTEXT|SPATIAL|PRIMARY] [KEY|INDEX] idx_name ON tbl_name createIndexExp := regexp.MustCompile(`(?i)create((unique)|(fulltext)|(spatial)|(primary)|(\s*)\s*)((index)|(key))\s*`) indexNameExp := regexp.MustCompile(`(?i)(` + backTicks + `|([^\s]*))\s*`) - indexColsExp := regexp.MustCompile(`(?i)(` + backTicks + `|([^\s]*))\s*on\s*(` + backTicks + `|([^\s]*))\s*`) for _, sql := range sqls { sql = strings.Trim(sql, common.Config.Delimiter) @@ -1719,7 +1718,8 @@ func MergeAlterTables(sqls ...string) map[string]string { } else if createIndexExp.MatchString(sql) { buf := createIndexExp.ReplaceAllString(sql, "") idxName := strings.TrimSpace(indexNameExp.FindString(buf)) - buf = indexColsExp.ReplaceAllString(buf, "") + buf = string([]byte(buf)[strings.Index(buf, "("):]) + common.Log.Error(buf) common.Log.Debug("alter createIndexExp: ALTER %v ADD INDEX %v %v", tableName, "ADD INDEX", idxName, buf) alterSQL = fmt.Sprint("ADD INDEX", " "+idxName+" ", buf) } diff --git a/ast/rewrite_test.go b/ast/rewrite_test.go index d95433dc8420636a2d1a6bde2ec2f3424ba789ac..ac5ca8d50233d338cf508a906b7ee67ffb2a1038 100644 --- a/ast/rewrite_test.go +++ b/ast/rewrite_test.go @@ -631,6 +631,7 @@ func TestMergeAlterTables(t *testing.T) { // ADD|DROP INDEX // TODO: PRIMARY KEY, [UNIQUE|FULLTEXT|SPATIAL] INDEX "CREATE INDEX part_of_name ON customer (name(10));", + "create index idx_test_cca on test_bb(test_cc);", // https://github.com/XiaoMi/soar/issues/205 "alter table `sakila`.`t1` add index `idx_col`(`col`)", "alter table `sakila`.`t1` add UNIQUE index `idx_col`(`col`)", "alter table `sakila`.`t1` add index `idx_ID`(`ID`)", diff --git a/ast/testdata/TestMergeAlterTables.golden b/ast/testdata/TestMergeAlterTables.golden index 0d08219f55386db6f1409d4aeec28273e17dff97..d82b3c9a3be1249b39b2c130dbc12a649d06f37d 100644 --- a/ast/testdata/TestMergeAlterTables.golden +++ b/ast/testdata/TestMergeAlterTables.golden @@ -8,3 +8,5 @@ `t3` : ALTER TABLE `t3` add index `idx_a`(a), drop index`idx_b`(b) ; +`test_bb` : ALTER TABLE `test_bb` ADD INDEX idx_test_cca (test_cc) ; +