-
Release v1.0.0 Stable
released this
2026-05-29 09:57:09 -06:00 | 0 commits to main since this releasev1.0.0
code.nochebuena.dev/einherjar/db-sqlite
Architecture Decisions Resolved
Decision Outcome CGO vs pure-Go driver modernc.org/sqlite— pure Go; cross-compilation works without a C toolchainTx Commit/Rollback context No ctx — honest database/sqlcontract;sql.Txdoes not support per-call contextSingle-writer serialization writeMu sync.Mutexin UnitOfWork — preventsSQLITE_BUSYunder concurrent goroutinesGetExecutor nil guard Explicit if db == nil { return nil }— avoids typed-nil interface pitfallHealth priority LevelDegraded— file-based DB; absence is non-fatal if file is presentWAL default pragma ?_journal=WAL&_timeout=5000&_fk=true— WAL mode improves concurrent reads
API
import "code.nochebuena.dev/einherjar/db-sqlite" // Interfaces type Executor interface { ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row } type Tx interface { Executor Commit() error // no ctx — database/sql limitation Rollback() error } type Provider interface { GetExecutor(ctx context.Context) Executor Begin(ctx context.Context) (Tx, error) Ping(ctx context.Context) error HandleError(err error) error } type Component interface { lifecycle.Component observability.Checkable observability.Identifiable Provider } type UnitOfWork interface { Do(ctx context.Context, fn func(ctx context.Context) error) error } // Config type Config struct { Path string `env:"EINHERJAR_SQLITE_PATH,required"` MaxOpenConns int `env:"EINHERJAR_SQLITE_MAX_OPEN_CONNS" envDefault:"1"` MaxIdleConns int `env:"EINHERJAR_SQLITE_MAX_IDLE_CONNS" envDefault:"1"` Pragmas string `env:"EINHERJAR_SQLITE_PRAGMAS" envDefault:"?_journal=WAL&_timeout=5000&_fk=true"` } func DefaultConfig() Config func (c Config) DSN() string // Constructors func New(logger logging.Logger, cfg Config) Component func NewUnitOfWork(logger logging.Logger, client Provider) UnitOfWork // Package-level error handler (also available as Provider.HandleError) func HandleError(err error) error
Install
go get code.nochebuena.dev/einherjar/db-sqlite@v1.0.0
Dependencies
Module Version Role code.nochebuena.dev/einherjar/contractsv1.0.0 lifecycle.Component,observability.Checkable,logging.Loggercode.nochebuena.dev/einherjar/corev1.0.0 xerrorsmodernc.org/sqlitev1.37.1 Pure-Go SQLite driver (no CGO) Downloads