mirror of
https://github.com/TECHNOFAB11/dbmate.git
synced 2025-12-12 08:00:04 +01:00
Refactor drivers into separate packages (#179)
`dbmate` package was starting to get a bit polluted. This PR migrates each driver into a separate package, with clean separation between each. In addition: * Drivers are now initialized with a URL, avoiding the need to pass `*url.URL` to every method * Sqlite supports a cleaner syntax for relative paths * Driver tests now load their test URL from environment variables Public API of `dbmate` package has not changed (no changes to `main` package).
This commit is contained in:
parent
c907c3f5c6
commit
61771e386d
23 changed files with 1195 additions and 1078 deletions
58
pkg/dbutil/dbutil_test.go
Normal file
58
pkg/dbutil/dbutil_test.go
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
package dbutil_test
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"testing"
|
||||
|
||||
"github.com/amacneil/dbmate/pkg/dbutil"
|
||||
|
||||
_ "github.com/mattn/go-sqlite3" // database/sql driver
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestDatabaseName(t *testing.T) {
|
||||
t.Run("valid", func(t *testing.T) {
|
||||
u := dbutil.MustParseURL("foo://host/dbname?query")
|
||||
name := dbutil.DatabaseName(u)
|
||||
require.Equal(t, "dbname", name)
|
||||
})
|
||||
|
||||
t.Run("empty", func(t *testing.T) {
|
||||
u := dbutil.MustParseURL("foo://host")
|
||||
name := dbutil.DatabaseName(u)
|
||||
require.Equal(t, "", name)
|
||||
})
|
||||
}
|
||||
|
||||
func TestTrimLeadingSQLComments(t *testing.T) {
|
||||
in := "--\n" +
|
||||
"-- foo\n\n" +
|
||||
"-- bar\n\n" +
|
||||
"real stuff\n" +
|
||||
"-- end\n"
|
||||
out, err := dbutil.TrimLeadingSQLComments([]byte(in))
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "real stuff\n-- end\n", string(out))
|
||||
}
|
||||
|
||||
// connect to in-memory sqlite database for testing
|
||||
const sqliteMemoryDB = "file:dbutil.sqlite3?mode=memory&cache=shared"
|
||||
|
||||
func TestQueryColumn(t *testing.T) {
|
||||
db, err := sql.Open("sqlite3", sqliteMemoryDB)
|
||||
require.NoError(t, err)
|
||||
|
||||
val, err := dbutil.QueryColumn(db, "select 'foo_' || val from (select ? as val union select ?)",
|
||||
"hi", "there")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, []string{"foo_hi", "foo_there"}, val)
|
||||
}
|
||||
|
||||
func TestQueryValue(t *testing.T) {
|
||||
db, err := sql.Open("sqlite3", sqliteMemoryDB)
|
||||
require.NoError(t, err)
|
||||
|
||||
val, err := dbutil.QueryValue(db, "select $1 + $2", "5", 2)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "7", val)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue