package storage import ( "database/sql" "os" "path/filepath" _ "modernc.org/sqlite" ) type Store struct { db *sql.DB } func OpenSQLite(path string) (*Store, error) { if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { return nil, err } db, err := sql.Open("sqlite", path) if err != nil { return nil, err } if err := migrate(db); err != nil { _ = db.Close() return nil, err } return &Store{db: db}, nil } func (s *Store) Close() error { if s == nil || s.db == nil { return nil } return s.db.Close() } func (s *Store) DB() *sql.DB { if s == nil { return nil } return s.db } func (s *Store) HasTable(name string) (bool, error) { row := s.db.QueryRow(`SELECT COUNT(1) FROM sqlite_master WHERE type = 'table' AND name = ?`, name) var count int if err := row.Scan(&count); err != nil { return false, err } return count > 0, nil }