@@ -2,7 +2,6 @@ module Database.Postgres
2
2
( Query (..)
3
3
, Client
4
4
, Pool
5
- , DB
6
5
, ConnectionInfo
7
6
, ClientConfig
8
7
, PoolConfig
@@ -23,20 +22,17 @@ module Database.Postgres
23
22
24
23
import Prelude
25
24
26
- import Control.Monad.Aff (Aff , bracket )
27
- import Control.Monad.Aff.Compat (EffFnAff , fromEffFnAff )
28
- import Control.Monad.Eff (kind Effect , Eff )
29
- import Control.Monad.Eff.Class (liftEff )
30
- import Control.Monad.Eff.Exception (error )
31
25
import Control.Monad.Error.Class (throwError )
32
- import Control.Monad.Except (runExcept )
33
26
import Data.Array ((!!))
34
27
import Data.Either (Either , either )
35
- import Data.Foreign (Foreign , MultipleErrors )
36
- import Data.Foreign.Class (class Decode , decode )
37
28
import Data.Maybe (Maybe (Just, Nothing), maybe )
38
29
import Data.Traversable (sequence )
39
30
import Database.Postgres.SqlValue (SqlValue )
31
+ import Effect (Effect )
32
+ import Effect.Aff (Aff , Error , bracket )
33
+ import Effect.Aff.Compat (EffectFnAff , fromEffectFnAff )
34
+ import Effect.Class (liftEffect )
35
+ import Foreign (Foreign )
40
36
import Unsafe.Coerce (unsafeCoerce )
41
37
42
38
newtype Query a = Query String
@@ -45,8 +41,6 @@ foreign import data Pool :: Type
45
41
46
42
foreign import data Client :: Type
47
43
48
- foreign import data DB :: Effect
49
-
50
44
foreign import data ConnectionInfo :: Type
51
45
52
46
type ConnectionString = String
@@ -90,93 +84,84 @@ connectionInfoFromConfig c p = unsafeCoerce
90
84
}
91
85
92
86
-- | Makes a connection to the database via a Client.
93
- connect :: forall eff . Pool -> Aff ( db :: DB | eff ) Client
94
- connect = fromEffFnAff <<< connect'
87
+ connect :: Pool -> Aff Client
88
+ connect = fromEffectFnAff <<< connect'
95
89
96
90
-- | Runs a query and returns nothing.
97
- execute :: forall eff a . Query a -> Array SqlValue -> Client -> Aff ( db :: DB | eff ) Unit
98
- execute (Query sql) params client = void $ fromEffFnAff $ runQuery sql params client
91
+ execute :: forall a . Query a -> Array SqlValue -> Client -> Aff Unit
92
+ execute (Query sql) params client = void $ fromEffectFnAff $ runQuery sql params client
99
93
100
94
-- | Runs a query and returns nothing
101
- execute_ :: forall eff a . Query a -> Client -> Aff ( db :: DB | eff ) Unit
102
- execute_ (Query sql) client = void $ fromEffFnAff $ runQuery_ sql client
95
+ execute_ :: forall a . Query a -> Client -> Aff Unit
96
+ execute_ (Query sql) client = void $ fromEffectFnAff $ runQuery_ sql client
103
97
104
98
-- | Runs a query and returns all results.
105
- query :: forall eff a
106
- . Decode a
107
- => Query a -> Array SqlValue -> Client -> Aff (db :: DB | eff ) (Array a )
108
- query (Query sql) params client = do
109
- rows <- fromEffFnAff $ runQuery sql params client
110
- either liftError pure (runExcept (sequence $ decode <$> rows))
99
+ query :: forall a
100
+ . (Foreign -> Either Error a ) -> Query a -> Array SqlValue -> Client -> Aff (Array a )
101
+ query decode (Query sql) params client = do
102
+ rows <- fromEffectFnAff $ runQuery sql params client
103
+ either throwError pure (sequence $ decode <$> rows)
111
104
112
105
-- | Just like `query` but does not make any param replacement
113
- query_ :: forall eff a
114
- . Decode a
115
- => Query a -> Client -> Aff (db :: DB | eff ) (Array a )
116
- query_ (Query sql) client = do
117
- rows <- fromEffFnAff $ runQuery_ sql client
118
- either liftError pure (runExcept (sequence $ decode <$> rows))
106
+ query_ :: forall a
107
+ . (Foreign -> Either Error a ) -> Query a -> Client -> Aff (Array a )
108
+ query_ decode (Query sql) client = do
109
+ rows <- fromEffectFnAff $ runQuery_ sql client
110
+ either throwError pure (sequence $ decode <$> rows)
119
111
120
112
-- | Runs a query and returns the first row, if any
121
- queryOne :: forall eff a
122
- . Decode a
123
- => Query a -> Array SqlValue -> Client -> Aff (db :: DB | eff ) (Maybe a )
124
- queryOne (Query sql) params client = do
125
- rows <- fromEffFnAff $ runQuery sql params client
126
- maybe (pure Nothing ) (either liftError (pure <<< Just )) (decodeFirst rows)
113
+ queryOne :: forall a
114
+ . (Foreign -> Either Error a ) -> Query a -> Array SqlValue -> Client -> Aff (Maybe a )
115
+ queryOne decode (Query sql) params client = do
116
+ rows <- fromEffectFnAff $ runQuery sql params client
117
+ maybe (pure Nothing ) (either throwError (pure <<< Just )) (decodeFirst decode rows)
127
118
128
119
-- | Just like `queryOne` but does not make any param replacement
129
- queryOne_ :: forall eff a
130
- . Decode a
131
- => Query a -> Client -> Aff (db :: DB | eff ) (Maybe a )
132
- queryOne_ (Query sql) client = do
133
- rows <- fromEffFnAff $ runQuery_ sql client
134
- maybe (pure Nothing ) (either liftError (pure <<< Just )) (decodeFirst rows)
120
+ queryOne_ :: forall a
121
+ . (Foreign -> Either Error a ) -> Query a -> Client -> Aff (Maybe a )
122
+ queryOne_ decode (Query sql) client = do
123
+ rows <- fromEffectFnAff $ runQuery_ sql client
124
+ maybe (pure Nothing ) (either throwError (pure <<< Just )) (decodeFirst decode rows)
135
125
136
126
-- | Runs a query and returns a single value, if any.
137
- queryValue :: forall eff a
138
- . Decode a
139
- => Query a -> Array SqlValue -> Client -> Aff (db :: DB | eff ) (Maybe a )
140
- queryValue (Query sql) params client = do
141
- val <- fromEffFnAff $ runQueryValue sql params client
142
- pure $ either (const Nothing ) Just (runExcept (decode val))
127
+ queryValue :: forall a
128
+ . (Foreign -> Either Error a ) -> Query a -> Array SqlValue -> Client -> Aff (Maybe a )
129
+ queryValue decode (Query sql) params client = do
130
+ val <- fromEffectFnAff $ runQueryValue sql params client
131
+ pure $ either (const Nothing ) Just (decode val)
143
132
144
133
-- | Just like `queryValue` but does not make any param replacement
145
- queryValue_ :: forall eff a
146
- . Decode a
147
- => Query a -> Client -> Aff (db :: DB | eff ) (Maybe a )
148
- queryValue_ (Query sql) client = do
149
- val <- fromEffFnAff $ runQueryValue_ sql client
150
- either liftError (pure <<< Just ) $ runExcept (decode val)
134
+ queryValue_ :: forall a
135
+ . (Foreign -> Either Error a ) -> Query a -> Client -> Aff (Maybe a )
136
+ queryValue_ decode (Query sql) client = do
137
+ val <- fromEffectFnAff $ runQueryValue_ sql client
138
+ either throwError (pure <<< Just ) $ (decode val)
151
139
152
140
-- | Connects to the database, calls the provided function with the client
153
141
-- | and returns the results.
154
- withClient :: forall eff a
155
- . Pool -> (Client -> Aff ( db :: DB | eff ) a ) -> Aff ( db :: DB | eff ) a
142
+ withClient :: forall a
143
+ . Pool -> (Client -> Aff a ) -> Aff a
156
144
withClient pool p =
157
145
bracket
158
146
(connect pool)
159
- (liftEff <<< release)
147
+ (liftEffect <<< release)
160
148
p
161
149
162
- decodeFirst :: forall a . Decode a => Array Foreign -> Maybe (Either MultipleErrors a )
163
- decodeFirst rows = runExcept <<< decode <$> (rows !! 0 )
164
-
165
- liftError :: forall e a . MultipleErrors -> Aff e a
166
- liftError errs = throwError $ error (show errs)
150
+ decodeFirst :: forall a . (Foreign -> Either Error a ) -> Array Foreign -> Maybe (Either Error a )
151
+ decodeFirst decode rows = decode <$> (rows !! 0 )
167
152
168
- foreign import mkPool :: forall eff . ConnectionInfo -> Eff ( db :: DB | eff ) Pool
153
+ foreign import mkPool :: ConnectionInfo -> Effect Pool
169
154
170
- foreign import connect' :: forall eff . Pool -> EffFnAff ( db :: DB | eff ) Client
155
+ foreign import connect' :: Pool -> EffectFnAff Client
171
156
172
- foreign import runQuery_ :: forall eff . String -> Client -> EffFnAff ( db :: DB | eff ) (Array Foreign )
157
+ foreign import runQuery_ :: String -> Client -> EffectFnAff (Array Foreign )
173
158
174
- foreign import runQuery :: forall eff . String -> Array SqlValue -> Client -> EffFnAff ( db :: DB | eff ) (Array Foreign )
159
+ foreign import runQuery :: String -> Array SqlValue -> Client -> EffectFnAff (Array Foreign )
175
160
176
- foreign import runQueryValue_ :: forall eff . String -> Client -> EffFnAff ( db :: DB | eff ) Foreign
161
+ foreign import runQueryValue_ :: String -> Client -> EffectFnAff Foreign
177
162
178
- foreign import runQueryValue :: forall eff . String -> Array SqlValue -> Client -> EffFnAff ( db :: DB | eff ) Foreign
163
+ foreign import runQueryValue :: String -> Array SqlValue -> Client -> EffectFnAff Foreign
179
164
180
- foreign import release :: forall eff . Client -> Eff ( db :: DB | eff ) Unit
165
+ foreign import release :: Client -> Effect Unit
181
166
182
- foreign import end :: forall eff . Pool -> Eff ( db :: DB | eff ) Unit
167
+ foreign import end :: Pool -> Effect Unit
0 commit comments