refactor(database): clean-up queries (#569)

* fix(database): build WHERE using squirrel

* flip LIKEs

* change sql.LevelReadCommitted

* feat(db): add missing commits

* implement single query for releases

* cleanup

* feat(releases): properly handle limit for Find

* feat(releases): make dynamic ILike helper

* feat(releases): check for empty ReleaseActionStatus

* add values as sql.NullX
* check if ID is non 0

* feat(releases): improve find
This commit is contained in:
Kyle Sanderson 2022-12-30 14:53:45 -08:00 committed by GitHub
parent e6c48a5228
commit 19b3899a5c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 206 additions and 168 deletions

View file

@ -14,6 +14,8 @@ import (
"github.com/rs/zerolog"
)
var databaseDriver = "sqlite"
type DB struct {
log zerolog.Logger
handler *sql.DB
@ -37,6 +39,7 @@ func NewDB(cfg *domain.Config, log logger.Logger) (*DB, error) {
switch cfg.DatabaseType {
case "sqlite":
databaseDriver = "sqlite"
db.Driver = "sqlite"
db.DSN = dataSourceName(cfg.ConfigPath, "autobrr.db")
case "postgres":
@ -45,6 +48,7 @@ func NewDB(cfg *domain.Config, log logger.Logger) (*DB, error) {
}
db.DSN = fmt.Sprintf("postgres://%v:%v@%v:%d/%v?sslmode=disable", cfg.PostgresUser, cfg.PostgresPass, cfg.PostgresHost, cfg.PostgresPort, cfg.PostgresDatabase)
db.Driver = "postgres"
databaseDriver = "postgres"
default:
return nil, errors.New("unsupported database: %v", cfg.DatabaseType)
}
@ -106,3 +110,17 @@ type Tx struct {
*sql.Tx
handler *DB
}
type ILikeDynamic interface {
ToSql() (sql string, args []interface{}, err error)
}
// ILike is a wrapper for sq.Like and sq.ILike
// SQLite does not support ILike but postgres does so this checks what database is being used
func ILike(col string, val string) ILikeDynamic {
if databaseDriver == "sqlite" {
return sq.Like{col: val}
}
return sq.ILike{col: val}
}