refactor(internal/storage): generalization and deduplication
This commit is contained in:
@@ -2,55 +2,59 @@ package storage
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
_ "modernc.org/sqlite"
|
_ "modernc.org/sqlite"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateTables() error {
|
const (
|
||||||
// Requests DB
|
DBDir = "/var/lib/banforge/"
|
||||||
db_r, err := sql.Open("sqlite",
|
ReqDBPath = DBDir + "requests.db"
|
||||||
"/var/lib/banforge/requests.db?"+
|
banDBPath = DBDir + "bans.db"
|
||||||
"mode=rwc&"+
|
)
|
||||||
"_pragma=journal_mode(WAL)&"+
|
|
||||||
"_pragma=busy_timeout(30000)&"+
|
|
||||||
"_pragma=synchronous(NORMAL)")
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to open requests db: %w", err)
|
|
||||||
}
|
|
||||||
defer func() {
|
|
||||||
err = db_r.Close()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
_, err = db_r.Exec(CreateRequestsTable)
|
var pragmas = map[string]string{
|
||||||
if err != nil {
|
`journal_mode`: `wal`,
|
||||||
return fmt.Errorf("failed to create requests table: %w", err)
|
`synchronous`: `normal`,
|
||||||
}
|
`busy_timeout`: `30000`,
|
||||||
|
// also consider these
|
||||||
// Bans DB
|
// `temp_store`: `memory`,
|
||||||
db_b, err := sql.Open("sqlite",
|
// `cache_size`: `1000000000`,
|
||||||
"/var/lib/banforge/bans.db?"+
|
}
|
||||||
"mode=rwc&"+
|
|
||||||
"_pragma=journal_mode(WAL)&"+
|
func buildSqliteDsn(path string, pragmas map[string]string) string {
|
||||||
"_pragma=busy_timeout(30000)&"+
|
pragmastrs := make([]string, len(pragmas))
|
||||||
"_pragma=synchronous(FULL)")
|
i := 0
|
||||||
if err != nil {
|
for k, v := range pragmas {
|
||||||
return fmt.Errorf("failed to open bans db: %w", err)
|
pragmastrs[i] = (fmt.Sprintf(`pragma=%s(%s)`, k, v))
|
||||||
}
|
i++
|
||||||
defer func() {
|
}
|
||||||
err = db_b.Close()
|
return path + "?" + "mode=rwc&" + strings.Join(pragmastrs, "&")
|
||||||
if err != nil {
|
}
|
||||||
fmt.Println(err)
|
|
||||||
}
|
func initDB(dsn, sqlstr string) (err error) {
|
||||||
}()
|
db, err := sql.Open("sqlite", dsn)
|
||||||
|
if err != nil {
|
||||||
_, err = db_b.Exec(CreateBansTable)
|
return fmt.Errorf("failed to open %q: %w", dsn, err)
|
||||||
if err != nil {
|
}
|
||||||
return fmt.Errorf("failed to create bans table: %w", err)
|
defer func() {
|
||||||
}
|
closeErr := db.Close()
|
||||||
fmt.Println("Tables created successfully!")
|
if closeErr != nil {
|
||||||
return nil
|
err = errors.Join(err, fmt.Errorf("failed to close %q: %w", dsn, closeErr))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create table: %w", err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateTables() (err error) {
|
||||||
|
// Requests DB
|
||||||
|
err1 := initDB(buildSqliteDsn(ReqDBPath, pragmas), CreateRequestsTable)
|
||||||
|
err2 := initDB(buildSqliteDsn(banDBPath, pragmas), CreateBansTable)
|
||||||
|
|
||||||
|
return errors.Join(err1, err2)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user