 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package source provides the Source interface. All source drivers must implement this interface, register themselves, optionally provide a `WithInstance` function and pass the tests in package source/testing.
Index ¶
- Variables
- func List() []string
- func Register(name string, driver Driver)
- type Direction
- type Driver
- type Migration
- type Migrations
- func (i *Migrations) Append(m *Migration) (ok bool)
- func (i *Migrations) Down(version uint) (m *Migration, ok bool)
- func (i *Migrations) First() (version uint, ok bool)
- func (i *Migrations) Next(version uint) (nextVersion uint, ok bool)
- func (i *Migrations) Prev(version uint) (prevVersion uint, ok bool)
- func (i *Migrations) Up(version uint) (m *Migration, ok bool)
 
Examples ¶
Constants ¶
This section is empty.
Variables ¶
      View Source
      
  
    var ( DefaultParse = Parse 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
Functions ¶
Types ¶
type Driver ¶
type Driver interface {
	// Open returns a a new driver instance configured with parameters
	// coming from the URL string. Migrate will call this function
	// only once per instance.
	Open(url string) (Driver, error)
	// Close closes the underlying source instance managed by the driver.
	// Migrate will call this function only once per instance.
	Close() error
	// 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 uint, err error)
	// 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 uint) (prevVersion uint, 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 uint) (nextVersion uint, 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!
	ReadUp(version uint) (r io.ReadCloser, identifier 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 uint) (r io.ReadCloser, identifier string, err error)
}
    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.
Example ¶
// see source/stub for an example // source/stub/stub.go has the driver implementation // source/stub/stub_test.go runs source/testing/test.go:Test
type Migration ¶
type Migration struct {
	// Version is the version of this migration.
	Version uint
	// 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
}
    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 ¶
type Migrations struct {
	// contains filtered or unexported fields
}
    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) (ok bool)
func (*Migrations) First ¶
func (i *Migrations) First() (version uint, ok bool)
       Directories
      ¶
      Directories
      ¶
    
    | Path | Synopsis | 
|---|---|
| Package vfs contains a driver that reads migrations from a virtual file system. | Package vfs contains a driver that reads migrations from a virtual file system. | 
| Package testing has the source tests. | Package testing has the source tests. | 
 Click to show internal directories. 
   Click to hide internal directories.