module Database.SednaDB.SednaTypes
( SednaConnection
, Transaction
, QueryResult
, Query
, getTransactionEnv
, TransactionEnv (TransactionEnv)
, Document
, Collection
, runTransaction
, URL
, Password
, DBName
, UserName
) where
import Control.Monad.Error
import Control.Monad.Reader
import Foreign (Ptr)
import Database.SednaDB.Internal.SednaCBindings (C'SednaConnection)
type URL = String
type DBName = String
type UserName = String
type Password = String
type Collection = String
type Document = String
type SednaConnection = Ptr C'SednaConnection
type Query = String
type QueryResult = String
type ErrorMsg = String
data TransactionEnv = TransactionEnv SednaConnection Collection Document
deriving (Show)
type Transaction a = ReaderT TransactionEnv (ErrorT ErrorMsg IO) a
getTransactionEnv :: Transaction TransactionEnv
getTransactionEnv = ask
runTransaction :: SednaConnection
-> Document
-> Collection
-> Transaction QueryResult
-> IO (Either ErrorMsg QueryResult)
runTransaction conn doc coll trans = runErrorT (runReaderT trans env)
where env = TransactionEnv conn coll doc