From f86ddee74e14b4fb1a8247b1432767b481b35119 Mon Sep 17 00:00:00 2001 From: KeitaShimura Date: Sun, 1 Mar 2026 02:16:46 +0900 Subject: [PATCH] fix(sqlite3): support relative path for dbname --- drivers/sqlboiler-sqlite3/driver/sqlite3.go | 10 +++- .../sqlboiler-sqlite3/driver/sqlite3_test.go | 53 ++++++++++++++----- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/drivers/sqlboiler-sqlite3/driver/sqlite3.go b/drivers/sqlboiler-sqlite3/driver/sqlite3.go index 275f5613..f9d3a62e 100644 --- a/drivers/sqlboiler-sqlite3/driver/sqlite3.go +++ b/drivers/sqlboiler-sqlite3/driver/sqlite3.go @@ -7,6 +7,7 @@ import ( "encoding/base64" "fmt" "io/fs" + "path/filepath" "strings" _ "modernc.org/sqlite" @@ -74,6 +75,13 @@ func (s SQLiteDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e blacklist, _ := config.StringSlice(drivers.ConfigBlacklist) concurrency := config.DefaultInt(drivers.ConfigConcurrency, drivers.DefaultConcurrency) + if !filepath.IsAbs(dbname) { + dbname, err = filepath.Abs(dbname) + if err != nil { + return nil, fmt.Errorf("sqlboiler-sqlite failed to resolve database path: %w", err) + } + } + s.connStr = SQLiteBuildQueryString(dbname) s.configForeignKeys = config.MustForeignKeys(drivers.ConfigForeignKeys) s.dbConn, err = sql.Open("sqlite", s.connStr) @@ -685,4 +693,4 @@ func (SQLiteDriver) Imports() (col importers.Collection, err error) { }, } return col, err -} \ No newline at end of file +} diff --git a/drivers/sqlboiler-sqlite3/driver/sqlite3_test.go b/drivers/sqlboiler-sqlite3/driver/sqlite3_test.go index 831da5fc..1eab77da 100644 --- a/drivers/sqlboiler-sqlite3/driver/sqlite3_test.go +++ b/drivers/sqlboiler-sqlite3/driver/sqlite3_test.go @@ -12,8 +12,8 @@ import ( "testing" "time" - "github.com/stretchr/testify/require" "github.com/aarondl/sqlboiler/v4/drivers" + "github.com/stretchr/testify/require" _ "modernc.org/sqlite" ) @@ -21,6 +21,19 @@ var ( flagOverwriteGolden = flag.Bool("overwrite-golden", false, "Overwrite the golden file with the current execution results") ) +func createSQLiteDB(t *testing.T, path string, sql []byte) { + t.Helper() + out := &bytes.Buffer{} + cmd := exec.Command("sqlite3", path) + cmd.Stdout = out + cmd.Stderr = out + cmd.Stdin = bytes.NewReader(sql) + if err := cmd.Run(); err != nil { + t.Logf("sqlite output:\n%s\n", out.Bytes()) + t.Fatal(err) + } +} + func TestDriver(t *testing.T) { rand.New(rand.NewSource(time.Now().Unix())) b, err := os.ReadFile("testdatabase.sql") @@ -29,19 +42,21 @@ func TestDriver(t *testing.T) { } tmpName := filepath.Join(os.TempDir(), fmt.Sprintf("sqlboiler-sqlite3-%d.sql", rand.Int())) - - out := &bytes.Buffer{} - createDB := exec.Command("sqlite3", tmpName) - createDB.Stdout = out - createDB.Stderr = out - createDB.Stdin = bytes.NewReader(b) - + createSQLiteDB(t, tmpName, b) t.Log("sqlite file:", tmpName) - if err := createDB.Run(); err != nil { - t.Logf("sqlite output:\n%s\n", out.Bytes()) + + cwd, err := os.Getwd() + if err != nil { t.Fatal(err) } - t.Logf("sqlite output:\n%s\n", out.Bytes()) + relName, err := filepath.Rel(cwd, tmpName) + if err != nil { + t.Fatal(err) + } + + localName := fmt.Sprintf("./sqlboiler-sqlite3-local-%d.sql", rand.Int()) + createSQLiteDB(t, localName, b) + t.Cleanup(func() { os.Remove(localName) }) tests := []struct { name string @@ -49,12 +64,26 @@ func TestDriver(t *testing.T) { goldenJson string }{ { - name: "default", + name: "absolute_path", config: drivers.Config{ "dbname": tmpName, }, goldenJson: "sqlite3.golden.json", }, + { + name: "relative_path", + config: drivers.Config{ + "dbname": relName, + }, + goldenJson: "sqlite3.golden.json", + }, + { + name: "relative_path_dot_slash", + config: drivers.Config{ + "dbname": localName, + }, + goldenJson: "sqlite3.golden.json", + }, } for _, tt := range tests {