Use fs.FS

This commit is contained in:
Nise Void 2021-02-24 14:27:48 +01:00
parent fdc83faba0
commit 1bec960e38
Signed by: NiseVoid
GPG Key ID: FBA14AC83EA602F3
2 changed files with 16 additions and 8 deletions

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module git.fuyu.moe/Fuyu/migrate/v2
go 1.16

View File

@ -5,14 +5,14 @@ import (
"database/sql"
"errors"
"fmt"
"io/fs"
"strconv"
)
// Options contains all settings
type Options struct {
TableName string // Name used for version info table; defaults to DefaultTableName if not set
Schema string // Schema used for version info table; For PostgreSQL, ignored if not set
AssetPrefix string
TableName string // Name used for version info table; defaults to DefaultTableName if not set
Schema string // Schema used for version info table; For PostgreSQL, ignored if not set
}
// DefaultTableName is the name used when no TableName is specified in Options
@ -29,15 +29,20 @@ const fileFormat = `%04d.sql`
// AssetFunc is a function that returns the data for the given name
type AssetFunc func(string) ([]byte, error)
// Migrate executes migrations to get to the desired version
// Migrate executes all migrations
// Filenames need to have incrementing numbers
// Downgrading is not supported as it could result in data loss
func Migrate(db *sql.DB, version int, o Options, asset AssetFunc) error {
func Migrate(db *sql.DB, o Options, assets fs.FS) error {
entries, err := fs.ReadDir(assets, `.`)
if err != nil {
panic(`failed to read list of files`)
}
version := len(entries)
if o.TableName == `` {
o.TableName = DefaultTableName
}
var err error
searchPath := `public`
_ = db.QueryRow(`SHOW search_path`).Scan(&searchPath)
@ -74,7 +79,7 @@ func Migrate(db *sql.DB, version int, o Options, asset AssetFunc) error {
}
for i := v + 1; i <= version; i++ {
script, err := asset(fmt.Sprintf(o.AssetPrefix+fileFormat, i))
script, err := fs.ReadFile(assets, fmt.Sprintf(fileFormat, i))
if err != nil {
return ErrUpdatesMissing
}