From 59bcc1fa520e7a191af27514bb467563399f0daf Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 16 Oct 2022 14:19:22 +0200 Subject: [PATCH] Add --sqlite option (#4841) --- cmd/config.go | 2 +- cmd/flags.go | 3 +++ cmd/root.go | 2 ++ cmd/setup.go | 4 ++++ server/db/db.go | 3 ++- 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cmd/config.go b/cmd/config.go index b111daa88..963ad4798 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -38,7 +38,7 @@ var conf = config{ }, Database: dbConfig{ Type: "sqlite", - Dsn: "~/.evcc/evcc.db?_pragma=busy_timeout(5000)", + Dsn: "~/.evcc/evcc.db", }, } diff --git a/cmd/flags.go b/cmd/flags.go index b543e1479..74440a716 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -8,6 +8,9 @@ import ( ) const ( + flagSqlite = "sqlite" + flagSqliteDescription = "Sqlite database file" + flagHeaders = "log-headers" flagHeadersDescription = "Log headers" diff --git a/cmd/root.go b/cmd/root.go index 56e7763d4..72c398a2b 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -53,6 +53,8 @@ func init() { rootCmd.PersistentFlags().Bool(flagHeaders, false, flagHeadersDescription) + rootCmd.PersistentFlags().String(flagSqlite, "", flagSqliteDescription) + // config file options rootCmd.PersistentFlags().StringP("log", "l", "info", "Log level (fatal, error, warn, info, debug, trace)") bindP(rootCmd, "log") diff --git a/cmd/setup.go b/cmd/setup.go index 0d5a735b1..71402298e 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -85,6 +85,10 @@ func configureEnvironment(cmd *cobra.Command, conf config) (err error) { // setup persistence if err == nil && conf.Database.Dsn != "" { + if flag := cmd.Flags().Lookup(flagSqlite); flag.Changed { + conf.Database.Type = "sqlite" + conf.Database.Dsn = flag.Value.String() + } err = configureDatabase(conf.Database) } diff --git a/server/db/db.go b/server/db/db.go index 3f57970b6..539b5d752 100644 --- a/server/db/db.go +++ b/server/db/db.go @@ -26,7 +26,8 @@ func New(driver, dsn string) (*gorm.DB, error) { if err := os.MkdirAll(filepath.Dir(file), os.ModePerm); err != nil { return nil, err } - dialect = sqlite.Open(file) + // avoid busy errors + dialect = sqlite.Open(file + "?_pragma=busy_timeout(5000)") // case "postgres": // dialect = postgres.Open(dsn) // case "mysql":