23cb8ea7e9
- Added `--throttle-query` param (when returns > 0, throttling applies) - Added `--critical-load`, similar to `--max-load` but implies panic and quit - Recoded *-load as `LoadMap` - More info on *-load throttle/panic - `printStatus()` now gets printing heuristic. Always shows up on interactive `"status"` - Fixed `change column` (aka rename) handling with quotes - Removed legacy `mysqlbinlog` parser code - Added tests
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
/*
|
|
Copyright 2016 GitHub Inc.
|
|
See https://github.com/github/gh-ost/blob/master/LICENSE
|
|
*/
|
|
|
|
package sql
|
|
|
|
import (
|
|
"regexp"
|
|
"strconv"
|
|
)
|
|
|
|
var (
|
|
renameColumnRegexp = regexp.MustCompile(`(?i)change\s+(column\s+|)([\S]+)\s+([\S]+)\s+`)
|
|
)
|
|
|
|
type Parser struct {
|
|
columnRenameMap map[string]string
|
|
}
|
|
|
|
func NewParser() *Parser {
|
|
return &Parser{
|
|
columnRenameMap: make(map[string]string),
|
|
}
|
|
}
|
|
|
|
func (this *Parser) ParseAlterStatement(alterStatement string) (err error) {
|
|
allStringSubmatch := renameColumnRegexp.FindAllStringSubmatch(alterStatement, -1)
|
|
for _, submatch := range allStringSubmatch {
|
|
if unquoted, err := strconv.Unquote(submatch[2]); err == nil {
|
|
submatch[2] = unquoted
|
|
}
|
|
if unquoted, err := strconv.Unquote(submatch[3]); err == nil {
|
|
submatch[3] = unquoted
|
|
}
|
|
|
|
this.columnRenameMap[submatch[2]] = submatch[3]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (this *Parser) GetNonTrivialRenames() map[string]string {
|
|
result := make(map[string]string)
|
|
for column, renamed := range this.columnRenameMap {
|
|
if column != renamed {
|
|
result[column] = renamed
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (this *Parser) HasNonTrivialRenames() bool {
|
|
return len(this.GetNonTrivialRenames()) > 0
|
|
}
|