graphql-engine/cli/migrate/source/parse.go
2018-06-24 19:10:48 +05:30

62 lines
1.2 KiB
Go

package source
import (
"errors"
"fmt"
"regexp"
"strconv"
)
var (
ErrParse = fmt.Errorf("no match")
)
var (
DefaultParse = Parse
DefaultRegex = Regex
)
// Regex matches the following pattern:
// 123_name.up.ext
// 123_name.down.ext
var Regex = regexp.MustCompile(`^([0-9]+)_(.*)\.(` + string(Down) + `|` + string(Up) + `)\.(.*)$`)
// Parse returns Migration for matching Regex pattern.
func Parse(raw string) (*Migration, error) {
var direction Direction
m := Regex.FindStringSubmatch(raw)
if len(m) == 5 {
versionUint64, err := strconv.ParseUint(m[1], 10, 64)
if err != nil {
return nil, err
}
// Have different direction type for yaml and sql
if m[4] == "yaml" {
if m[3] == "up" {
direction = MetaUp
} else if m[3] == "down" {
direction = MetaDown
} else {
return nil, errors.New("Invalid Direction type")
}
} else if m[4] == "sql" {
if m[3] == "up" {
direction = Up
} else if m[3] == "down" {
direction = Down
} else {
return nil, errors.New("Invalid Direction type")
}
}
return &Migration{
Version: versionUint64,
Identifier: m[2],
Direction: direction,
Raw: raw,
}, nil
}
return nil, ErrParse
}