60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"database/sql"
 | 
						|
	"fmt"
 | 
						|
	"time"
 | 
						|
 | 
						|
	_ "github.com/mattn/go-sqlite3"
 | 
						|
)
 | 
						|
 | 
						|
type DB struct {
 | 
						|
	Ready     bool
 | 
						|
	path      string
 | 
						|
	readConn  *sql.DB
 | 
						|
	writeConn *sql.DB
 | 
						|
}
 | 
						|
 | 
						|
func (db *DB) Open() error {
 | 
						|
	if db.path == "" {
 | 
						|
		return fmt.Errorf("database path not set")
 | 
						|
	}
 | 
						|
 | 
						|
	writeConn, err := sql.Open("sqlite3", db.path+"?_journal=WAL&_synchronous=NORMAL")
 | 
						|
	if err != nil {
 | 
						|
		Error.Printf("%++v", err)
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	writeConn.SetMaxOpenConns(1)
 | 
						|
	writeConn.SetConnMaxIdleTime(30 * time.Second)
 | 
						|
	writeConn.SetConnMaxLifetime(30 * time.Second)
 | 
						|
	db.writeConn = writeConn
 | 
						|
 | 
						|
	readConn, err := sql.Open("sqlite3", db.path+"?mode=ro&_journal=WAL&_synchronous=NORMAL&_mode=ro")
 | 
						|
	if err != nil {
 | 
						|
		Error.Printf("%++v", err)
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	readConn.SetMaxOpenConns(4)
 | 
						|
	readConn.SetConnMaxIdleTime(30 * time.Second)
 | 
						|
	readConn.SetConnMaxLifetime(30 * time.Second)
 | 
						|
	db.readConn = readConn
 | 
						|
 | 
						|
	db.Ready = true
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
func (db *DB) Close() error {
 | 
						|
	err := db.writeConn.Close()
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	err = db.readConn.Close()
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |