From 06727ba7c713b7f259e01c7a91a24b3ec7653db8 Mon Sep 17 00:00:00 2001 From: Leon Zhang Date: Mon, 20 May 2019 10:22:12 +0800 Subject: [PATCH] fix #205 create index rewrite error https://github.com/XiaoMi/soar/issues/205 --- ast/rewrite.go | 4 ++-- ast/rewrite_test.go | 1 + ast/testdata/TestMergeAlterTables.golden | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ast/rewrite.go b/ast/rewrite.go index 32cc9e7..38dc5b2 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 d95433d..ac5ca8d 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 0d08219..d82b3c9 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) ; + -- GitLab