Part 2: Add ISQLiteConnectionFactory and CLJC test that uses it.
This commit is contained in:
parent
cca5010671
commit
bf080ced3c
5 changed files with 60 additions and 0 deletions
|
@ -38,3 +38,12 @@
|
||||||
(j/get-connection spec)
|
(j/get-connection spec)
|
||||||
(assoc spec :connection)
|
(assoc spec :connection)
|
||||||
(->JDBCSQLiteConnection)))))
|
(->JDBCSQLiteConnection)))))
|
||||||
|
|
||||||
|
(extend-protocol s/ISQLiteConnectionFactory
|
||||||
|
String
|
||||||
|
(<sqlite-connection [path]
|
||||||
|
(open path))
|
||||||
|
|
||||||
|
java.io.File
|
||||||
|
(<sqlite-connection [path]
|
||||||
|
(open path)))
|
||||||
|
|
|
@ -35,3 +35,12 @@
|
||||||
(->
|
(->
|
||||||
(.open sqlite.DB path (clj->js {:mode mode}))
|
(.open sqlite.DB path (clj->js {:mode mode}))
|
||||||
(.then ->SQLite3Connection))))
|
(.then ->SQLite3Connection))))
|
||||||
|
|
||||||
|
(extend-protocol s/ISQLiteConnectionFactory
|
||||||
|
string
|
||||||
|
(<sqlite-connection [path]
|
||||||
|
(open path))
|
||||||
|
|
||||||
|
object ;; TODO: narrow this to the result of node-tempfile/tempfile.
|
||||||
|
(<sqlite-connection [tempfile]
|
||||||
|
(open (.-name tempfile))))
|
||||||
|
|
|
@ -33,6 +33,11 @@
|
||||||
[db]
|
[db]
|
||||||
"Close this SQLite connection. Returns a pair channel of [nil error]."))
|
"Close this SQLite connection. Returns a pair channel of [nil error]."))
|
||||||
|
|
||||||
|
(defprotocol ISQLiteConnectionFactory
|
||||||
|
(<sqlite-connection
|
||||||
|
[path]
|
||||||
|
"Open an ISQLiteConnection to `path`. Returns a pair channel of `[sqlite-connection error]`"))
|
||||||
|
|
||||||
(defn execute!
|
(defn execute!
|
||||||
[db [sql & bindings]]
|
[db [sql & bindings]]
|
||||||
(-execute! db sql bindings))
|
(-execute! db sql bindings))
|
||||||
|
|
35
test/datomish/sqlite_user_version_test.cljc
Normal file
35
test/datomish/sqlite_user_version_test.cljc
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
;; This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
(ns datomish.sqlite-user-version-test
|
||||||
|
#?(:cljs
|
||||||
|
(:require-macros
|
||||||
|
[datomish.pair-chan :refer [go-pair <?]]
|
||||||
|
[datomish.node-tempfile-macros :refer [with-tempfile]]
|
||||||
|
[cljs.core.async.macros :as a :refer [go]]))
|
||||||
|
(:require
|
||||||
|
[datomish.util :as util :refer [raise]]
|
||||||
|
[datomish.sqlite :as s]
|
||||||
|
#?@(:clj [[datomish.pair-chan :refer [go-pair <?]]
|
||||||
|
[tempfile.core :refer [tempfile with-tempfile]]
|
||||||
|
[datomish.test-macros :refer [deftest-async]]
|
||||||
|
[clojure.test :as t :refer [is are deftest testing]]
|
||||||
|
[clojure.core.async :refer [go <! >!]]])
|
||||||
|
#?@(:cljs [[datomish.pair-chan]
|
||||||
|
[datomish.test-macros :refer-macros [deftest-async]]
|
||||||
|
[datomish.node-tempfile :refer [tempfile]]
|
||||||
|
[cljs.test :as t :refer-macros [is are deftest testing async]]
|
||||||
|
[cljs.core.async :as a :refer [<! >!]]])))
|
||||||
|
|
||||||
|
(deftest-async test-all-rows
|
||||||
|
(with-tempfile [t (tempfile)]
|
||||||
|
(let [db (<? (s/<sqlite-connection t))]
|
||||||
|
(try
|
||||||
|
(<? (s/execute! db ["CREATE TABLE test (a INTEGER)"]))
|
||||||
|
(<? (s/execute! db ["INSERT INTO test VALUES (?)" 1]))
|
||||||
|
(<? (s/execute! db ["INSERT INTO test VALUES (?)" 2]))
|
||||||
|
(let [rows (<? (s/all-rows db ["SELECT * FROM test ORDER BY a ASC"]))]
|
||||||
|
(is (= rows [{:a 1} {:a 2}])))
|
||||||
|
(finally
|
||||||
|
(<? (s/close db)))))))
|
|
@ -3,6 +3,7 @@
|
||||||
[doo.runner :refer-macros [doo-tests doo-all-tests]]
|
[doo.runner :refer-macros [doo-tests doo-all-tests]]
|
||||||
[cljs.test :as t :refer-macros [is are deftest testing]]
|
[cljs.test :as t :refer-macros [is are deftest testing]]
|
||||||
datomish.promise-sqlite-test
|
datomish.promise-sqlite-test
|
||||||
|
datomish.sqlite-user-version-test
|
||||||
datomish.test.util
|
datomish.test.util
|
||||||
datomish.test.transforms
|
datomish.test.transforms
|
||||||
datomish.test.query
|
datomish.test.query
|
||||||
|
@ -10,6 +11,7 @@
|
||||||
|
|
||||||
(doo-tests
|
(doo-tests
|
||||||
'datomish.promise-sqlite-test
|
'datomish.promise-sqlite-test
|
||||||
|
'datomish.sqlite-user-version-test
|
||||||
'datomish.test.util
|
'datomish.test.util
|
||||||
'datomish.test.transforms
|
'datomish.test.transforms
|
||||||
'datomish.test.query
|
'datomish.test.query
|
||||||
|
|
Loading…
Reference in a new issue