//go:generate go run gen_init_sql.go package db import ( "database/sql" "fmt" "lishwist/env" "github.com/Teajey/sqlstore" _ "github.com/glebarez/go-sqlite" ) var database *sql.DB func Open() error { db, err := sql.Open("sqlite", env.DatabaseFile) if err != nil { return err } database = db return nil } func Init() error { _, err := database.Exec(InitQuery) if err != nil { return err } return nil } func NewSessionStore() (*sqlstore.Store, error) { deleteStmt, err := database.Prepare("DELETE FROM session WHERE id = ?;") if err != nil { return nil, fmt.Errorf("Failed to prepare delete statement: %w", err) } insertStmt, err := database.Prepare("INSERT INTO session (value) VALUES (?);") if err != nil { return nil, fmt.Errorf("Failed to prepare insert statement: %w", err) } selectStmt, err := database.Prepare("SELECT value FROM session WHERE id = ?;") if err != nil { return nil, fmt.Errorf("Failed to prepare select statement: %w", err) } updateStmt, err := database.Prepare("UPDATE session SET value = ?2 WHERE id = ?1;") if err != nil { return nil, fmt.Errorf("Failed to prepare update statement: %w", err) } s := sqlstore.NewSqlStore(database, sqlstore.Statements{ Delete: deleteStmt, Insert: insertStmt, Select: selectStmt, Update: updateStmt, }, []byte(env.SessionSecret)) return s, nil }