Documentation ¶
Index ¶
- Variables
- func IsEmptyFile(m *Migration, directory string) (bool, error)
- func Register(name string, driver Driver)
- type Direction
- type Driver
- type Migration
- type Migrations
- func (i *Migrations) Append(m *Migration) (err error)
- func (i *Migrations) Down(version uint64) (m *Migration, ok bool)
- func (i *Migrations) First() (version uint64, ok bool)
- func (i *Migrations) GetDirections(version uint64) map[Direction]bool
- func (i *Migrations) GetLocalVersion() uint64
- func (i *Migrations) GetUnappliedMigrations(version uint64) (versions []uint64)
- func (i *Migrations) MetaDown(version uint64) (m *Migration, ok bool)
- func (i *Migrations) MetaUp(version uint64) (m *Migration, ok bool)
- func (i *Migrations) Next(version uint64) (nextVersion uint64, ok bool)
- func (i *Migrations) Prev(version uint64) (prevVersion uint64, ok bool)
- func (i *Migrations) ReadName(version uint64) (name string)
- func (i *Migrations) Up(version uint64) (m *Migration, ok bool)
- type Parser
Constants ¶
This section is empty.
Variables ¶
View Source
var ( DefaultParse = Parse DefaultParsev2 = Parsev2 DefaultRegex = Regex )
View Source
var (
ErrParse = fmt.Errorf("no match")
)
View Source
var Regex = regexp.MustCompile(`^([0-9]+)_(.*)\.(` + string(Down) + `|` + string(Up) + `)\.(.*)$`)
Regex matches the following pattern:
123_name.up.ext 123_name.down.ext
View Source
var Regexv2 = regexp.MustCompile(`^([0-9]+)_(.*)\.(` + string(Down) + `|` + string(Up) + `)\.(sql)$`)
Functions ¶
func IsEmptyFile ¶
Validate file to check for empty sql or yaml content.
Types ¶
type Driver ¶
type Driver interface { // Open returns a new driver instance configured with parameters // coming from the URL string. Migrate will call this function // only once per instance. Open(url string, logger *log.Logger) (Driver, error) // Close closes the underlying source instance managed by the driver. // Migrate will call this function only once per instance. Close() error // Scan scans the local migration files Scan() error // Default Parser to be used for scanning the file system DefaultParser(Parser) // First returns the very first migration version available to the driver. // Migrate will call this function multiple times. // If there is no version available, it must return os.ErrNotExist. First() (version uint64, err error) // GetLocalVersion returns the latest version available in migrations folder GetLocalVersion() (version uint64, err error) // Get all unapplied migrations present in local directory GetUnappliedMigrations(version uint64) (versions []uint64) // Prev returns the previous version for a given version available to the driver. // Migrate will call this function multiple times. // If there is no previous version available, it must return os.ErrNotExist. Prev(version uint64) (prevVersion uint64, err error) // Next returns the next version for a given version available to the driver. // Migrate will call this function multiple times. // If there is no next version available, it must return os.ErrNotExist. Next(version uint64) (nextVersion uint64, err error) GetDirections(version uint64) map[Direction]bool // ReadUp returns the UP migration body and an identifier that helps // finding this migration in the source for a given version. // If there is no up migration available for this version, // it must return os.ErrNotExist. // Do not start reading, just return the ReadCloser! ReadUp(version uint64) (r io.ReadCloser, identifier string, fileName string, err error) // ReadUp returns the UP migration body and an identifier that helps // finding this migration in the source for a given version. // If there is no up migration available for this version, // it must return os.ErrNotExist. // Do not start reading, just return the ReadCloser! ReadMetaUp(version uint64) (r io.ReadCloser, identifier string, fileName string, err error) // ReadDown returns the DOWN migration body and an identifier that helps // finding this migration in the source for a given version. // If there is no down migration available for this version, // it must return os.ErrNotExist. // Do not start reading, just return the ReadCloser! ReadDown(version uint64) (r io.ReadCloser, identifier string, fileName string, err error) // ReadDown returns the DOWN migration body and an identifier that helps // finding this migration in the source for a given version. // If there is no down migration available for this version, // it must return os.ErrNotExist. // Do not start reading, just return the ReadCloser! ReadMetaDown(version uint64) (r io.ReadCloser, identifier string, fileName string, err error) // ReadName returns an name that helps // finding this migration in the source for a given version ReadName(version uint64) (name string) }
Driver is the interface every source driver must implement.
How to implement a source driver?
- Implement this interface.
- Optionally, add a function named `WithInstance`. This function should accept an existing source instance and a Config{} struct and return a driver instance.
- Add a test that calls source/testing.go:Test()
- Add own tests for Open(), WithInstance() (when provided) and Close(). All other functions are tested by tests in source/testing. Saves you some time and makes sure all source drivers behave the same way.
- Call Register in init().
Guidelines:
- All configuration input must come from the URL string in func Open() or the Config{} struct in WithInstance. Don't os.Getenv().
- Drivers are supposed to be read only.
- Ideally don't load any contents (into memory) in Open or WithInstance.
type Migration ¶
type Migration struct { // Version is the version of this migration. Version uint64 // Identifier can be any string that helps identifying // this migration in the source. Identifier string // Direction is either Up or Down. Direction Direction // Raw holds the raw location path to this migration in source. // ReadUp and ReadDown will use this. Raw string // Check if the file exists in a directory IsDir bool }
Migration is a helper struct for source drivers that need to build the full directory tree in memory. Migration is fully independent from migrate.Migration.
type Migrations ¶
Migrations wraps Migration and has an internal index to keep track of Migration order.
func NewMigrations ¶
func NewMigrations() *Migrations
func (*Migrations) Append ¶
func (i *Migrations) Append(m *Migration) (err error)
func (*Migrations) First ¶
func (i *Migrations) First() (version uint64, ok bool)
func (*Migrations) GetDirections ¶
func (i *Migrations) GetDirections(version uint64) map[Direction]bool
func (*Migrations) GetLocalVersion ¶
func (i *Migrations) GetLocalVersion() uint64
func (*Migrations) GetUnappliedMigrations ¶
func (i *Migrations) GetUnappliedMigrations(version uint64) (versions []uint64)
func (*Migrations) ReadName ¶
func (i *Migrations) ReadName(version uint64) (name string)
Click to show internal directories.
Click to hide internal directories.