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  }