Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
/src/.webpack.js
.psc-ide-port
test.sqlite3
test-close.sqlite3
package-lock.json
8 changes: 5 additions & 3 deletions src/SQLite3.purs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ module SQLite3 (
import Prelude

import Data.Either (Either(..))
import Effect (Effect)
import Effect.Aff (Aff, makeAff)
import Effect.Uncurried as EU
import Foreign (Foreign)
Expand All @@ -21,8 +20,11 @@ newDB :: FilePath -> Aff DBConnection
newDB path =
makeAff \cb -> mempty <$ EU.runEffectFn2 Internal._newDB path (EU.mkEffectFn1 $ cb <<< pure)

closeDB :: DBConnection -> Effect Unit
closeDB = EU.runEffectFn1 Internal._closeDB
closeDB :: DBConnection -> Aff Unit
closeDB conn = makeAff \cb ->
mempty <$ EU.runEffectFn3 Internal._closeDB conn
(EU.mkEffectFn1 $ cb <<< Left)
(cb $ Right unit)

queryDB :: DBConnection -> Query -> Array Param -> Aff Foreign
queryDB conn query params = makeAff \cb ->
Expand Down
10 changes: 8 additions & 2 deletions src/SQLite3/Internal.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,14 @@ exports._newDB = function(filename, cb) {
cb(new sqlite3.Database(filename))();
};

exports._closeDB = function(db) {
db.close();
exports._closeDB = function(db, eb, cb) {
db.close(function(err) {
if (err) {
eb(err);
} else {
cb();
}
});
};

exports._queryDB = function(db, query, params, eb, cb) {
Expand Down
8 changes: 7 additions & 1 deletion src/SQLite3/Internal.purs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module SQLite3.Internal (

import Prelude

import Effect (Effect)
import Effect.Exception (Error)
import Effect.Uncurried as EU
import Foreign (Foreign)
Expand All @@ -23,7 +24,12 @@ foreign import data DBConnection :: Type

foreign import _newDB :: EU.EffectFn2 FilePath (EU.EffectFn1 DBConnection Unit) Unit

foreign import _closeDB :: EU.EffectFn1 DBConnection Unit
foreign import _closeDB ::
EU.EffectFn3
DBConnection
(EU.EffectFn1 Error Unit)
(Effect Unit)
Unit

foreign import _queryDB ::
EU.EffectFn5
Expand Down
9 changes: 8 additions & 1 deletion test/Main.purs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import Effect (Effect)
import Effect.Aff (launchAff_)
import Effect.Class (liftEffect)
import Node.FS.Aff (exists, unlink)
import SQLite3 (newDB, queryDB, queryObjectDB)
import SQLite3 (closeDB, newDB, queryDB, queryObjectDB)
import Simple.JSON (read)
import Test.Unit (failure, suite, test)
import Test.Unit.Assert (assert, equal)
Expand Down Expand Up @@ -67,3 +67,10 @@ SELECT name, detail FROM mytable
equal a.detail "bbbb"
Left e ->
failure $ "row didn't deserialize correctly: " <> show e

test "we can close and re-open a database" do
let path = "./test-close.sqlite3"
cDb <- newDB path
closeDB cDb
cDb' <- newDB path
closeDB cDb'