git.iko.soy/typeable/postgresql-simple
on master help sign in
Add isSerializationError predicate to Transaction
14d7a3bLeon P Smith
src/Database/PostgreSQL/Simple/Transaction.hs+7−3
@@ -8,6 +8,7 @@ module Database.PostgreSQL.Simple.Transaction
8 , withTransactionMode
8 , withTransactionMode
9 , withTransactionModeRetry
9 , withTransactionModeRetry
10 , withTransactionSerializable
10 , withTransactionSerializable
11+ , isSerializationError
11 , TransactionMode(..)
12 , TransactionMode(..)
12 , IsolationLevel(..)
13 , IsolationLevel(..)
13 , ReadWriteMode(..)
14 , ReadWriteMode(..)
@@ -104,13 +105,16 @@ withTransactionSerializable =
104 { isolationLevel = Serializable
105 { isolationLevel = Serializable
105 , readWriteMode = ReadWrite
106 , readWriteMode = ReadWrite
106 }
107 }
107− retryOnNotSerializable
108+ isSerializationError
108− where
109+
109− retryOnNotSerializable exception =
110+
111+isSerializationError :: SqlError -> Bool
112+isSerializationError exception =
110 case exception of
113 case exception of
111 SqlError{..} | sqlState == serialization_failure
114 SqlError{..} | sqlState == serialization_failure
112 -> True
115 -> True
113 _ -> False
116 _ -> False
117+ where
114 -- http://www.postgresql.org/docs/current/static/errcodes-appendix.html
118 -- http://www.postgresql.org/docs/current/static/errcodes-appendix.html
115 serialization_failure = "40001"
119 serialization_failure = "40001"
116
120