Refactoring + disable cleanup tests for sqlite

This commit is contained in:
viktorstrate
2021-11-06 15:41:25 +01:00
parent 18b83dbbea
commit 12085698c8
13 changed files with 72 additions and 44 deletions

View File

@@ -72,8 +72,8 @@ func GetSqliteAddress(path string) (*url.URL, error) {
func ConfigureDatabase(config *gorm.Config) (*gorm.DB, error) {
var databaseDialect gorm.Dialector
switch drivers.DatabaseDriver() {
case drivers.DatabaseDriverMysql:
switch drivers.DatabaseDriverFromEnv() {
case drivers.MYSQL:
mysqlAddress, err := GetMysqlAddress(utils.EnvMysqlURL.GetValue())
if err != nil {
return nil, err
@@ -81,7 +81,7 @@ func ConfigureDatabase(config *gorm.Config) (*gorm.DB, error) {
log.Printf("Connecting to MYSQL database: %s", mysqlAddress)
databaseDialect = gorm_mysql.Open(mysqlAddress)
case drivers.DatabaseDriverSqlite:
case drivers.SQLITE:
sqliteAddress, err := GetSqliteAddress(utils.EnvSqlitePath.GetValue())
if err != nil {
return nil, err
@@ -89,7 +89,7 @@ func ConfigureDatabase(config *gorm.Config) (*gorm.DB, error) {
log.Printf("Opening SQLITE database: %s", sqliteAddress)
databaseDialect = sqlite.Open(sqliteAddress.String())
case drivers.DatabaseDriverPostgres:
case drivers.POSTGRES:
postgresAddress, err := GetPostgresAddress(utils.EnvPostgresURL.GetValue())
if err != nil {
return nil, err
@@ -104,7 +104,7 @@ func ConfigureDatabase(config *gorm.Config) (*gorm.DB, error) {
}
// Manually enable foreign keys for sqlite, as this isn't done by default
if drivers.DatabaseDriver() == drivers.DatabaseDriverSqlite {
if drivers.SQLITE.MatchDatabase(db) {
db.Exec("PRAGMA foreign_keys = ON")
}
@@ -199,9 +199,9 @@ func MigrateDatabase(db *gorm.DB) error {
func ClearDatabase(db *gorm.DB) error {
err := db.Transaction(func(tx *gorm.DB) error {
db_driver := drivers.DatabaseDriver()
db_driver := drivers.DatabaseDriverFromEnv()
if db_driver == drivers.DatabaseDriverMysql {
if db_driver == drivers.MYSQL {
if err := tx.Exec("SET FOREIGN_KEY_CHECKS = 0;").Error; err != nil {
return err
}
@@ -213,15 +213,15 @@ func ClearDatabase(db *gorm.DB) error {
table := dry_run.Find(model).Statement.Table
switch db_driver {
case drivers.DatabaseDriverPostgres:
case drivers.POSTGRES:
if err := tx.Exec(fmt.Sprintf("TRUNCATE TABLE %s CASCADE", table)).Error; err != nil {
return err
}
case drivers.DatabaseDriverMysql:
case drivers.MYSQL:
if err := tx.Exec(fmt.Sprintf("TRUNCATE TABLE %s", table)).Error; err != nil {
return err
}
case drivers.DatabaseDriverSqlite:
case drivers.SQLITE:
if err := tx.Exec(fmt.Sprintf("DELETE FROM %s", table)).Error; err != nil {
return err
}
@@ -229,7 +229,7 @@ func ClearDatabase(db *gorm.DB) error {
}
if db_driver == drivers.DatabaseDriverMysql {
if db_driver == drivers.MYSQL {
if err := tx.Exec("SET FOREIGN_KEY_CHECKS = 1;").Error; err != nil {
return err
}

View File

@@ -4,32 +4,52 @@ import (
"strings"
"github.com/photoview/photoview/api/utils"
"gorm.io/gorm"
)
// DatabaseDriverType represents the name of a database driver
type DatabaseDriverType string
const (
DatabaseDriverMysql DatabaseDriverType = "mysql"
DatabaseDriverSqlite DatabaseDriverType = "sqlite"
DatabaseDriverPostgres DatabaseDriverType = "postgres"
MYSQL DatabaseDriverType = "mysql"
SQLITE DatabaseDriverType = "sqlite"
POSTGRES DatabaseDriverType = "postgres"
)
func DatabaseDriver() DatabaseDriverType {
func DatabaseDriverFromEnv() DatabaseDriverType {
var driver DatabaseDriverType
driverString := strings.ToLower(utils.EnvDatabaseDriver.GetValue())
switch driverString {
case "mysql":
driver = DatabaseDriverMysql
driver = MYSQL
case "sqlite":
driver = DatabaseDriverSqlite
driver = SQLITE
case "postgres":
driver = DatabaseDriverPostgres
driver = POSTGRES
default:
driver = DatabaseDriverMysql
driver = MYSQL
}
return driver
}
func (driver DatabaseDriverType) MatchDatabase(db *gorm.DB) bool {
return db.Dialector.Name() == string(driver)
}
func GetDatabaseDriverType(db *gorm.DB) (driver DatabaseDriverType) {
switch db.Dialector.Name() {
case "mysql":
driver = MYSQL
case "sqlite":
driver = SQLITE
case "postgres":
driver = POSTGRES
default:
driver = MYSQL
}
return
}

View File

@@ -4,6 +4,7 @@ import (
"fmt"
"log"
"github.com/photoview/photoview/api/database/drivers"
"gorm.io/gorm"
)
@@ -22,12 +23,10 @@ func DateExtract(db *gorm.DB, component DateComponent, attribute string) string
var result string
switch db.Dialector.Name() {
case "mysql", "postgres":
switch drivers.GetDatabaseDriverType(db) {
case drivers.MYSQL, drivers.POSTGRES:
result = fmt.Sprintf("EXTRACT(%s FROM %s)", component, attribute)
break
case "sqlite":
case drivers.SQLITE:
var sqliteFormatted string
switch component {
case DateCompYear:
@@ -39,9 +38,8 @@ func DateExtract(db *gorm.DB, component DateComponent, attribute string) string
}
result = fmt.Sprintf("CAST(strftime('%s', %s) AS INTEGER)", sqliteFormatted, attribute)
break
default:
log.Panicf("unsupported database backend: %s", db.Dialector.Name())
log.Panicf("unsupported database backend: %s", drivers.GetDatabaseDriverType(db))
}
return result