readysite / pkg / database / engines / local.go
718 B
local.go
package engines

import (
	"database/sql"
	"log"

	"github.com/readysite/readysite/pkg/database"
	_ "github.com/tursodatabase/go-libsql"
)

// NewLocal creates a new local file database engine
//
// Example:
//
//	engine := engines.NewLocal("./data/app.db")
//	db, err := engine.Open(
func NewLocal(path string) *database.Database {
	// Use file: prefix for local file databases
	// WAL mode and busy timeout are set for better concurrency
	dsn := "file:" + path + "?_journal_mode=WAL&_busy_timeout=5000"

	db, err := sql.Open("libsql", dsn)
	if err != nil {
		log.Fatal("Failed to open database:", err)
	}

	// libSQL/SQLite handles concurrency internally
	db.SetMaxOpenConns(1)

	return &database.Database{DB: db}
}
← Back