diff options
author | Frédéric Guillot <fred@miniflux.net> | 2018-08-01 20:28:45 -0700 |
---|---|---|
committer | Frédéric Guillot <fred@miniflux.net> | 2018-08-01 20:28:45 -0700 |
commit | cf03e0e33859b213f1d7e55b300a074eea107100 (patch) | |
tree | 3b88987c42c75b946c4e4b8eeb71fa2359bfe79d | |
parent | 17054b396eff571f49812074024cb9db2e098bdc (diff) |
Create database package (refactoring)
-rw-r--r-- | cli/cli.go | 16 | ||||
-rw-r--r-- | config/config.go | 10 | ||||
-rw-r--r-- | daemon/daemon.go | 1 | ||||
-rw-r--r-- | database/database.go | 25 | ||||
-rw-r--r-- | database/migration.go (renamed from storage/migration.go) | 26 | ||||
-rw-r--r-- | database/sql.go (renamed from sql/sql.go) | 2 | ||||
-rw-r--r-- | database/sql/schema_version_1.sql (renamed from sql/schema_version_1.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_10.sql (renamed from sql/schema_version_10.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_11.sql (renamed from sql/schema_version_11.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_12.sql (renamed from sql/schema_version_12.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_13.sql (renamed from sql/schema_version_13.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_14.sql (renamed from sql/schema_version_14.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_15.sql (renamed from sql/schema_version_15.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_16.sql (renamed from sql/schema_version_16.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_17.sql (renamed from sql/schema_version_17.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_18.sql (renamed from sql/schema_version_18.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_19.sql (renamed from sql/schema_version_19.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_2.sql (renamed from sql/schema_version_2.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_20.sql (renamed from sql/schema_version_20.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_3.sql (renamed from sql/schema_version_3.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_4.sql (renamed from sql/schema_version_4.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_5.sql (renamed from sql/schema_version_5.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_6.sql (renamed from sql/schema_version_6.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_7.sql (renamed from sql/schema_version_7.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_8.sql (renamed from sql/schema_version_8.sql) | 0 | ||||
-rw-r--r-- | database/sql/schema_version_9.sql (renamed from sql/schema_version_9.sql) | 0 | ||||
-rw-r--r-- | generate.go | 2 | ||||
-rw-r--r-- | main.go | 2 | ||||
-rw-r--r-- | sql/doc.go | 10 | ||||
-rw-r--r-- | storage/storage.go | 21 |
30 files changed, 61 insertions, 54 deletions
@@ -10,6 +10,7 @@ import ( "github.com/miniflux/miniflux/config" "github.com/miniflux/miniflux/daemon" + "github.com/miniflux/miniflux/database" "github.com/miniflux/miniflux/logger" "github.com/miniflux/miniflux/storage" "github.com/miniflux/miniflux/version" @@ -33,10 +34,13 @@ func Parse() { logger.EnableDebug() } - store := storage.NewStorage( - cfg.DatabaseURL(), - cfg.DatabaseMaxConnections(), - ) + db, err := database.NewConnectionPool(cfg.DatabaseURL(), cfg.DatabaseMinConns(), cfg.DatabaseMaxConns()) + if err != nil { + logger.Fatal("Unable to connect to the database: %v", err) + } + defer db.Close() + + store := storage.NewStorage(db) if *flagInfo { info() @@ -49,7 +53,7 @@ func Parse() { } if *flagMigrate { - store.Migrate() + database.Migrate(db) return } @@ -75,7 +79,7 @@ func Parse() { // Run migrations and start the deamon. if cfg.RunMigrations() { - store.Migrate() + database.Migrate(db) } // Create admin user and start the deamon. diff --git a/config/config.go b/config/config.go index 4cba789..580f01d 100644 --- a/config/config.go +++ b/config/config.go @@ -20,6 +20,7 @@ const ( defaultPollingFrequency = 60 defaultBatchSize = 10 defaultDatabaseMaxConns = 20 + defaultDatabaseMinConns = 1 defaultListenAddr = "127.0.0.1:8080" defaultCertFile = "" defaultKeyFile = "" @@ -119,11 +120,16 @@ func (c *Config) DatabaseURL() string { return value } -// DatabaseMaxConnections returns the number of maximum database connections. -func (c *Config) DatabaseMaxConnections() int { +// DatabaseMaxConns returns the maximum number of database connections. +func (c *Config) DatabaseMaxConns() int { return c.getInt("DATABASE_MAX_CONNS", defaultDatabaseMaxConns) } +// DatabaseMinConns returns the minimum number of database connections. +func (c *Config) DatabaseMinConns() int { + return c.getInt("DATABASE_MIN_CONNS", defaultDatabaseMinConns) +} + // ListenAddr returns the listen address for the HTTP server. func (c *Config) ListenAddr() string { if port := os.Getenv("PORT"); port != "" { diff --git a/daemon/daemon.go b/daemon/daemon.go index cdd81ef..de91d71 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -59,6 +59,5 @@ func Run(cfg *config.Config, store *storage.Storage) { defer cancel() server.Shutdown(ctx) - store.Close() logger.Info("Server gracefully stopped") } diff --git a/database/database.go b/database/database.go new file mode 100644 index 0000000..42f2292 --- /dev/null +++ b/database/database.go @@ -0,0 +1,25 @@ +// Copyright 2018 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package database + +import ( + "database/sql" + + // Postgresql driver import + _ "github.com/lib/pq" +) + +// NewConnectionPool configures the database connection pool. +func NewConnectionPool(dsn string, minConnections, maxConnections int) (*sql.DB, error) { + db, err := sql.Open("postgres", dsn) + if err != nil { + return nil, err + } + + db.SetMaxOpenConns(maxConnections) + db.SetMaxIdleConns(minConnections) + + return db, nil +} diff --git a/storage/migration.go b/database/migration.go index e78f1d5..e348e40 100644 --- a/storage/migration.go +++ b/database/migration.go @@ -1,23 +1,23 @@ -// Copyright 2017 Frédéric Guillot. All rights reserved. +// Copyright 2018 Frédéric Guillot. All rights reserved. // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. -package storage +package database import ( + "database/sql" "fmt" "strconv" "github.com/miniflux/miniflux/logger" - "github.com/miniflux/miniflux/sql" ) const schemaVersion = 20 -// Migrate run database migrations. -func (s *Storage) Migrate() { +// Migrate executes database migrations. +func Migrate(db *sql.DB) { var currentVersion int - s.db.QueryRow(`select version from schema_version`).Scan(¤tVersion) + db.QueryRow(`select version from schema_version`).Scan(¤tVersion) fmt.Println("Current schema version:", currentVersion) fmt.Println("Latest schema version:", schemaVersion) @@ -25,31 +25,31 @@ func (s *Storage) Migrate() { for version := currentVersion + 1; version <= schemaVersion; version++ { fmt.Println("Migrating to version:", version) - tx, err := s.db.Begin() + tx, err := db.Begin() if err != nil { - logger.Fatal("[Storage:Migrate] %v", err) + logger.Fatal("[Migrate] %v", err) } - rawSQL := sql.SqlMap["schema_version_"+strconv.Itoa(version)] + rawSQL := SqlMap["schema_version_"+strconv.Itoa(version)] // fmt.Println(rawSQL) _, err = tx.Exec(rawSQL) if err != nil { tx.Rollback() - logger.Fatal("[Storage:Migrate] %v", err) + logger.Fatal("[Migrate] %v", err) } if _, err := tx.Exec(`delete from schema_version`); err != nil { tx.Rollback() - logger.Fatal("[Storage:Migrate] %v", err) + logger.Fatal("[Migrate] %v", err) } if _, err := tx.Exec(`insert into schema_version (version) values($1)`, version); err != nil { tx.Rollback() - logger.Fatal("[Storage:Migrate] %v", err) + logger.Fatal("[Migrate] %v", err) } if err := tx.Commit(); err != nil { - logger.Fatal("[Storage:Migrate] %v", err) + logger.Fatal("[Migrate] %v", err) } } } diff --git a/sql/sql.go b/database/sql.go index 60af4c5..a9468ec 100644 --- a/sql/sql.go +++ b/database/sql.go @@ -1,6 +1,6 @@ // Code generated by go generate; DO NOT EDIT. -package sql +package database var SqlMap = map[string]string{ "schema_version_1": `create table schema_version ( diff --git a/sql/schema_version_1.sql b/database/sql/schema_version_1.sql index cb7c213..cb7c213 100644 --- a/sql/schema_version_1.sql +++ b/database/sql/schema_version_1.sql diff --git a/sql/schema_version_10.sql b/database/sql/schema_version_10.sql index abd26d8..abd26d8 100644 --- a/sql/schema_version_10.sql +++ b/database/sql/schema_version_10.sql diff --git a/sql/schema_version_11.sql b/database/sql/schema_version_11.sql index 79f08d7..79f08d7 100644 --- a/sql/schema_version_11.sql +++ b/database/sql/schema_version_11.sql diff --git a/sql/schema_version_12.sql b/database/sql/schema_version_12.sql index 34bc9fd..34bc9fd 100644 --- a/sql/schema_version_12.sql +++ b/database/sql/schema_version_12.sql diff --git a/sql/schema_version_13.sql b/database/sql/schema_version_13.sql index c2b5df7..c2b5df7 100644 --- a/sql/schema_version_13.sql +++ b/database/sql/schema_version_13.sql diff --git a/sql/schema_version_14.sql b/database/sql/schema_version_14.sql index bfd7ca2..bfd7ca2 100644 --- a/sql/schema_version_14.sql +++ b/database/sql/schema_version_14.sql diff --git a/sql/schema_version_15.sql b/database/sql/schema_version_15.sql index b5cb386..b5cb386 100644 --- a/sql/schema_version_15.sql +++ b/database/sql/schema_version_15.sql diff --git a/sql/schema_version_16.sql b/database/sql/schema_version_16.sql index e4f6d23..e4f6d23 100644 --- a/sql/schema_version_16.sql +++ b/database/sql/schema_version_16.sql diff --git a/sql/schema_version_17.sql b/database/sql/schema_version_17.sql index b4cc848..b4cc848 100644 --- a/sql/schema_version_17.sql +++ b/database/sql/schema_version_17.sql diff --git a/sql/schema_version_18.sql b/database/sql/schema_version_18.sql index 4b36904..4b36904 100644 --- a/sql/schema_version_18.sql +++ b/database/sql/schema_version_18.sql diff --git a/sql/schema_version_19.sql b/database/sql/schema_version_19.sql index 130ae08..130ae08 100644 --- a/sql/schema_version_19.sql +++ b/database/sql/schema_version_19.sql diff --git a/sql/schema_version_2.sql b/database/sql/schema_version_2.sql index d88b404..d88b404 100644 --- a/sql/schema_version_2.sql +++ b/database/sql/schema_version_2.sql diff --git a/sql/schema_version_20.sql b/database/sql/schema_version_20.sql index 228e162..228e162 100644 --- a/sql/schema_version_20.sql +++ b/database/sql/schema_version_20.sql diff --git a/sql/schema_version_3.sql b/database/sql/schema_version_3.sql index d58e35d..d58e35d 100644 --- a/sql/schema_version_3.sql +++ b/database/sql/schema_version_3.sql diff --git a/sql/schema_version_4.sql b/database/sql/schema_version_4.sql index 988c486..988c486 100644 --- a/sql/schema_version_4.sql +++ b/database/sql/schema_version_4.sql diff --git a/sql/schema_version_5.sql b/database/sql/schema_version_5.sql index dac7937..dac7937 100644 --- a/sql/schema_version_5.sql +++ b/database/sql/schema_version_5.sql diff --git a/sql/schema_version_6.sql b/database/sql/schema_version_6.sql index 6f79ca8..6f79ca8 100644 --- a/sql/schema_version_6.sql +++ b/database/sql/schema_version_6.sql diff --git a/sql/schema_version_7.sql b/database/sql/schema_version_7.sql index f4d2a9c..f4d2a9c 100644 --- a/sql/schema_version_7.sql +++ b/database/sql/schema_version_7.sql diff --git a/sql/schema_version_8.sql b/database/sql/schema_version_8.sql index d86c29b..d86c29b 100644 --- a/sql/schema_version_8.sql +++ b/database/sql/schema_version_8.sql diff --git a/sql/schema_version_9.sql b/database/sql/schema_version_9.sql index 7761724..7761724 100644 --- a/sql/schema_version_9.sql +++ b/database/sql/schema_version_9.sql diff --git a/generate.go b/generate.go index 7b845aa..cba64e3 100644 --- a/generate.go +++ b/generate.go @@ -209,7 +209,7 @@ func main() { generateBinaryBundle("ui/static/bin.go", glob("ui/static/bin/*")) - generateBundle("sql/sql.go", "sql", "SqlMap", glob("sql/*.sql")) + generateBundle("database/sql.go", "database", "SqlMap", glob("database/sql/*.sql")) generateBundle("template/views.go", "template", "templateViewsMap", glob("template/html/*.html")) generateBundle("template/common.go", "template", "templateCommonMap", glob("template/html/common/*.html")) generateBundle("locale/translations.go", "locale", "translations", glob("locale/translations/*.json")) @@ -5,7 +5,7 @@ package main //go:generate go run generate.go -//go:generate gofmt -s -w sql/sql.go +//go:generate gofmt -s -w database/sql.go //go:generate gofmt -s -w ui/static/css.go //go:generate gofmt -s -w ui/static/bin.go //go:generate gofmt -s -w ui/static/js.go diff --git a/sql/doc.go b/sql/doc.go deleted file mode 100644 index 2096efc..0000000 --- a/sql/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2018 Frédéric Guillot. All rights reserved. -// Use of this source code is governed by the MIT license -// that can be found in the LICENSE file. - -/* - -Package sql contains all SQL queries or database schema instructions. - -*/ -package sql diff --git a/storage/storage.go b/storage/storage.go index f7a06b4..19372f0 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -6,10 +6,6 @@ package storage import ( "database/sql" - - // Postgresql driver import - _ "github.com/lib/pq" - "github.com/miniflux/miniflux/logger" ) // Storage handles all operations related to the database. @@ -17,20 +13,7 @@ type Storage struct { db *sql.DB } -// Close closes all database connections. -func (s *Storage) Close() { - s.db.Close() -} - // NewStorage returns a new Storage. -func NewStorage(databaseURL string, maxOpenConns int) *Storage { - db, err := sql.Open("postgres", databaseURL) - if err != nil { - logger.Fatal("[Storage] Unable to connect to the database: %v", err) - } - - db.SetMaxOpenConns(maxOpenConns) - db.SetMaxIdleConns(2) - - return &Storage{db: db} +func NewStorage(db *sql.DB) *Storage { + return &Storage{db} } |