Skip to content

Commit 76958d2

Browse files
committed
add mysql adaptor
1 parent cbee922 commit 76958d2

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

adaptor/mysql.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package adaptor
2+
3+
import (
4+
"database/sql"
5+
6+
"bitbucket.org/braindev/dbmigrate"
7+
)
8+
9+
// MySQLAdaptor is a PostgreSQL DBMigrate adaptor
10+
type MySQLAdaptor struct {
11+
db *sql.DB
12+
}
13+
14+
// NewMySQL creates a new PostgresAdaptor
15+
func NewMySQL(db *sql.DB) (*MySQLAdaptor, error) {
16+
a := &MySQLAdaptor{
17+
db: db,
18+
}
19+
return a, a.createMigrationsTable()
20+
}
21+
22+
// GetAppliedMigrationsOrderedAsc returns an ordered slice of string versions
23+
// of migrations that have been previously applied
24+
func (a *MySQLAdaptor) GetAppliedMigrationsOrderedAsc() ([]string, error) {
25+
const query = "SELECT `version` FROM `dbmigrations` ORDER BY `version` ASC"
26+
rows, err := a.db.Query(query)
27+
if err != nil {
28+
return nil, err
29+
}
30+
defer rows.Close()
31+
var version string
32+
versions := []string{}
33+
for rows.Next() {
34+
err = rows.Scan(&version)
35+
if err != nil {
36+
return nil, err
37+
}
38+
versions = append(versions, version)
39+
}
40+
return versions, nil
41+
}
42+
43+
// createMigrationsTable conditionally creates the migrations table if it
44+
// doesn't yet exist
45+
func (a *MySQLAdaptor) createMigrationsTable() error {
46+
const query = "CREATE TABLE IF NOT EXISTS `dbmigrations`(`version` varchar NOT NULL PRIMARY KEY)"
47+
_, err := a.db.Exec(query)
48+
return err
49+
}
50+
51+
// ApplyMigration applies the specified migration
52+
func (a *MySQLAdaptor) ApplyMigration(pair dbmigrate.MigrationPair) error {
53+
_, err := a.db.Exec(pair.ApplyBody)
54+
if err != nil {
55+
return err
56+
}
57+
_, err = a.db.Exec("INSERT INTO `dbmigrations` (`version`) VALUES (?)", pair.Version)
58+
return err
59+
}
60+
61+
// RollbackMigration rolls back the specifified migration
62+
func (a *MySQLAdaptor) RollbackMigration(pair dbmigrate.MigrationPair) error {
63+
_, err := a.db.Exec(pair.RollbackBody)
64+
if err != nil {
65+
return err
66+
}
67+
_, err = a.db.Exec("DELETE FROM `dbmigrations` WHERE `version` = ?", pair.Version)
68+
return nil
69+
}

0 commit comments

Comments
 (0)