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