github.com/amacneil/dbmate@v1.16.3-0.20230225174651-ca89b10d75d7/pkg/dbmate/driver.go (about) 1 package dbmate 2 3 import ( 4 "database/sql" 5 "io" 6 "net/url" 7 8 "github.com/amacneil/dbmate/pkg/dbutil" 9 ) 10 11 // Driver provides top level database functions 12 type Driver interface { 13 Open() (*sql.DB, error) 14 DatabaseExists() (bool, error) 15 CreateDatabase() error 16 DropDatabase() error 17 DumpSchema(*sql.DB) ([]byte, error) 18 MigrationsTableExists(*sql.DB) (bool, error) 19 CreateMigrationsTable(*sql.DB) error 20 SelectMigrations(*sql.DB, int) (map[string]bool, error) 21 InsertMigration(dbutil.Transaction, string) error 22 DeleteMigration(dbutil.Transaction, string) error 23 Ping() error 24 } 25 26 // DriverConfig holds configuration passed to driver constructors 27 type DriverConfig struct { 28 DatabaseURL *url.URL 29 Log io.Writer 30 MigrationsTableName string 31 } 32 33 // DriverFunc represents a driver constructor 34 type DriverFunc func(DriverConfig) Driver 35 36 var drivers = map[string]DriverFunc{} 37 38 // RegisterDriver registers a driver constructor for a given URL scheme 39 func RegisterDriver(f DriverFunc, scheme string) { 40 drivers[scheme] = f 41 }