aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2018-08-01 20:28:45 -0700
committerGravatar Frédéric Guillot <fred@miniflux.net>2018-08-01 20:28:45 -0700
commitcf03e0e33859b213f1d7e55b300a074eea107100 (patch)
tree3b88987c42c75b946c4e4b8eeb71fa2359bfe79d
parent17054b396eff571f49812074024cb9db2e098bdc (diff)
Create database package (refactoring)
-rw-r--r--cli/cli.go16
-rw-r--r--config/config.go10
-rw-r--r--daemon/daemon.go1
-rw-r--r--database/database.go25
-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.go2
-rw-r--r--main.go2
-rw-r--r--sql/doc.go10
-rw-r--r--storage/storage.go21
30 files changed, 61 insertions, 54 deletions
diff --git a/cli/cli.go b/cli/cli.go
index 4f5417c..f4014db 100644
--- a/cli/cli.go
+++ b/cli/cli.go
@@ -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(&currentVersion)
+ db.QueryRow(`select version from schema_version`).Scan(&currentVersion)
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"))
diff --git a/main.go b/main.go
index 951329a..44f38db 100644
--- a/main.go
+++ b/main.go
@@ -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}
}