Files
msw-open-music/pkg/database/database.go
2022-07-20 18:16:44 +08:00

64 lines
1.0 KiB
Go

package database
import (
"database/sql"
"sync"
_ "github.com/mattn/go-sqlite3"
)
type Database struct {
sqlConn *sql.DB
stmt *Stmt
singleThreadLock SingleThreadLock
}
func NewSingleThreadLock(enabled bool) SingleThreadLock {
return SingleThreadLock{
lock: sync.Mutex{},
enabled: enabled,
}
}
type SingleThreadLock struct {
lock sync.Mutex
enabled bool
}
func (stl *SingleThreadLock) Lock() {
if stl.enabled {
stl.lock.Lock()
}
}
func (stl *SingleThreadLock) Unlock() {
if stl.enabled {
stl.lock.Unlock()
}
}
func NewDatabase(dbName string, singleThread bool) (*Database, error) {
var err error
// open database
sqlConn, err := sql.Open("sqlite3", dbName)
if err != nil {
return nil, err
}
// prepare statement
stmt, err := NewPreparedStatement(sqlConn)
if err != nil {
return nil, err
}
// new database
database := &Database{
sqlConn: sqlConn,
stmt: stmt,
singleThreadLock: NewSingleThreadLock(singleThread),
}
return database, nil
}