4290ee3455
- Replace mattn/go-sqlite3 with modernc.org/sqlite (pure-Go, no CGO required) - Update GoReleaser config to disable CGO for ARM64 builds - Change driver name from 'sqlite3' to 'sqlite' in all sql.Open calls - Enables successful cross-compilation for ARM64 without cross-compiler toolchain - All tests passing with new driver
49 lines
897 B
Go
49 lines
897 B
Go
package sqlite
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
type Database struct {
|
|
conn *sql.DB
|
|
}
|
|
|
|
func NewDatabase(dbPath string) (*Database, error) {
|
|
dir := filepath.Dir(dbPath)
|
|
if dir != "." && dir != ":" {
|
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
return nil, fmt.Errorf("failed to create data directory: %w", err)
|
|
}
|
|
}
|
|
|
|
conn, err := sql.Open("sqlite", dbPath)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to open database: %w", err)
|
|
}
|
|
|
|
conn.SetMaxOpenConns(1)
|
|
|
|
if err := conn.Ping(); err != nil {
|
|
return nil, fmt.Errorf("failed to ping database: %w", err)
|
|
}
|
|
|
|
if err := RunMigrations(conn); err != nil {
|
|
return nil, fmt.Errorf("failed to run migrations: %w", err)
|
|
}
|
|
|
|
return &Database{conn: conn}, nil
|
|
}
|
|
|
|
func (db *Database) Close() error {
|
|
return db.conn.Close()
|
|
}
|
|
|
|
func (db *Database) Conn() *sql.DB {
|
|
return db.conn
|
|
}
|