Skip to content

Instantly share code, notes, and snippets.

@Jaretbinford
Last active September 17, 2018 20:11
Show Gist options
  • Save Jaretbinford/b20cd99cf999673c148e3dac7000e1d2 to your computer and use it in GitHub Desktop.
Save Jaretbinford/b20cd99cf999673c148e3dac7000e1d2 to your computer and use it in GitHub Desktop.
RESULTS:
=> #'datomic.or.join/db
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" ["desc1"])
=> [[123] [124]]
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" [""])
=> [[123]]
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" ["desc1" "desc2"])
=> [[123] [124] [125]]
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 3" [""])
=> [[125]]
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 3" ["abc" "foo" "blah"])
=> [[125]]
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 3" [])
=> []
;;;; DB and schema:
(ns datomic.or.join
(:require
[clojure.data.json :as json]
[clojure.edn :as edn]
[clojure.java.io :as io]
[clojure.pprint :as pp]
[datomic.client.api :as d]
[datomic.ion.lambda.api-gateway :as apigw]))
(require '[datomic.client.api :as d]
'[clojure.pprint :as pp])
(def cfg {:server-type :ion
:region "us-east-1"
:system "jaret-lambda-test"
:query-group "jaret-lambda-test"
:endpoint "http://entry.jaret-lambda-test.us-east-1.datomic.net:8182/"
:proxy-port 8182})
(def client (d/client cfg))
(d/list-databases client {})
(d/create-database client {:db-name "or-join"})
(def conn (d/connect client {:db-name "or-join"}))
(def or-schema [{:db/ident :resource/label
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "labels"}
{:db/ident :resource/description
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/doc "descriptions"}
{:db/ident :resource/id
:db/valueType :db.type/long
:db/cardinality :db.cardinality/one
:db/doc "id number"}])
(d/transact conn {:tx-data or-schema})
(def first-data [{ :resource/label "label 1"
:resource/description "desc1"
:resource/id 123}
{:resource/label "label 2"
:resource/description "desc1"
:resource/id 124}
{:resource/label "label 3"
:resource/description "desc2"
:resource/id 125}])
(d/transact conn {:tx-data first-data})
(def db (d/db conn))
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" ["desc1"])
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" ["desc1" "desc2"])
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 1" [""])
(d/q '[:find ?id :in $ ?l [?d ...]
:where
(or-join [?e ?l ?d] [?e :resource/label ?l] [?e :resource/description ?d])
[?e :resource/id ?id] ]
db "label 3" [""])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment