pkg/wal/filename.go (58 lines of code) (raw):

package wal import ( "errors" "fmt" "path/filepath" "strings" ) var ( ErrNotWALSegment = errors.New("not a WAL segment") ErrInvalidWALSegment = errors.New("invalid WAL segment") ) func ParseFilename(path string) (database, table, schema, epoch string, err error) { if filepath.Ext(path) != ".wal" { err = ErrNotWALSegment return } fileName := filepath.Base(path) fields := strings.Split(fileName, "_") if len(fields) < 3 { err = ErrInvalidWALSegment return } if len(fields) == 3 { database = fields[0] table = fields[1] epoch = fields[2][:len(fields[2])-4] schema = "" if database == "" || table == "" || epoch == "" { err = ErrInvalidWALSegment } return } else if len(fields) == 4 { database = fields[0] table = fields[1] schema = fields[2] epoch = fields[3][:len(fields[3])-4] if database == "" || table == "" || schema == "" || epoch == "" { err = ErrInvalidWALSegment } return } err = ErrInvalidWALSegment return } func Filename(database, table, schema, epoch string) string { if schema == "" { return fmt.Sprintf("%s_%s_%s.wal", database, table, epoch) } return fmt.Sprintf("%s_%s_%s_%s.wal", database, table, schema, epoch) } type File struct { Path string Database string Table string Schema string Epoch string Key string }