Flatten package layout

This commit is contained in:
Adrian Macneil 2015-12-01 09:43:35 -08:00
parent 275f5791f4
commit aa5757f8f9
13 changed files with 193 additions and 239 deletions

46
driver.go Normal file
View file

@ -0,0 +1,46 @@
package main
import (
"database/sql"
"fmt"
"net/url"
)
// Driver provides top level database functions
type Driver interface {
Open(*url.URL) (*sql.DB, error)
DatabaseExists(*url.URL) (bool, error)
CreateDatabase(*url.URL) error
DropDatabase(*url.URL) error
CreateMigrationsTable(*sql.DB) error
SelectMigrations(*sql.DB, int) (map[string]bool, error)
InsertMigration(Transaction, string) error
DeleteMigration(Transaction, string) error
}
// Transaction can represent a database or open transaction
type Transaction interface {
Exec(query string, args ...interface{}) (sql.Result, error)
}
// GetDriver loads a database driver by name
func GetDriver(name string) (Driver, error) {
switch name {
case "mysql":
return MySQLDriver{}, nil
case "postgres":
return PostgresDriver{}, nil
default:
return nil, fmt.Errorf("Unknown driver: %s", name)
}
}
// GetDriverOpen is a shortcut for GetDriver(u.Scheme).Open(u)
func GetDriverOpen(u *url.URL) (*sql.DB, error) {
drv, err := GetDriver(u.Scheme)
if err != nil {
return nil, err
}
return drv.Open(u)
}