fix🐛: tell a default build how to get the sqlite3 driver

A default build does not include sqlite3, and a config that names it stopped
with "unsupported database driver "sqlite3", this build supports mysql,
postgres, sqlserver". That says what is missing but not what to do about it.

For sqlite3 specifically, say to rebuild with -tags sqlite3. The test runs
only in a build without the tag, and fails without the hint.
This commit is contained in:
zhangwenjian
2026-10-02 09:47:13 +08:00
parent fb5a725a24
commit 2ec6cbdde8
2 changed files with 26 additions and 0 deletions
+6
View File
@@ -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(), ", "))
}
+20
View File
@@ -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)
}
}