generated from tpl/purs
Compare commits
2 Commits
e492162253
...
3ff4603524
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ff4603524 | ||
|
|
dd518a10eb |
209
CHANGELOG.md
Normal file
209
CHANGELOG.md
Normal file
@@ -0,0 +1,209 @@
|
||||
## [](https://37.16.28.76/orion/purescript-pg/compare/v2.0.21...v) (2026-01-28)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* use explicit imports in re-export modules ([#1](https://37.16.28.76/orion/purescript-pg/issues/1)) ([f0fd42c](https://37.16.28.76/orion/purescript-pg/commit/f0fd42ceb61998b4011bd521c3caed640690d8ef))
|
||||
## [2.0.20](https://37.16.28.76/orion/purescript-pg/compare/v2.0.19...v2.0.20) (2024-11-13)
|
||||
## [2.0.19](https://37.16.28.76/orion/purescript-pg/compare/v2.0.17...v2.0.19) (2024-08-21)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve error stringification ([5f8be2e](https://37.16.28.76/orion/purescript-pg/commit/5f8be2e1f294eadee1a08a5768987a70b6ccb71d))
|
||||
* use package set ([f35576e](https://37.16.28.76/orion/purescript-pg/commit/f35576e4e6ddd26b78cb7f95cee8c24fb1a5a268))
|
||||
## [2.0.17](https://37.16.28.76/orion/purescript-pg/compare/v2.0.16...v2.0.17) (2024-06-29)
|
||||
## [2.0.16](https://37.16.28.76/orion/purescript-pg/compare/v2.0.15...v2.0.16) (2024-06-29)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* correct implementations of MonadAff, MonadEffect, Fork, Bracket ([d2c3eba](https://37.16.28.76/orion/purescript-pg/commit/d2c3eba0821ceae16ac0609bcfb22296800fb329))
|
||||
## [2.0.15](https://37.16.28.76/orion/purescript-pg/compare/v2.0.14...v2.0.15) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* pipes should use streamin/out ([23496f7](https://37.16.28.76/orion/purescript-pg/commit/23496f71f3adf7378a1f595de86fc8eac4268e8e))
|
||||
## [2.0.14](https://37.16.28.76/orion/purescript-pg/compare/v2.0.13...v2.0.14) (2024-06-25)
|
||||
## [2.0.13](https://37.16.28.76/orion/purescript-pg/compare/v2.0.12...v2.0.13) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* strict ([4308ebe](https://37.16.28.76/orion/purescript-pg/commit/4308ebe7e16922b530ebce2a515504082cf3fcb2))
|
||||
## [2.0.12](https://37.16.28.76/orion/purescript-pg/compare/v2.0.11...v2.0.12) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* more relaxation ([901e931](https://37.16.28.76/orion/purescript-pg/commit/901e931af48a43c7ce32d9ccecd3f7321f91b9eb))
|
||||
## [2.0.11](https://37.16.28.76/orion/purescript-pg/compare/v2.0.10...v2.0.11) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* relax class constraints ([1a96e2e](https://37.16.28.76/orion/purescript-pg/commit/1a96e2e6d8b8bc5d533c851aac7b323de498bd96))
|
||||
## [2.0.10](https://37.16.28.76/orion/purescript-pg/compare/v2.0.9...v2.0.10) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* parRE is alt ([fad3e8d](https://37.16.28.76/orion/purescript-pg/commit/fad3e8dbcbb2d8ed162c0ec6c55884df1b01a9f2))
|
||||
## [2.0.9](https://37.16.28.76/orion/purescript-pg/compare/v2.0.7...v2.0.9) (2024-06-25)
|
||||
## [2.0.7](https://37.16.28.76/orion/purescript-pg/compare/v2.0.1...v2.0.7) (2024-06-25)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* unused constraint ([cd01d28](https://37.16.28.76/orion/purescript-pg/commit/cd01d280f42838e5ca7df2fb1374764c0d477036))
|
||||
## [2.0.1](https://37.16.28.76/orion/purescript-pg/compare/v2.0.0...v2.0.1) (2024-06-25)
|
||||
## [2.0.0](https://37.16.28.76/orion/purescript-pg/compare/v1.7.2...v2.0.0) (2024-06-25)
|
||||
|
||||
### ⚠ BREAKING CHANGES
|
||||
|
||||
* rework error handling
|
||||
|
||||
### Features
|
||||
|
||||
* rework error handling ([11c1645](https://37.16.28.76/orion/purescript-pg/commit/11c16451733f619919569935e449cd1a3626a2b2))
|
||||
## [1.7.2](https://37.16.28.76/orion/purescript-pg/compare/v1.7.1...v1.7.2) (2024-06-24)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* bump node-stream-pipes ([9ab6e37](https://37.16.28.76/orion/purescript-pg/commit/9ab6e37bb16b56a11bee14342a78275d0173e121))
|
||||
## [1.7.1](https://37.16.28.76/orion/purescript-pg/compare/v1.7.0...v1.7.1) (2024-06-23)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* bump node-stream-pipes to 2.0.2 (big perf improvement) ([d10d21b](https://37.16.28.76/orion/purescript-pg/commit/d10d21b708df50ae03edc6467d33ccd1ee8cb2e9))
|
||||
## [1.7.0](https://37.16.28.76/orion/purescript-pg/compare/v1.6.5...v1.7.0) (2024-06-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add interval support ([fbb1f3b](https://37.16.28.76/orion/purescript-pg/commit/fbb1f3b8a5d67f00189f52f398ad0717d028cb63))
|
||||
## [1.6.5](https://37.16.28.76/orion/purescript-pg/compare/v1.6.4...v1.6.5) (2024-05-22)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* tagOf is not instanceof ([7ed85ae](https://37.16.28.76/orion/purescript-pg/commit/7ed85ae22bc156fe6ad09ae785556887f082d033))
|
||||
* update node-stream-pipes ([a56add0](https://37.16.28.76/orion/purescript-pg/commit/a56add0ffc82ad0e9d15a1759a931c7b332fe134))
|
||||
## [1.6.4](https://37.16.28.76/orion/purescript-pg/compare/v1.6.3...v1.6.4) (2024-05-12)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* stdin txn ([27a7abb](https://37.16.28.76/orion/purescript-pg/commit/27a7abb32952b447aa52e7bfade7a74a8df8200b))
|
||||
## [1.6.3](https://37.16.28.76/orion/purescript-pg/compare/v1.6.1...v1.6.3) (2024-05-12)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* ensure-ranges ([cfb0160](https://37.16.28.76/orion/purescript-pg/commit/cfb01608cd6abcd3447187670f07431a19f85743))
|
||||
## [1.6.1](https://37.16.28.76/orion/purescript-pg/compare/v1.6.0...v1.6.1) (2024-05-12)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* pipes monad stuff ([1884036](https://37.16.28.76/orion/purescript-pg/commit/188403681a331de7c85765283c033025d1c80a01))
|
||||
## [1.6.0](https://37.16.28.76/orion/purescript-pg/compare/v1.5.1...v1.6.0) (2024-05-11)
|
||||
|
||||
### Features
|
||||
|
||||
* add node-stream-pipes support ([b3806d5](https://37.16.28.76/orion/purescript-pg/commit/b3806d5f6e293ede46697a8354d774edd11056b3))
|
||||
## [1.5.1](https://37.16.28.76/orion/purescript-pg/compare/v1.5.0...v1.5.1) (2024-05-01)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* impl Alternative ([d66c326](https://37.16.28.76/orion/purescript-pg/commit/d66c3261b62e3ed039b7625e2b399fa7d9f02b3e))
|
||||
## [1.5.0](https://37.16.28.76/orion/purescript-pg/compare/v1.4.0...v1.5.0) (2024-04-30)
|
||||
|
||||
### Features
|
||||
|
||||
* streaming STDIO support ([e592664](https://37.16.28.76/orion/purescript-pg/commit/e59266406b7c6aabee2f28534366fd79f9a164c9))
|
||||
## [1.4.0](https://37.16.28.76/orion/purescript-pg/compare/v1.3.0...v1.4.0) (2024-04-29)
|
||||
|
||||
### Features
|
||||
|
||||
* MOVE support for cursors, RowsAffected ([24b2156](https://37.16.28.76/orion/purescript-pg/commit/24b215652438d0280ecf5be71c7ebdeb0187fc6e))
|
||||
## [1.3.0](https://37.16.28.76/orion/purescript-pg/compare/v1.2.7...v1.3.0) (2024-04-11)
|
||||
|
||||
### Features
|
||||
|
||||
* generalize PostgresT to MonadPostgres to allow mocking ([8722e69](https://37.16.28.76/orion/purescript-pg/commit/8722e69013054dbe1b4386565d32bd7c6e7c1d9c))
|
||||
## [1.2.7](https://37.16.28.76/orion/purescript-pg/compare/v1.2.6...v1.2.7) (2024-04-11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* impl unlift ([a4d4e6b](https://37.16.28.76/orion/purescript-pg/commit/a4d4e6bd7567dd3d4c4bd30418ef23c159e21973))
|
||||
## [1.2.6](https://37.16.28.76/orion/purescript-pg/compare/v1.2.5...v1.2.6) (2024-04-11)
|
||||
## [1.2.5](https://37.16.28.76/orion/purescript-pg/compare/v1.2.4...v1.2.5) (2024-04-11)
|
||||
## [1.2.4](https://37.16.28.76/orion/purescript-pg/compare/v1.2.3...v1.2.4) (2024-04-11)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* impl monadrec ([5a99e58](https://37.16.28.76/orion/purescript-pg/commit/5a99e5806214058263f3807c0aa77048c2e651f3))
|
||||
## [1.2.3](https://37.16.28.76/orion/purescript-pg/compare/v1.2.2...v1.2.3) (2024-04-06)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* pin unresult api to rept ([de1aacc](https://37.16.28.76/orion/purescript-pg/commit/de1aaccfb603925b2cbf01ad898c571a42e3e19a))
|
||||
## [1.2.2](https://37.16.28.76/orion/purescript-pg/compare/v1.2.1...v1.2.2) (2024-04-06)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* relax cursor constraints, fix enum test ([8761461](https://37.16.28.76/orion/purescript-pg/commit/87614611dd32a3ba18e65e3045977c55649f8a95))
|
||||
## [1.2.1](https://37.16.28.76/orion/purescript-pg/compare/v1.2.0...v1.2.1) (2024-04-06)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* FromRow t bound on cursor ([500e67d](https://37.16.28.76/orion/purescript-pg/commit/500e67d793725efa5e900cff8a91d7be192d4169))
|
||||
## [1.2.0](https://37.16.28.76/orion/purescript-pg/compare/v1.1.1...v1.2.0) (2024-04-06)
|
||||
|
||||
### Features
|
||||
|
||||
* UnresultT ([bc120b0](https://37.16.28.76/orion/purescript-pg/commit/bc120b072c5c93da4f424f0e304c0f762ae9c653))
|
||||
## [1.1.1](https://37.16.28.76/orion/purescript-pg/compare/v1.1.0...v1.1.1) (2024-04-06)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* improve custom enum api ([4aab053](https://37.16.28.76/orion/purescript-pg/commit/4aab05300b58192c9e6ebd75761336be97b6c3bd))
|
||||
## [1.1.0](https://37.16.28.76/orion/purescript-pg/compare/v1.0.6...v1.1.0) (2024-04-06)
|
||||
|
||||
### Features
|
||||
|
||||
* allow instances of serialize + deserialize outside this lib ([5fcf8c4](https://37.16.28.76/orion/purescript-pg/commit/5fcf8c4549487f26eee4874cdbdaf0a43d2abde5))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* prepare ([bd25d12](https://37.16.28.76/orion/purescript-pg/commit/bd25d12453c760a935942365fab7f295212c51ca))
|
||||
## [1.0.6](https://37.16.28.76/orion/purescript-pg/compare/1.0.5...v1.0.6) (2024-04-03)
|
||||
## [1.0.5](https://37.16.28.76/orion/purescript-pg/compare/v1.0.4...1.0.5) (2024-04-03)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* prepare ([60f442f](https://37.16.28.76/orion/purescript-pg/commit/60f442fc219d674e6409425e40c5d2bcf4fb77fd))
|
||||
* prepare ([154fb0f](https://37.16.28.76/orion/purescript-pg/commit/154fb0f1e734ecacede3cb250f66903a138c8d1c))
|
||||
## [1.0.4](https://37.16.28.76/orion/purescript-pg/compare/v1.0.3...v1.0.4) (2024-04-03)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* make publishing easier ([dee8b85](https://37.16.28.76/orion/purescript-pg/commit/dee8b85b84d6fe7209598b77ca6246567c7c297f))
|
||||
## [1.0.3](https://37.16.28.76/orion/purescript-pg/compare/v1.0.2...v1.0.3) (2024-04-03)
|
||||
|
||||
### Features
|
||||
|
||||
* withPool ([8160660](https://37.16.28.76/orion/purescript-pg/commit/8160660a989bf65b9df1e74373ecc1006c4d5d43))
|
||||
## [1.0.2](https://37.16.28.76/orion/purescript-pg/compare/v1.0.1...v1.0.2) (2024-04-03)
|
||||
## [1.0.1](https://37.16.28.76/orion/purescript-pg/compare/v1.0.0...v1.0.1) (2024-04-03)
|
||||
## [1.0.0](https://37.16.28.76/orion/purescript-pg/compare/e2eb753317a3293df08aa4a295f22c634ea5bf19...v1.0.0) (2024-04-03)
|
||||
|
||||
### Features
|
||||
|
||||
* cursor monad ([e8d8fd2](https://37.16.28.76/orion/purescript-pg/commit/e8d8fd24f36b5860b17737b5c6f58de23bb235b8))
|
||||
* FromResult, tests ([08dd5fe](https://37.16.28.76/orion/purescript-pg/commit/08dd5fe9649fcc7d112fb4ef74068ecad0f13321))
|
||||
* init, basic serde ([e2eb753](https://37.16.28.76/orion/purescript-pg/commit/e2eb753317a3293df08aa4a295f22c634ea5bf19))
|
||||
* pool, docs ([7520b9e](https://37.16.28.76/orion/purescript-pg/commit/7520b9eb192d2dc585c3eea25845ba9ba390ffed))
|
||||
* transaction, session monads to handle resource acq + rel ([1e0f06d](https://37.16.28.76/orion/purescript-pg/commit/1e0f06d176f5988c09a0df227f2c2b601515cf9c))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* client, result bindings ([d791668](https://37.16.28.76/orion/purescript-pg/commit/d7916683d7f6c3952ca2b0c5042bc194fcc9a47d))
|
||||
* JSON support ([753d14f](https://37.16.28.76/orion/purescript-pg/commit/753d14fdd91c2ed3d112b12b70757e0835c0a1d4))
|
||||
* prepare publish ([013f696](https://37.16.28.76/orion/purescript-pg/commit/013f69624923d6395151c9175fa2505ce99369ed))
|
||||
* prepare publish ([fa71c25](https://37.16.28.76/orion/purescript-pg/commit/fa71c25b8c693fecc4e8b1e79c0fc491e7e2c5ac))
|
||||
* prepare publish ([544c711](https://37.16.28.76/orion/purescript-pg/commit/544c7114ea920475a00faaac7fd07b834c0883e9))
|
||||
* some ergonomics, tests use postgres ([340cee4](https://37.16.28.76/orion/purescript-pg/commit/340cee4745645e293ff6b94042f41f4a40f9e38e))
|
||||
* spago.yaml publish ([e93c360](https://37.16.28.76/orion/purescript-pg/commit/e93c360d5484c1005d5d07ac0d8843588ba487a2))
|
||||
* spago.yaml publish ([d080f30](https://37.16.28.76/orion/purescript-pg/commit/d080f30b0f533e72a753e816e71509bcd5da0a0c))
|
||||
* spago.yaml publish ([c3041c7](https://37.16.28.76/orion/purescript-pg/commit/c3041c72d2cf32641ba3c32351e7ff1e60dc0076))
|
||||
* test client bindings ([d1f84bc](https://37.16.28.76/orion/purescript-pg/commit/d1f84bcc72e1829ece3ffac9561c50b1bf4edb8c))
|
||||
* test performance ([ad0e595](https://37.16.28.76/orion/purescript-pg/commit/ad0e5959b81f624bd081a6e2322c0ebab5174351))
|
||||
@@ -4,10 +4,13 @@
|
||||
"module": "index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"fmt": "bun bun/fmt.js"
|
||||
"fmt": "bun bun/fmt.js",
|
||||
"changelog": "conventional-changelog -p conventionalcommits"
|
||||
},
|
||||
"devDependencies": {
|
||||
"bun-types": "1.0.11",
|
||||
"conventional-changelog": "^7.1.1",
|
||||
"conventional-changelog-conventionalcommits": "^9.1.0",
|
||||
"purs-tidy": "^0.10.0",
|
||||
"typescript": "^5.0.0"
|
||||
},
|
||||
|
||||
@@ -74,11 +74,12 @@ instance
|
||||
( MonadAff m
|
||||
, MonadSession (SessionT m)
|
||||
, MonadCursor (CursorT t (SessionT m)) t
|
||||
) => MonadPostgres
|
||||
(PostgresT m)
|
||||
(SessionT m)
|
||||
(CursorT ct (SessionT m))
|
||||
ct
|
||||
) =>
|
||||
MonadPostgres
|
||||
(PostgresT m)
|
||||
(SessionT m)
|
||||
(CursorT ct (SessionT m))
|
||||
ct
|
||||
where
|
||||
session m = do
|
||||
pool <- ask
|
||||
@@ -117,6 +118,7 @@ runPostgres cfg m =
|
||||
let
|
||||
acq :: RE Unit m Pool
|
||||
acq = liftEffect $ Pool.make @r @missing @trash cfg
|
||||
|
||||
rel :: _ -> Pool -> RE Unit m Unit
|
||||
rel _ p = RE.liftExcept $ hoist liftAff $ Pool.end p
|
||||
in
|
||||
|
||||
@@ -93,12 +93,12 @@ instance (MonadStartSession s, MonadAff m) => MonadSession (RE s m) where
|
||||
|
||||
handleStream :: forall e m r. MonadEffect m => MonadError e m => Effect Unit -> m (Stream r) -> m (Stream r)
|
||||
handleStream onError getStream =
|
||||
flip catchError
|
||||
(\e -> liftEffect onError *> throwError e)
|
||||
do
|
||||
stream <- getStream
|
||||
liftEffect $ onErrorOrClose stream onError
|
||||
pure stream
|
||||
flip catchError
|
||||
(\e -> liftEffect onError *> throwError e)
|
||||
do
|
||||
stream <- getStream
|
||||
liftEffect $ onErrorOrClose stream onError
|
||||
pure stream
|
||||
|
||||
onErrorOrClose :: forall r. Stream r -> Effect Unit -> Effect Unit
|
||||
onErrorOrClose stream eff = do
|
||||
|
||||
@@ -9,7 +9,7 @@ import Data.Time.Duration (class Duration, Days(..), Hours(..), Milliseconds(..)
|
||||
import Effect (Effect)
|
||||
|
||||
zero :: IntervalRecord
|
||||
zero = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0, milliseconds: 0.0}
|
||||
zero = { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0, milliseconds: 0.0 }
|
||||
|
||||
type IntervalRecord =
|
||||
{ years :: Int
|
||||
@@ -85,4 +85,4 @@ fromDuration a =
|
||||
seconds = Int.trunc $ minutesRem / secondFactor
|
||||
milliseconds = minutesRem - (Int.toNumber seconds * secondFactor)
|
||||
in
|
||||
make {years: 0, months: 0, days, hours, minutes, seconds, milliseconds}
|
||||
make { years: 0, months: 0, days, hours, minutes, seconds, milliseconds }
|
||||
|
||||
@@ -8,16 +8,17 @@ export const isInstanceOfBuffer = a => a instanceof Buffer
|
||||
|
||||
/** @type {(a: unknown) => boolean} */
|
||||
export const isInstanceOfInterval = a => {
|
||||
return typeof a === 'object'
|
||||
&& a !== null
|
||||
&& ('years' in a
|
||||
|| 'months' in a
|
||||
|| 'days' in a
|
||||
|| 'hours' in a
|
||||
|| 'minutes' in a
|
||||
|| 'seconds' in a
|
||||
|| 'milliseconds' in a
|
||||
)
|
||||
return (
|
||||
typeof a === 'object' &&
|
||||
a !== null &&
|
||||
('years' in a ||
|
||||
'months' in a ||
|
||||
'days' in a ||
|
||||
'hours' in a ||
|
||||
'minutes' in a ||
|
||||
'seconds' in a ||
|
||||
'milliseconds' in a)
|
||||
)
|
||||
}
|
||||
|
||||
export const modifyPgTypes = () => {
|
||||
|
||||
@@ -11,7 +11,7 @@ import Effect.Postgres.Error as E
|
||||
import Effect.Postgres.Error.Except as E.Except
|
||||
import Effect.Postgres.Pool (Pool)
|
||||
import Effect.Postgres.Pool
|
||||
(Config
|
||||
( Config
|
||||
, Pool
|
||||
, PoolConfigRaw
|
||||
, acquireE
|
||||
|
||||
@@ -33,7 +33,7 @@ toString =
|
||||
indent n s = fold $ ((fold $ Array.replicate n " ") <> _) <$> String.split (wrap "\n") s
|
||||
jsError n e =
|
||||
indent n (Effect.message e)
|
||||
<> maybe "" (\s -> "\n" <> indent n s) (Effect.stack e)
|
||||
<> maybe "" (\s -> "\n" <> indent n s) (Effect.stack e)
|
||||
in
|
||||
case _ of
|
||||
Deserializing q es -> "Deserializing " <> show q <> "\n" <> indent 1 (show es)
|
||||
|
||||
@@ -45,7 +45,7 @@ spec =
|
||||
b `shouldEqual` 2
|
||||
it "multiple sessions concurrently" \cfg -> do
|
||||
nums <- X.run $ runPostgres cfg $ parTraverse (\n -> query $ "select $1 :: int" /\ n) (Array.range 1 3)
|
||||
Array.sort nums `shouldEqual` [1, 2, 3]
|
||||
Array.sort nums `shouldEqual` [ 1, 2, 3 ]
|
||||
it "transaction commits" \cfg -> do
|
||||
a <- X.run $ runPostgres cfg do
|
||||
exec_ "create temporary table test_txn_commits (id int);"
|
||||
@@ -60,7 +60,7 @@ spec =
|
||||
exec_ "insert into test_txn_rolls_back values (2);"
|
||||
throwError $ pure $ E.Other $ error "foo"
|
||||
query "select * from test_txn_rolls_back"
|
||||
a `shouldEqual` [1]
|
||||
a `shouldEqual` [ 1 ]
|
||||
it "cursor" \cfg ->
|
||||
X.run $ runPostgres cfg do
|
||||
exec_ $ "create temporary table test_cursor_data (id int primary key generated always as identity)"
|
||||
|
||||
@@ -15,23 +15,23 @@ spec =
|
||||
describe "Data.Postgres.Interval" do
|
||||
it "parse & toRecord" do
|
||||
p <- liftEffect $ Interval.parse "3 days 04:05:06"
|
||||
Interval.toRecord p `shouldEqual` Interval.zero {days = 3, hours = 4, minutes = 5, seconds = 6}
|
||||
Interval.toRecord p `shouldEqual` Interval.zero { days = 3, hours = 4, minutes = 5, seconds = 6 }
|
||||
|
||||
it "make & toRecord" do
|
||||
let p = Interval.make $ Interval.zero {days = 3, hours = 4, minutes = 5, seconds = 6}
|
||||
Interval.toRecord p `shouldEqual` Interval.zero {days = 3, hours = 4, minutes = 5, seconds = 6}
|
||||
let p = Interval.make $ Interval.zero { days = 3, hours = 4, minutes = 5, seconds = 6 }
|
||||
Interval.toRecord p `shouldEqual` Interval.zero { days = 3, hours = 4, minutes = 5, seconds = 6 }
|
||||
|
||||
describe "fromDuration" do
|
||||
for_
|
||||
[ Milliseconds 100.0 /\ Interval.zero {milliseconds = 100.0}
|
||||
, Milliseconds 1000.0 /\ Interval.zero {seconds = 1}
|
||||
, Milliseconds 1100.0 /\ Interval.zero {seconds = 1, milliseconds = 100.0}
|
||||
, Milliseconds 60000.0 /\ Interval.zero {minutes = 1}
|
||||
, Milliseconds 61100.0 /\ Interval.zero {minutes = 1, seconds = 1, milliseconds = 100.0}
|
||||
, Milliseconds 3600000.0 /\ Interval.zero {hours = 1}
|
||||
, Milliseconds 3661100.0 /\ Interval.zero {hours = 1, minutes = 1, seconds = 1, milliseconds = 100.0}
|
||||
, Milliseconds 86400000.0 /\ Interval.zero {days = 1}
|
||||
, Milliseconds 90061100.0 /\ Interval.zero {days = 1, hours = 1, minutes = 1, seconds = 1, milliseconds = 100.0}
|
||||
[ Milliseconds 100.0 /\ Interval.zero { milliseconds = 100.0 }
|
||||
, Milliseconds 1000.0 /\ Interval.zero { seconds = 1 }
|
||||
, Milliseconds 1100.0 /\ Interval.zero { seconds = 1, milliseconds = 100.0 }
|
||||
, Milliseconds 60000.0 /\ Interval.zero { minutes = 1 }
|
||||
, Milliseconds 61100.0 /\ Interval.zero { minutes = 1, seconds = 1, milliseconds = 100.0 }
|
||||
, Milliseconds 3600000.0 /\ Interval.zero { hours = 1 }
|
||||
, Milliseconds 3661100.0 /\ Interval.zero { hours = 1, minutes = 1, seconds = 1, milliseconds = 100.0 }
|
||||
, Milliseconds 86400000.0 /\ Interval.zero { days = 1 }
|
||||
, Milliseconds 90061100.0 /\ Interval.zero { days = 1, hours = 1, minutes = 1, seconds = 1, milliseconds = 100.0 }
|
||||
]
|
||||
\(i /\ o) -> it ("converts " <> show i) do
|
||||
Interval.toRecord (Interval.fromDuration i) `shouldEqual` o
|
||||
|
||||
@@ -59,7 +59,7 @@ instance Arbitrary GenIntervalSubMonth where
|
||||
minutes <- chooseInt 0 59
|
||||
seconds <- chooseInt 0 59
|
||||
milliseconds <- chooseFloat 0.0 999.9
|
||||
pure $ wrap $ Interval.make $ Interval.zero {days = days, hours = hours, minutes = minutes, seconds = seconds, milliseconds = milliseconds}
|
||||
pure $ wrap $ Interval.make $ Interval.zero { days = days, hours = hours, minutes = minutes, seconds = seconds, milliseconds = milliseconds }
|
||||
|
||||
newtype GenInterval = GenInterval Interval
|
||||
|
||||
@@ -73,7 +73,7 @@ instance Arbitrary GenInterval where
|
||||
minutes <- chooseInt 0 59
|
||||
seconds <- chooseInt 0 59
|
||||
milliseconds <- chooseFloat 0.0 999.9
|
||||
pure $ wrap $ Interval.make {years, months, days, hours, minutes, seconds, milliseconds}
|
||||
pure $ wrap $ Interval.make { years, months, days, hours, minutes, seconds, milliseconds }
|
||||
|
||||
newtype GenSmallInt = GenSmallInt Int
|
||||
|
||||
@@ -225,13 +225,14 @@ spec =
|
||||
let
|
||||
durationFromGenInterval :: forall d. Semigroup d => Duration d => Newtype d Number => GenIntervalSubMonth -> d
|
||||
durationFromGenInterval = fromMaybe (wrap 0.0) <<< Interval.toDuration <<< unwrap
|
||||
|
||||
durationEq :: forall d. Duration d => Newtype d Number => d -> d -> Boolean
|
||||
durationEq a b = Number.abs (unwrap a - unwrap b) <= 0.001
|
||||
check @Milliseconds @GenIntervalSubMonth { purs: "Milliseconds", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq}
|
||||
check @Seconds @GenIntervalSubMonth { purs: "Seconds", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq}
|
||||
check @Minutes @GenIntervalSubMonth { purs: "Minutes", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq}
|
||||
check @Hours @GenIntervalSubMonth { purs: "Hours", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq}
|
||||
check @Days @GenIntervalSubMonth { purs: "Days", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq}
|
||||
check @Milliseconds @GenIntervalSubMonth { purs: "Milliseconds", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq }
|
||||
check @Seconds @GenIntervalSubMonth { purs: "Seconds", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq }
|
||||
check @Minutes @GenIntervalSubMonth { purs: "Minutes", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq }
|
||||
check @Hours @GenIntervalSubMonth { purs: "Hours", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq }
|
||||
check @Days @GenIntervalSubMonth { purs: "Days", sql: "interval", fromArb: durationFromGenInterval, isEq: durationEq }
|
||||
|
||||
check @Int @GenSmallInt { purs: "Int", sql: "int2", fromArb: unwrap, isEq: eq }
|
||||
check @Int { purs: "Int", sql: "int4", fromArb: identity, isEq: eq }
|
||||
|
||||
@@ -63,35 +63,35 @@ spec =
|
||||
it "bracket catches error in acq" $ const do
|
||||
either <-
|
||||
flip RE.toEither unit
|
||||
$ bracket
|
||||
(liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ const $ pure unit)
|
||||
(const $ pure unit)
|
||||
$ bracket
|
||||
(liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ const $ pure unit)
|
||||
(const $ pure unit)
|
||||
isLeft either `shouldEqual` true
|
||||
it "bracket catches error in rel" $ const do
|
||||
either <-
|
||||
flip RE.toEither unit
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ pure unit)
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ pure unit)
|
||||
isLeft either `shouldEqual` true
|
||||
it "bracket catches error in go" $ const do
|
||||
either <-
|
||||
flip RE.toEither unit
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ pure unit)
|
||||
(const $ liftAff $ throwError $ Exn.error "foo")
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ pure unit)
|
||||
(const $ liftAff $ throwError $ Exn.error "foo")
|
||||
isLeft either `shouldEqual` true
|
||||
it "forked bracket catches error in acq" $ const do
|
||||
either <- flip RE.toEither unit do
|
||||
fiber <-
|
||||
fork
|
||||
$ bracket
|
||||
(liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ const $ pure unit)
|
||||
(const $ pure unit)
|
||||
$ bracket
|
||||
(liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ const $ pure unit)
|
||||
(const $ pure unit)
|
||||
liftAff $ delay $ wrap 1.0
|
||||
join fiber
|
||||
isLeft either `shouldEqual` true
|
||||
@@ -99,10 +99,10 @@ spec =
|
||||
either <- flip RE.toEither unit do
|
||||
fiber <-
|
||||
fork
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ pure unit)
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ liftAff $ throwError $ Exn.error "foo")
|
||||
(const $ pure unit)
|
||||
liftAff $ delay $ wrap 1.0
|
||||
join fiber
|
||||
isLeft either `shouldEqual` true
|
||||
@@ -110,10 +110,10 @@ spec =
|
||||
either <- flip RE.toEither unit do
|
||||
fiber <-
|
||||
fork
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ pure unit)
|
||||
(const $ liftAff $ throwError $ Exn.error "foo")
|
||||
$ bracket
|
||||
(pure unit)
|
||||
(const $ const $ pure unit)
|
||||
(const $ liftAff $ throwError $ Exn.error "foo")
|
||||
liftAff $ delay $ wrap 1.0
|
||||
join fiber
|
||||
isLeft either `shouldEqual` true
|
||||
@@ -121,7 +121,8 @@ spec =
|
||||
either <-
|
||||
flip RE.toEither unit
|
||||
$ parSequence
|
||||
$ [ liftAff $ throwError $ Exn.error "a"
|
||||
$
|
||||
[ liftAff $ throwError $ Exn.error "a"
|
||||
, pure "a"
|
||||
]
|
||||
isLeft either `shouldEqual` true
|
||||
@@ -129,7 +130,8 @@ spec =
|
||||
either <-
|
||||
flip RE.toEither unit
|
||||
$ parOneOf
|
||||
$ [ liftAff $ throwError $ Exn.error "a"
|
||||
$
|
||||
[ liftAff $ throwError $ Exn.error "a"
|
||||
, liftAff $ throwError $ Exn.error "b"
|
||||
]
|
||||
isLeft either `shouldEqual` true
|
||||
|
||||
@@ -49,13 +49,13 @@ spec = describe "Pool" do
|
||||
c <- X.run $ Pool.connect p
|
||||
finally (liftEffect $ X.run $ Pool.release p c) $ joinFiber expect
|
||||
it "acquire" \p -> do
|
||||
c <- X.run$ Pool.connect p
|
||||
liftEffect $ X.run$ Pool.release p c
|
||||
c <- X.run $ Pool.connect p
|
||||
liftEffect $ X.run $ Pool.release p c
|
||||
expect <- forkAff do
|
||||
c'' <- onceAff Pool.acquireE p
|
||||
refEq c c'' `shouldEqual` true
|
||||
c' <- X.run $ Pool.connect p
|
||||
finally (liftEffect $ X.run$ Pool.release p c') $ joinFiber expect
|
||||
finally (liftEffect $ X.run $ Pool.release p c') $ joinFiber expect
|
||||
it "release" \p -> do
|
||||
c <- X.run $ Pool.connect p
|
||||
expect <- forkAff do
|
||||
|
||||
Reference in New Issue
Block a user