packages feed

hasql-transaction-0.4.5.1: conflicts-test/Main/Queries.hs

module Main.Queries where

import Rebase.Prelude
import Hasql.Query
import qualified Hasql.Encoders as E
import qualified Hasql.Decoders as D


createAccountTable :: Query () ()
createAccountTable =
  statement sql E.unit D.unit False
  where
    sql =
      "create table account (id serial not null, balance numeric not null, primary key (id))"

dropAccountTable :: Query () ()
dropAccountTable =
  statement
    "drop table account"
    E.unit
    D.unit
    False

createAccount :: Query Scientific Int64
createAccount =
  statement
    "insert into account (balance) values ($1) returning id"
    (E.value E.numeric)
    (D.singleRow (D.value D.int8))
    True

modifyBalance :: Query (Int64, Scientific) Bool
modifyBalance =
  statement
    "update account set balance = balance + $2 where id = $1"
    (contrazip2 (E.value E.int8) (E.value E.numeric))
    (fmap (> 0) D.rowsAffected)
    True

getBalance :: Query Int64 (Maybe Scientific)
getBalance =
  statement
    "select balance from account where id = $1"
    (E.value E.int8)
    (D.maybeRow (D.value D.numeric))
    True