packages feed

sqlite-easy-0.1.0.0: src/Database/Sqlite/Easy/Migrant.hs

{-#LANGUAGE OverloadedStrings #-}
module Database.Sqlite.Easy.Migrant
  ( module Database.Migrant.Driver.Class
  )
  where

import Database.Migrant.Driver.Class
import Database.Migrant.MigrationName
import qualified Database.Sqlite.Easy.Internal as Sqlite
import qualified Database.SQLite3 as Sqlite

instance Driver Sqlite.Database where
  withTransaction action conn = Sqlite.asTransaction' conn (action conn)

  initMigrations conn = do
    [] <- Sqlite.run
      "CREATE TABLE IF NOT EXISTS _migrations (id INTEGER PRIMARY KEY, name TEXT)"
      conn
    pure ()

  markUp name conn = do
    [] <- Sqlite.runWith
      "INSERT INTO _migrations (name) VALUES (?)"
      [Sqlite.SQLText $ unpackMigrationName name]
      conn
    pure ()

  markDown name conn = do
    [] <- Sqlite.runWith
      "DELETE FROM _migrations WHERE name = ?"
      [Sqlite.SQLText $ unpackMigrationName name]
      conn
    pure ()

  getMigrations conn = do
    result <- Sqlite.run
      "SELECT name FROM _migrations ORDER BY id"
       conn
    return [ MigrationName name | [Sqlite.SQLText name] <- result ]