mirror of
https://github.com/TECHNOFAB11/dbmate.git
synced 2025-12-12 16:10:03 +01:00
`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).
58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
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)
|
|
}
|