Last active
February 6, 2020 09:22
-
-
Save ivarref/dc2a5698cd0b791121bfadfa934bcd74 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| (ns dato.tuples2 | |
| (:require [datomic.api :as d])) ; Datomic pro 0.9.6024 | |
| (def url "datomic:mem://test-db") | |
| (def conn (do (d/delete-database url) | |
| (d/create-database url) | |
| (d/connect url))) | |
| (def schema | |
| [{:db/ident :student/first | |
| :db/valueType :db.type/string | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :student/last | |
| :db/valueType :db.type/string | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :student/email | |
| :db/valueType :db.type/string | |
| :db/cardinality :db.cardinality/one | |
| :db/unique :db.unique/identity} | |
| {:db/ident :semester/year | |
| :db/valueType :db.type/long | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :semester/season | |
| :db/valueType :db.type/keyword | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :semester/year+season | |
| :db/valueType :db.type/tuple | |
| :db/tupleAttrs [:semester/year :semester/season] | |
| :db/cardinality :db.cardinality/one | |
| :db/unique :db.unique/identity} | |
| {:db/ident :course/id | |
| :db/valueType :db.type/string | |
| :db/unique :db.unique/identity | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :course/name | |
| :db/valueType :db.type/string | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :reg/course | |
| :db/valueType :db.type/ref | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :reg/semester | |
| :db/valueType :db.type/ref | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :reg/student | |
| :db/valueType :db.type/ref | |
| :db/cardinality :db.cardinality/one} | |
| {:db/ident :reg/course+semester+student | |
| :db/valueType :db.type/tuple | |
| :db/tupleAttrs [:reg/course :reg/semester :reg/student] | |
| :db/cardinality :db.cardinality/one | |
| :db/unique :db.unique/identity}]) | |
| @(d/transact conn schema) | |
| @(d/transact conn [{:semester/year 2018 | |
| :semester/season :fall} | |
| {:course/id "BIO-101"} | |
| {:student/first "John" | |
| :student/last "Doe" | |
| :student/email "[email protected]"}]) | |
| @(d/transact conn [{:reg/course [:course/id "BIO-101"] | |
| :reg/semester [:semester/year+season [2018 :fall]] | |
| :reg/student [:student/email "[email protected]"]}]) | |
| (defn db-id [lookup-ref] | |
| (d/q '[:find ?e . | |
| :in $ ?id-attr ?value | |
| :where | |
| [?e ?id-attr ?value]] | |
| (d/db conn) | |
| (first lookup-ref) | |
| (second lookup-ref))) | |
| (comment | |
| (d/q '[:find (pull ?e [*]) . | |
| :in $ ?course-semester-student | |
| :where | |
| [?e :reg/course+semester+student ?course-semester-student]] | |
| (d/db conn) | |
| [(db-id [:course/id "BIO-101"]) | |
| (db-id [:semester/year+season [2018 :fall]]) | |
| (db-id [:student/email "[email protected]"])])) | |
| ; => | |
| ;{:db/id 17592186045422, | |
| ; :reg/course #:db{:id 17592186045419}, | |
| ; :reg/semester #:db{:id 17592186045418}, | |
| ; :reg/student #:db{:id 17592186045420}, | |
| ; :reg/course+semester+student [17592186045419 17592186045418 17592186045420]} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment