packages feed

hasql-transaction 0.6.0.1 → 0.7

raw patch · 10 files changed

+134/−134 lines, 10 filesdep ~hasqlPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: hasql

API changes (from Hackage documentation)

- Hasql.Transaction: query :: a -> Query a b -> Transaction b
+ Hasql.Transaction: statement :: a -> Statement a b -> Transaction b

Files

conflicts-test/Main.hs view
@@ -5,7 +5,7 @@ import qualified Hasql.Session as B import qualified Hasql.Transaction as C import qualified Hasql.Transaction.Sessions as G-import qualified Main.Queries as D+import qualified Main.Statements as D import qualified Main.Transactions as E import qualified Control.Concurrent.Async as F @@ -57,14 +57,14 @@ transactionsTest :: Test transactionsTest connection1 connection2 =   do-    id1 <- session connection1 (B.query 0 D.createAccount)-    id2 <- session connection1 (B.query 0 D.createAccount)+    id1 <- session connection1 (B.statement 0 D.createAccount)+    id2 <- session connection1 (B.statement 0 D.createAccount)     async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1)))     async2 <- F.async (replicateM_ 1000 (transaction connection2 (E.transfer id1 id2 1)))     F.wait async1     F.wait async2-    balance1 <- session connection1 (B.query id1 D.getBalance)-    balance2 <- session connection1 (B.query id2 D.getBalance)+    balance1 <- session connection1 (B.statement id1 D.getBalance)+    balance2 <- session connection1 (B.statement id2 D.getBalance)     traceShowM balance1     traceShowM balance2     return (balance1 == Just 2000 && balance2 == Just (-2000))@@ -72,14 +72,14 @@ readAndWriteTransactionsTest :: Test readAndWriteTransactionsTest connection1 connection2 =   do-    id1 <- session connection1 (B.query 0 D.createAccount)-    id2 <- session connection1 (B.query 0 D.createAccount)+    id1 <- session connection1 (B.statement 0 D.createAccount)+    id2 <- session connection1 (B.statement 0 D.createAccount)     async1 <- F.async (replicateM_ 1000 (transaction connection1 (E.transfer id1 id2 1)))-    async2 <- F.async (replicateM_ 1000 (transaction connection2 (C.query id1 D.getBalance)))+    async2 <- F.async (replicateM_ 1000 (transaction connection2 (C.statement id1 D.getBalance)))     F.wait async1     F.wait async2-    balance1 <- session connection1 (B.query id1 D.getBalance)-    balance2 <- session connection1 (B.query id2 D.getBalance)+    balance1 <- session connection1 (B.statement id1 D.getBalance)+    balance2 <- session connection1 (B.statement id2 D.getBalance)     traceShowM balance1     traceShowM balance2     return (balance1 == Just 1000 && balance2 == Just (-1000))@@ -87,14 +87,14 @@ transactionAndQueryTest :: Test transactionAndQueryTest connection1 connection2 =   do-    id1 <- session connection1 (B.query 0 D.createAccount)-    id2 <- session connection1 (B.query 0 D.createAccount)+    id1 <- session connection1 (B.statement 0 D.createAccount)+    id2 <- session connection1 (B.statement 0 D.createAccount)     async1 <- F.async (transaction connection1 (E.transferTimes 200 id1 id2 1))-    async2 <- F.async (session connection2 (replicateM_ 200 (B.query (id1, 1) D.modifyBalance)))+    async2 <- F.async (session connection2 (replicateM_ 200 (B.statement (id1, 1) D.modifyBalance)))     F.wait async1     F.wait async2-    balance1 <- session connection1 (B.query id1 D.getBalance)-    balance2 <- session connection1 (B.query id2 D.getBalance)+    balance1 <- session connection1 (B.statement id1 D.getBalance)+    balance2 <- session connection1 (B.statement id2 D.getBalance)     traceShowM balance1     traceShowM balance2     return (balance1 == Just 400 && balance2 == Just (-200))
− conflicts-test/Main/Queries.hs
@@ -1,47 +0,0 @@-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-
+ conflicts-test/Main/Statements.hs view
@@ -0,0 +1,47 @@+module Main.Statements where++import Rebase.Prelude+import Hasql.Statement+import qualified Hasql.Encoders as E+import qualified Hasql.Decoders as D+++createAccountTable :: Statement () ()+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 :: Statement () ()+dropAccountTable =+  Statement+    "drop table account"+    E.unit+    D.unit+    False++createAccount :: Statement Scientific Int64+createAccount =+  Statement+    "insert into account (balance) values ($1) returning id"+    (E.param E.numeric)+    (D.singleRow (D.column D.int8))+    True++modifyBalance :: Statement (Int64, Scientific) Bool+modifyBalance =+  Statement+    "update account set balance = balance + $2 where id = $1"+    (contrazip2 (E.param E.int8) (E.param E.numeric))+    (fmap (> 0) D.rowsAffected)+    True++getBalance :: Statement Int64 (Maybe Scientific)+getBalance =+  Statement+    "select balance from account where id = $1"+    (E.param E.int8)+    (D.rowMaybe (D.column D.numeric))+    True+
conflicts-test/Main/Transactions.hs view
@@ -2,26 +2,26 @@  import Rebase.Prelude import Hasql.Transaction-import qualified Main.Queries as A+import qualified Main.Statements as A   createSchema :: Transaction () createSchema =   do-    query () A.createAccountTable+    statement () A.createAccountTable  dropSchema :: Transaction () dropSchema =   do-    query () A.dropAccountTable+    statement () A.dropAccountTable  transfer :: Int64 -> Int64 -> Scientific -> Transaction Bool transfer id1 id2 amount =   do-    success <- query (id1, amount) A.modifyBalance+    success <- statement (id1, amount) A.modifyBalance     if success       then-        query (id2, negate amount) A.modifyBalance+        statement (id2, negate amount) A.modifyBalance       else         return False 
hasql-transaction.cabal view
@@ -1,7 +1,7 @@ name:   hasql-transaction version:-  0.6.0.1+  0.7 category:   Hasql, Database, PostgreSQL synopsis:@@ -45,7 +45,7 @@     Hasql.Transaction.Private.Prelude     Hasql.Transaction.Private.Model     Hasql.Transaction.Private.SQL-    Hasql.Transaction.Private.Queries+    Hasql.Transaction.Private.Statements     Hasql.Transaction.Private.Sessions     Hasql.Transaction.Private.Transaction   exposed-modules:@@ -53,7 +53,7 @@     Hasql.Transaction.Sessions   build-depends:     -- database:-    hasql >= 0.19 && < 0.20 || >= 1 && < 1.2,+    hasql >= 1.3 && < 1.4,     -- data:     bytestring-tree-builder >= 0.1 && < 0.3,     bytestring >= 0.10 && < 0.11,@@ -75,7 +75,7 @@   main-is:     Main.hs   other-modules:-    Main.Queries+    Main.Statements     Main.Transactions   ghc-options:     -O2
library/Hasql/Transaction.hs view
@@ -6,7 +6,7 @@   Transaction,   condemn,   sql,-  query,+  statement, ) where 
− library/Hasql/Transaction/Private/Queries.hs
@@ -1,50 +0,0 @@-module Hasql.Transaction.Private.Queries-where--import Hasql.Transaction.Private.Prelude-import Hasql.Transaction.Private.Model-import qualified Hasql.Query as A-import qualified Hasql.Encoders as B-import qualified Hasql.Decoders as C-import qualified Hasql.Transaction.Private.SQL as D----- * Transactions----------------------------beginTransaction :: IsolationLevel -> Mode -> A.Query () ()-beginTransaction isolation mode =-  A.statement (D.beginTransaction isolation mode) B.unit C.unit True--commitTransaction :: A.Query () ()-commitTransaction =-  A.statement "COMMIT" B.unit C.unit True--abortTransaction :: A.Query () ()-abortTransaction =-  A.statement "ABORT" B.unit C.unit True----- * Streaming----------------------------declareCursor :: ByteString -> ByteString -> B.Params a -> A.Query a ()-declareCursor name sql encoder =-  A.statement (D.declareCursor name sql) encoder C.unit False--closeCursor :: A.Query ByteString ()-closeCursor =-  A.statement "CLOSE $1" (B.value B.bytea) C.unit True--fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Query (Int64, ByteString) b-fetchFromCursor step init rowDec =-  A.statement sql encoder decoder True-  where-    sql =-      "FETCH FORWARD $1 FROM $2"-    encoder =-      contrazip2-        (B.value B.int8)-        (B.value B.bytea)-    decoder =-      C.foldlRows step init rowDec
library/Hasql/Transaction/Private/Sessions.hs view
@@ -4,7 +4,7 @@ import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Model import qualified Hasql.Session as A-import qualified Hasql.Transaction.Private.Queries as B+import qualified Hasql.Transaction.Private.Statements as B   {-@@ -18,17 +18,17 @@   where     normal =       do-        A.query () (B.beginTransaction isolation mode)+        A.statement () (B.beginTransaction isolation mode)         (result, commit) <- session         if commit-          then A.query () B.commitTransaction-          else A.query () B.abortTransaction+          then A.statement () B.commitTransaction+          else A.statement () B.abortTransaction         return result     onError continue error =       do-        A.query () B.abortTransaction+        A.statement () B.abortTransaction         case error of-          A.ResultError (A.ServerError "40001" _ _ _) ->+          A.QueryError _ _ (A.ResultError (A.ServerError "40001" _ _ _)) ->             continue           _ ->             throwError error
+ library/Hasql/Transaction/Private/Statements.hs view
@@ -0,0 +1,50 @@+module Hasql.Transaction.Private.Statements+where++import Hasql.Transaction.Private.Prelude+import Hasql.Transaction.Private.Model+import qualified Hasql.Statement as A+import qualified Hasql.Encoders as B+import qualified Hasql.Decoders as C+import qualified Hasql.Transaction.Private.SQL as D+++-- * Transactions+-------------------------++beginTransaction :: IsolationLevel -> Mode -> A.Statement () ()+beginTransaction isolation mode =+  A.Statement (D.beginTransaction isolation mode) B.unit C.unit True++commitTransaction :: A.Statement () ()+commitTransaction =+  A.Statement "COMMIT" B.unit C.unit True++abortTransaction :: A.Statement () ()+abortTransaction =+  A.Statement "ABORT" B.unit C.unit True+++-- * Streaming+-------------------------++declareCursor :: ByteString -> ByteString -> B.Params a -> A.Statement a ()+declareCursor name sql encoder =+  A.Statement (D.declareCursor name sql) encoder C.unit False++closeCursor :: A.Statement ByteString ()+closeCursor =+  A.Statement "CLOSE $1" (B.param B.bytea) C.unit True++fetchFromCursor :: (b -> a -> b) -> b -> C.Row a -> A.Statement (Int64, ByteString) b+fetchFromCursor step init rowDec =+  A.Statement sql encoder decoder True+  where+    sql =+      "FETCH FORWARD $1 FROM $2"+    encoder =+      contrazip2+        (B.param B.int8)+        (B.param B.bytea)+    decoder =+      C.foldlRows step init rowDec
library/Hasql/Transaction/Private/Transaction.hs view
@@ -3,9 +3,9 @@  import Hasql.Transaction.Private.Prelude import Hasql.Transaction.Private.Model-import qualified Hasql.Query as A+import qualified Hasql.Statement as A import qualified Hasql.Session as B-import qualified Hasql.Transaction.Private.Queries as C+import qualified Hasql.Transaction.Private.Statements as C import qualified Hasql.Transaction.Private.Sessions as D  @@ -37,10 +37,10 @@  -- | -- Parameters and a specification of the parametric query to apply them to.-{-# INLINE query #-}-query :: a -> A.Query a b -> Transaction b-query params query =-  Transaction . lift $ B.query params query+{-# INLINE statement #-}+statement :: a -> A.Statement a b -> Transaction b+statement params statement =+  Transaction . lift $ B.statement params statement  -- | -- Cause transaction to eventually roll back.