diff --git a/common/database/driver.go b/common/database/driver.go index eac8340c..e8184f59 100644 --- a/common/database/driver.go +++ b/common/database/driver.go @@ -17,6 +17,12 @@ import ( func openerFor(driver string) (func(string) gorm.Dialector, error) { open, ok := opens[driver] if !ok { + // sqlite3 is the driver people reach for first, and the one a default + // build leaves out. Say how to get it rather than only what is missing. + if driver == "sqlite3" { + return nil, fmt.Errorf("database driver %q is not in this build, rebuild with -tags sqlite3 (this build supports %s)", + driver, strings.Join(supportedDrivers(), ", ")) + } return nil, fmt.Errorf("unsupported database driver %q, this build supports %s", driver, strings.Join(supportedDrivers(), ", ")) } diff --git a/common/database/driver_nosqlite_test.go b/common/database/driver_nosqlite_test.go new file mode 100644 index 00000000..2d14d52f --- /dev/null +++ b/common/database/driver_nosqlite_test.go @@ -0,0 +1,20 @@ +//go:build !sqlite3 + +package database + +import ( + "strings" + "testing" +) + +// A default build has no sqlite3, and a config naming it is the usual first +// run. The error has to say how to get the driver, not only that it is missing. +func TestOpenerForTellsHowToGetSqliteInADefaultBuild(t *testing.T) { + _, err := openerFor("sqlite3") + if err == nil { + t.Fatal("sqlite3 was accepted by a build without the sqlite3 tag") + } + if !strings.Contains(err.Error(), "-tags sqlite3") { + t.Errorf("error does not say how to enable sqlite3: %s", err) + } +}