Files
HellreigN/backend/internal/storage/sqlite.go
T
d3m0k1d a4b7024bb8
ci-agent / build (push) Failing after 5m20s
chore: add default scripts
2026-04-05 06:13:25 +03:00

61 lines
1.4 KiB
Go

package storage
import (
"database/sql"
"fmt"
"log"
"strings"
_ "modernc.org/sqlite"
)
var pragmas = map[string]string{
`journal_mode`: `wal`,
`synchronous`: `normal`,
`busy_timeout`: `30000`,
}
func buildSqliteDsn(path string, pragmas map[string]string) string {
pragmastrs := make([]string, len(pragmas))
i := 0
for k, v := range pragmas {
pragmastrs[i] = (fmt.Sprintf(`pragma=%s(%s)`, k, v))
i++
}
return path + "?" + "mode=rwc&" + strings.Join(pragmastrs, "&")
}
func Open(path string) (*sql.DB, error) {
dsn := buildSqliteDsn(path, pragmas)
db, err := sql.Open("sqlite", dsn)
if err != nil {
return nil, err
}
// Run migrations
if _, err := db.Exec(CreateSqlite); err != nil {
return nil, fmt.Errorf("migrate: %w", err)
}
// Migration: add is_active column if it doesn't exist
if _, err := db.Exec(AddIsActiveColumn); err != nil {
log.Printf("[sqlite] WARNING: failed to add is_active column: %v", err)
} else {
log.Println("[sqlite] is_active column migration applied")
}
// Create scripts table if not exists
if _, err := db.Exec(CreateScriptsTable); err != nil {
return nil, fmt.Errorf("migrate scripts: %w", err)
}
// Seed default diagnostic scripts
if _, err := db.Exec(SeedDefaultScripts); err != nil {
log.Printf("[sqlite] WARNING: failed to seed default scripts: %v", err)
} else {
log.Println("[sqlite] default scripts seeded successfully")
}
return db, nil
}