52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package click_mig
|
|
|
|
import (
|
|
"github.com/jmoiron/sqlx"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
type migrationEntry struct {
|
|
Id int32 `db:"id"`
|
|
Name string `db:"name"`
|
|
DateApplied time.Time `db:"applied"`
|
|
}
|
|
|
|
func createMigrationTable(client client) error {
|
|
_, err := client.Exec(`
|
|
CREATE TABLE migrations(
|
|
id Int32,
|
|
name String,
|
|
applied DateTime
|
|
) engine=TinyLog()
|
|
`)
|
|
|
|
return err
|
|
}
|
|
|
|
func setMigrationApplied(id int32, name string, tx *sqlx.Tx) error {
|
|
mig := migrationEntry{Id: id, Name: name, DateApplied: time.Now()}
|
|
|
|
_, err := tx.NamedExec("INSERT INTO migrations (id, name, applied) VALUES (:id, :name, :applied)", &mig)
|
|
return err
|
|
}
|
|
|
|
func isMigrationTableExists(client client) bool {
|
|
r, err := client.Queryx("SHOW TABLES LIKE 'migrations'")
|
|
if err != nil {
|
|
log.Fatalf("Cannot connect to node: %v", err)
|
|
return false
|
|
}
|
|
defer r.Close()
|
|
return r.Next()
|
|
}
|
|
|
|
func listMigrationEntries(client client) (*[]migrationEntry, error) {
|
|
migrations := []migrationEntry{}
|
|
if err := client.Select(&migrations, "SELECT * FROM migrations ORDER BY id ASC"); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &migrations, nil
|
|
}
|