mirror of
https://github.com/pressly/goose.git
synced 2025-05-31 11:42:04 +00:00
Merged in jkl1337/goose/sqlite3 (pull request #27)
Add core sqlite3 support using mattn/go-sqlite3
This commit is contained in:
commit
ff8c5c2a42
@ -181,7 +181,7 @@ goose will expand environment variables in the `open` element. For an example, s
|
|||||||
## Other Drivers
|
## Other Drivers
|
||||||
goose knows about some common SQL drivers, but it can still be used to run Go-based migrations with any driver supported by database/sql. An import path and known dialect are required.
|
goose knows about some common SQL drivers, but it can still be used to run Go-based migrations with any driver supported by database/sql. An import path and known dialect are required.
|
||||||
|
|
||||||
Currently, available dialects are: "postgres" or "mysql"
|
Currently, available dialects are: "postgres", "mysql", or "sqlite3"
|
||||||
|
|
||||||
To run Go-based migrations with another driver, specify its import path and dialect, as shown below.
|
To run Go-based migrations with another driver, specify its import path and dialect, as shown below.
|
||||||
|
|
||||||
|
@ -95,6 +95,10 @@ func newDBDriver(name, open string) DBDriver {
|
|||||||
case "mymysql":
|
case "mymysql":
|
||||||
d.Import = "github.com/ziutek/mymysql/godrv"
|
d.Import = "github.com/ziutek/mymysql/godrv"
|
||||||
d.Dialect = &MySqlDialect{}
|
d.Dialect = &MySqlDialect{}
|
||||||
|
|
||||||
|
case "sqlite3":
|
||||||
|
d.Import = "github.com/mattn/go-sqlite3"
|
||||||
|
d.Dialect = &Sqlite3Dialect{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return d
|
return d
|
||||||
|
@ -2,6 +2,7 @@ package goose
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"github.com/mattn/go-sqlite3"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SqlDialect abstracts the details of specific SQL dialects
|
// SqlDialect abstracts the details of specific SQL dialects
|
||||||
@ -19,6 +20,8 @@ func dialectByName(d string) SqlDialect {
|
|||||||
return &PostgresDialect{}
|
return &PostgresDialect{}
|
||||||
case "mysql":
|
case "mysql":
|
||||||
return &MySqlDialect{}
|
return &MySqlDialect{}
|
||||||
|
case "sqlite3":
|
||||||
|
return &Sqlite3Dialect{}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -89,3 +92,32 @@ func (m *MySqlDialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
|
|||||||
|
|
||||||
return rows, err
|
return rows, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////
|
||||||
|
// sqlite3
|
||||||
|
////////////////////////////
|
||||||
|
|
||||||
|
type Sqlite3Dialect struct{}
|
||||||
|
|
||||||
|
func (m *Sqlite3Dialect) createVersionTableSql() string {
|
||||||
|
return `CREATE TABLE goose_db_version (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
version_id INTEGER NOT NULL,
|
||||||
|
is_applied INTEGER NOT NULL,
|
||||||
|
tstamp TEXT DEFAULT (datetime('now'))
|
||||||
|
);`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Sqlite3Dialect) insertVersionSql() string {
|
||||||
|
return "INSERT INTO goose_db_version (version_id, is_applied) VALUES (?, ?);"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Sqlite3Dialect) dbVersionQuery(db *sql.DB) (*sql.Rows, error) {
|
||||||
|
rows, err := db.Query("SELECT version_id, is_applied from goose_db_version ORDER BY id DESC")
|
||||||
|
|
||||||
|
switch err.(type) {
|
||||||
|
case sqlite3.Error:
|
||||||
|
return nil, ErrTableDoesNotExist
|
||||||
|
}
|
||||||
|
return rows, err
|
||||||
|
}
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
_ "github.com/ziutek/mymysql/godrv"
|
_ "github.com/ziutek/mymysql/godrv"
|
||||||
|
_ "github.com/mattn/go-sqlite3"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user