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 }