const NilVersion int = -1
var ( ErrLocked = fmt.Errorf("can't acquire lock") ErrNotLocked = fmt.Errorf("can't unlock, as not currently locked") )
func CasRestoreOnErr(lock *atomic.Bool, o, n bool, casErr error, f func() error) error
CasRestoreOnErr CAS wrapper to automatically restore the lock state on error
func GenerateAdvisoryLockId(databaseName string, additionalNames ...string) (string, error)
GenerateAdvisoryLockId inspired by rails migrations, see https://goo.gl/8o9bCT
func List() []string
List lists the registered drivers
func Register(name string, driver Driver)
Register globally registers a driver.
Driver is the interface every database driver must implement.
How to implement a database driver?
Guidelines:
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 guaranteed 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 everything in the database. // Note that this is a breaking action, a new call to Open() is necessary to // ensure subsequent calls work as expected. Drop() error }
▹ Example
func Open(url string) (Driver, error)
Open returns a new driver instance.
Error should be used for errors involving queries ran against the database
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 }
func (e Error) Error() string
Name | Synopsis |
---|---|
.. | |
cassandra | |
clickhouse | |
cockroachdb | |
firebird | |
mongodb | |
multistmt | Package multistmt provides methods for parsing multi-statement database migrations |
mysql | |
neo4j | |
pgx | |
postgres | |
ql | |
redshift | |
snowflake | |
spanner | |
sqlcipher | |
sqlite | |
sqlite3 | |
sqlserver | |
stub | |
testing | Package testing has the database tests. |