 Documentation
      ¶
      Documentation
      ¶
    
    
  
    
  
    Overview ¶
Package database provides the Database interface. All database drivers must implement this interface, register themselves, optionally provide a `WithInstance` function and pass the tests in package database/testing.
Index ¶
Examples ¶
Constants ¶
      View Source
      
  
const NilVersion int = -1
    Variables ¶
      View Source
      
  
var (
	ErrLocked = fmt.Errorf("can't acquire lock")
)
    Functions ¶
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) (Driver, error)
	// Close closes the underlying database instance managed by the driver.
	// Migrate will call this function only once per instance.
	Close() error
	// Lock should acquire a database lock so that only one migration process
	// can run at a time. Migrate will call this function before Run is called.
	// If the implementation can't provide this functionality, return nil.
	// Return database.ErrLocked if database is already locked.
	Lock() error
	// Unlock should release the lock. Migrate will call this function after
	// all migrations have been run.
	Unlock() error
	// Run applies a migration to the database. migration is garantueed to be not nil.
	Run(migration io.Reader) error
	// SetVersion saves version and dirty state.
	// Migrate will call this function before and after each call to Run.
	// version must be >= -1. -1 means NilVersion.
	SetVersion(version int, dirty bool) error
	// Version returns the currently active version and if the database is dirty.
	// When no migration has been applied, it must return version -1.
	// Dirty means, a previous migration failed and user interaction is required.
	Version() (version int, dirty bool, err error)
	// Drop deletes everyting in the database.
	Drop() error
}
    Driver is the interface every database driver must implement.
How to implement a database driver?
- Implement this interface.
- Optionally, add a function named `WithInstance`. This function should accept an existing DB instance and a Config{} struct and return a driver instance.
- Add a test that calls database/testing.go:Test()
- Add own tests for Open(), WithInstance() (when provided) and Close(). All other functions are tested by tests in database/testing. Saves you some time and makes sure all database drivers behave the same way.
- Call Register in init().
Guidelines:
- Don't try to correct user input. Don't assume things. When in doubt, return an error and explain the situation to the user.
- All configuration input must come from the URL string in func Open() or the Config{} struct in WithInstance. Don't os.Getenv().
Example ¶
// see database/stub for an example // database/stub/stub.go has the driver implementation // database/stub/stub_test.go runs database/testing/test.go:Test
type Error ¶
type Error struct {
	// Optional: the line number
	Line uint
	// Query is a query excerpt
	Query []byte
	// Err is a useful/helping error message for humans
	Err string
	// OrigErr is the underlying error
	OrigErr error
}
    Error should be used for errors involving queries ran against the database
 Click to show internal directories. 
   Click to hide internal directories.