d4f839c491
- Add sqlite-simple dependency - Create Sis.Database module with openDatabase (creates parent dir, enables WAL + FK) - Add --db-path CLI option (default data/sis.db) - Format all Haskell sources with fourmolu - Fix hlint suggestions in Sis.Server
26 lines
742 B
Haskell
26 lines
742 B
Haskell
{- | SQLite database support for Sis.
|
|
|
|
Opens (and creates if missing) a SQLite database with WAL journal
|
|
mode and foreign keys enabled.
|
|
-}
|
|
module Sis.Database (
|
|
openDatabase,
|
|
) where
|
|
|
|
import Database.SQLite.Simple qualified as SQL
|
|
import System.Directory (createDirectoryIfMissing)
|
|
import System.FilePath (takeDirectory)
|
|
|
|
{- | Open (or create) a SQLite database at the given path.
|
|
|
|
Enables WAL journal mode for concurrent read performance and
|
|
enables foreign key enforcement.
|
|
-}
|
|
openDatabase :: FilePath -> IO SQL.Connection
|
|
openDatabase path = do
|
|
createDirectoryIfMissing True (takeDirectory path)
|
|
conn <- SQL.open path
|
|
SQL.execute_ conn "PRAGMA journal_mode=WAL"
|
|
SQL.execute_ conn "PRAGMA foreign_keys=ON"
|
|
pure conn
|