Files
zkill-susser/db.go
2026-01-05 12:17:17 +01:00

56 lines
1.0 KiB
Go

package main
import (
"path/filepath"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type DB interface {
DB() *gorm.DB
Raw(sql string, args ...any) *gorm.DB
SaveKillmails(killmails []Killmail) error
}
type DBWrapper struct {
db *gorm.DB
}
var db *DBWrapper
func GetDB() (DB, error) {
if db != nil {
return db, nil
}
var err error
dbFile := filepath.Join("sqlite-latest.sqlite")
gdb, err := gorm.Open(sqlite.Open(dbFile), &gorm.Config{
// SkipDefaultTransaction: true,
PrepareStmt: true,
// Logger: gormlogger.Default.LogMode(gormlogger.Silent),
})
if err != nil {
return nil, err
}
db = &DBWrapper{db: gdb}
return db, nil
}
func (db *DBWrapper) Raw(sql string, args ...any) *gorm.DB {
return db.db.Raw(sql, args...)
}
func (db *DBWrapper) DB() *gorm.DB {
return db.db
}
func (db *DBWrapper) SaveKillmails(killmails []Killmail) error {
return db.db.Session(&gorm.Session{FullSaveAssociations: true}).
Clauses(clause.OnConflict{DoNothing: true}).
CreateInBatches(killmails, 10).Error
}