cobble/migration.go

67 lines
1.1 KiB
Go
Raw Normal View History

package main
import (
"log"
"os"
)
type Migration struct {
Path string
Name string
Requires string
Run bool
}
func NewMigration(path string, name string, requires string) Migration {
return Migration{
Path: path,
Name: name,
Requires: requires,
Run: false,
}
}
2024-07-12 01:15:37 +00:00
func (m *Migration) Bytes() ([]byte, error) {
migrationPath := m.Path
migrationBytes, err := os.ReadFile(migrationPath)
if err != nil {
return []byte{}, err
}
return migrationBytes, nil
}
func (m *Migration) Text() (string, error) {
migrationBytes, err := m.Bytes()
return string(migrationBytes), err
}
func (m *Migration) Sql() (string, error) {
migrationBytes, err := m.Bytes()
return string(StripComments(migrationBytes)), err
}
// Applies a migration to the given database connection.
//
// If an error is returned while trying to read the migration file
// or execute the SQL it contains, the error is returned.
func (m *Migration) Apply(db DB) error {
2024-07-12 01:15:37 +00:00
migrationSql, err := m.Sql()
if err != nil {
return err
}
log.Printf("SQL: %s", migrationSql)
err = db.Execute(migrationSql)
if err != nil {
return err
}
return nil
}