/* * Copyright 2026 Oleg Borodin * * This work is published and licensed under a Creative Commons * Attribution-NonCommercial-NoDerivatives 4.0 International License. * * Distribution of this work is permitted, but commercial use and * modifications are strictly prohibited. */ package maindb import ( "fmt" "path/filepath" "mstore/app/logger" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) type Database struct { datapath string log *logger.Logger db *sqlx.DB } func NewDatabase(datapath string) *Database { return &Database{ datapath: datapath, log: logger.NewLoggerWithSubject("maindb"), } } func (db *Database) OpenDatabase() error { var err error dbPath := filepath.Join(db.datapath, "mstore.db") db.db, err = sqlx.Open("sqlite3", fmt.Sprintf("%s?cache=shared&mode=rwc&_journal_mode=WAL", dbPath)) if err != nil { return fmt.Errorf("Open database error: %v", err) } err = db.db.Ping() if err != nil { return fmt.Errorf("Ping database error: %v", err) } return err } func (db *Database) InitDatabase() error { var err error _, err = db.db.Exec(schema) if err != nil { return fmt.Errorf("Init database error: %v", err) } return err }