提交 0b3e68a5 编写于 作者: martianzhang's avatar martianzhang

fix #97 merge alter token split bug bug

上级 c2ff174a
......@@ -1659,12 +1659,15 @@ func MergeAlterTables(sqls ...string) map[string]string {
alterStrs := make(map[string][]string)
mergedAlterStr := make(map[string]string)
alterExp := regexp.MustCompile(`(?i)alter\s*table\s*[^\s]*\s*`) // ALTER TABLE
renameExp := regexp.MustCompile(`(?i)rename\s*table\s*[^\s]*\s*`) // RENAME TABLE
// table/column/index name can be quoted in back ticks
backTicks := "(`[^\\s]*`)"
alterExp := regexp.MustCompile(`(?i)alter\s*table\s*(` + backTicks + `|([^\s]*))\s*`) // ALTER TABLE
renameExp := regexp.MustCompile(`(?i)rename\s*table\s*(` + backTicks + `|([^\s]*))\s*`) // RENAME TABLE
// 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)[^\s]*\s*`)
indexColsExp := regexp.MustCompile(`(?i)[^\s]*\s*on\s*[^\s]*\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)
......
......@@ -18,6 +18,7 @@ package ast
import (
"fmt"
"sort"
"testing"
"github.com/XiaoMi/soar/common"
......@@ -574,8 +575,27 @@ func TestMergeAlterTables(t *testing.T) {
// MODIFY & CHANGE
"ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';",
"ALTER TABLE t1 CHANGE b a INT NOT NULL;",
// table name quote in back ticks
"alter table `t3`add index `idx_a`(a)",
"alter table`t3`drop index`idx_b`(b)",
}
alterSQLs := MergeAlterTables(sqls...)
var sortedAlterSQLs []string
for item := range alterSQLs {
sortedAlterSQLs = append(sortedAlterSQLs, item)
}
sort.Strings(sortedAlterSQLs)
err := common.GoldenDiff(func() {
for _, tb := range sortedAlterSQLs {
fmt.Println(tb, ":", alterSQLs[tb])
}
}, t.Name(), update)
if err != nil {
t.Error(err)
}
fmt.Println(MergeAlterTables(sqls...))
}
func TestRewriteUnionAll(t *testing.T) {
......
`customer` : ALTER TABLE `customer` ADD INDEX part_of_name (name(10)) ;
`sakila`.`t1` : ALTER TABLE `sakila`.`t1` add index `idx_col`(`col`), add UNIQUE index `idx_col`(`col`), add index `idx_ID`(`ID`) ;
`t1` : ALTER TABLE `t1` RENAME INDEX idx_a TO idx_b, RENAME KEY idx_a TO idx_b, MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column', CHANGE b a INT NOT NULL ;
`t2` : ALTER TABLE `t2` DROP COLUMN c, DROP COLUMN d, ADD COLUMN C int, ADD COLUMN D int FIRST, ADD COLUMN E int AFTER D ;
`t3` : ALTER TABLE `t3` add index `idx_a`(a), drop index`idx_b`(b) ;
......@@ -1016,68 +1016,68 @@
{
"checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=",
"path": "vitess.io/vitess",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=",
"path": "vitess.io/vitess/go/bytes2",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=",
"path": "vitess.io/vitess/go/hack",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=",
"path": "vitess.io/vitess/go/sqltypes",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=",
"path": "vitess.io/vitess/go/vt/log",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=",
"path": "vitess.io/vitess/go/vt/proto/query",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=",
"path": "vitess.io/vitess/go/vt/proto/topodata",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=",
"path": "vitess.io/vitess/go/vt/proto/vtgate",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=",
"path": "vitess.io/vitess/go/vt/proto/vtrpc",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=",
"path": "vitess.io/vitess/go/vt/sqlparser",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
},
{
"checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=",
"path": "vitess.io/vitess/go/vt/vterrors",
"revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12",
"revisionTime": "2018-11-10T18:38:47Z"
"revision": "870177ca857e3bba2941a999174cc97d2c40c864",
"revisionTime": "2018-11-13T00:32:13Z"
}
],
"rootPath": "github.com/XiaoMi/soar"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册