2016-11-22 01:23:53 +00:00
|
|
|
;; Copyright 2016 Mozilla
|
|
|
|
;;
|
|
|
|
;; Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
|
|
;; this file except in compliance with the License. You may obtain a copy of the
|
|
|
|
;; License at http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
;; Unless required by applicable law or agreed to in writing, software distributed
|
|
|
|
;; under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
|
|
;; CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
|
|
;; specific language governing permissions and limitations under the License.
|
2016-08-06 00:58:46 +00:00
|
|
|
|
|
|
|
(ns datomish.query-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.api :as d]
|
2016-08-19 19:21:20 +00:00
|
|
|
#?@(:clj [[datomish.jdbc-sqlite]
|
|
|
|
[datomish.pair-chan :refer [go-pair <?]]
|
2016-08-06 00:58:46 +00:00
|
|
|
[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 <! >!]]])
|
2016-09-08 00:16:03 +00:00
|
|
|
#?@(:cljs [[datomish.js-sqlite]
|
2016-08-19 19:21:20 +00:00
|
|
|
[datomish.pair-chan]
|
2016-08-06 00:58:46 +00:00
|
|
|
[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 [<! >!]]]))
|
|
|
|
#?(:clj
|
|
|
|
(:import [clojure.lang ExceptionInfo]))
|
|
|
|
#?(:clj
|
|
|
|
(:import [datascript.db DB])))
|
|
|
|
|
|
|
|
#?(:cljs
|
|
|
|
(def Throwable js/Error))
|
|
|
|
|
|
|
|
(def test-schema
|
2016-08-07 00:35:24 +00:00
|
|
|
[{:db/id (d/id-literal :db.part/user)
|
2016-08-06 00:58:46 +00:00
|
|
|
:db/ident :x
|
|
|
|
:db/unique :db.unique/identity
|
2016-08-06 01:41:49 +00:00
|
|
|
:db/valueType :db.type/long
|
2016-08-06 00:58:46 +00:00
|
|
|
:db.install/_attribute :db.part/db}
|
|
|
|
])
|
|
|
|
|
|
|
|
(deftest-async test-q
|
|
|
|
(with-tempfile [t (tempfile)]
|
|
|
|
(let [conn (<? (d/<connect t))
|
|
|
|
{tx0 :tx} (<? (d/<transact! conn test-schema))]
|
|
|
|
(try
|
|
|
|
(let [{tx1 :tx} (<? (d/<transact! conn [{:db/id 101 :x 505}]))]
|
|
|
|
|
|
|
|
(is (= (<? (d/<q (d/db conn)
|
2016-08-30 19:44:12 +00:00
|
|
|
[:find '?e '?a '?v '?tx :in '$ :where
|
|
|
|
'[?e ?a ?v ?tx]
|
|
|
|
[(list '> '?tx tx0)]
|
|
|
|
[(list '!= '?a (d/entid (d/db conn) :db/txInstant))] ;; TODO: map ident->entid for values.
|
|
|
|
] {}))
|
2016-08-06 00:58:46 +00:00
|
|
|
[[101 (d/entid (d/db conn) :x) 505 tx1]]))) ;; TODO: map entid->ident on egress.
|
|
|
|
(finally
|
|
|
|
(<? (d/<close conn)))))))
|