Created
April 6, 2016 22:17
-
-
Save mbossenbroek/979339752415f1a30dad71a4b5c6d921 to your computer and use it in GitHub Desktop.
Datomic or-join binding
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(let [uri (str "datomic:mem://" (d/squuid)) | |
_ (d/create-database uri) | |
conn (d/connect uri) | |
schema [ | |
{:db/id #db/id[:db.part/db] | |
:db/ident :a/id | |
:db/valueType :db.type/uuid | |
:db/cardinality :db.cardinality/one | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db] | |
:db/ident :b/as | |
:db/valueType :db.type/ref | |
:db/cardinality :db.cardinality/many | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db] | |
:db/ident :b/id | |
:db/valueType :db.type/string | |
:db/cardinality :db.cardinality/one | |
:db.install/_attribute :db.part/db} | |
{:db/id #db/id[:db.part/db] | |
:db/ident :c/b-id | |
:db/valueType :db.type/string | |
:db/cardinality :db.cardinality/one | |
:db.install/_attribute :db.part/db} | |
] | |
data [ | |
{:db/id (d/tempid :db.part/user -1) | |
:a/id (d/squuid)} | |
{:db/id (d/tempid :db.part/user -2) | |
:b/as #{(d/tempid :db.part/user -1)} | |
:b/id "abc"} | |
{:db/id (d/tempid :db.part/user -3) | |
:c/b-id "abc"} | |
] | |
] | |
@(d/transact conn schema) | |
@(d/transact conn data) | |
(let [db (d/db conn) | |
?a (->> (d/datoms db :aevt :a/id) | |
(map :e) | |
first)] | |
(is (= | |
;; normal query | |
(d/q '{:find [[?c ...]] | |
:in [$ ?a] | |
:where [[?b :b/as ?a] | |
[?b :b/id ?data-id] | |
[?c :c/b-id ?data-id]]} | |
(d/db conn) ?a) | |
;; query with or-join | |
(d/q '{:find [[?c ...]] | |
:in [$ ?a] | |
:where [[?b :b/as ?a] | |
(or-join [?b] | |
(and [?b :b/id ?data-id] | |
[?c :c/b-id ?data-id]))]} | |
(d/db conn) ?a))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment