2017-01-25 13:46:43 +01:00
|
|
|
package datastore
|
|
|
|
|
|
|
|
import (
|
2018-04-25 13:45:21 +02:00
|
|
|
"errors"
|
2018-05-08 12:31:51 +02:00
|
|
|
|
2017-01-25 13:46:43 +01:00
|
|
|
_ "github.com/go-sql-driver/mysql" // mysql driver
|
2018-04-25 13:05:29 +02:00
|
|
|
"github.com/jmoiron/sqlx"
|
2018-05-08 12:31:51 +02:00
|
|
|
//_ "github.com/lib/pq" // postgresql driver
|
|
|
|
_ "github.com/mattn/go-sqlite3" //sqlite3 driver
|
|
|
|
migrate "github.com/rubenv/sql-migrate"
|
|
|
|
log "github.com/sirupsen/logrus"
|
2017-01-25 13:46:43 +01:00
|
|
|
)
|
|
|
|
|
2018-04-25 13:05:29 +02:00
|
|
|
var dbx *sqlx.DB
|
|
|
|
|
2018-04-25 13:45:21 +02:00
|
|
|
// ErrNoResults is returned when a query yielded 0 results
|
2018-04-27 17:32:16 +02:00
|
|
|
var ErrNoResults = errors.New("datastore: query returned 0 results")
|
2018-04-25 13:45:21 +02:00
|
|
|
|
2018-04-25 13:05:29 +02:00
|
|
|
// Init creates a database connection pool (using sqlx)
|
2018-05-08 12:31:51 +02:00
|
|
|
func Init(c *Config) *sqlx.DB {
|
|
|
|
dbx = New(c)
|
2017-01-25 13:46:43 +01:00
|
|
|
|
2017-01-25 15:17:24 +01:00
|
|
|
// run migrations
|
2018-05-08 12:31:51 +02:00
|
|
|
runMigrations(c.Driver)
|
2017-01-25 15:17:24 +01:00
|
|
|
|
2018-04-25 13:05:29 +02:00
|
|
|
return dbx
|
2017-01-25 13:46:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// New creates a new database pool
|
2018-05-08 12:31:51 +02:00
|
|
|
func New(c *Config) *sqlx.DB {
|
|
|
|
dbx := sqlx.MustConnect(c.Driver, c.DSN())
|
2018-04-25 13:05:29 +02:00
|
|
|
return dbx
|
2017-01-25 13:46:43 +01:00
|
|
|
}
|
|
|
|
|
2018-05-06 11:53:19 +02:00
|
|
|
// TODO: Move to command (but still auto-run on boot).
|
2017-01-25 15:17:24 +01:00
|
|
|
func runMigrations(driver string) {
|
|
|
|
migrations := migrate.FileMigrationSource{
|
2018-05-08 12:31:51 +02:00
|
|
|
Dir: "pkg/datastore/migrations/" + driver, // TODO: Move to bindata
|
2017-01-25 15:17:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
migrate.SetTable("migrations")
|
2017-01-25 20:01:02 +01:00
|
|
|
|
2018-04-25 13:05:29 +02:00
|
|
|
n, err := migrate.Exec(dbx.DB, driver, migrations, migrate.Up)
|
2017-01-25 16:19:07 +01:00
|
|
|
|
2017-01-25 15:17:24 +01:00
|
|
|
if err != nil {
|
|
|
|
log.Fatal("Database migrations failed: ", err)
|
|
|
|
}
|
|
|
|
|
2017-01-25 16:19:07 +01:00
|
|
|
if n > 0 {
|
|
|
|
log.Printf("Applied %d database migrations!\n", n)
|
|
|
|
}
|
2017-01-25 15:17:24 +01:00
|
|
|
}
|