Skip to content

Instantly share code, notes, and snippets.

@a2ndrade
Last active December 15, 2015 08:59
Show Gist options
  • Save a2ndrade/5235019 to your computer and use it in GitHub Desktop.
Save a2ndrade/5235019 to your computer and use it in GitHub Desktop.
Datomic: constructor-like transaction function
; See http://stackoverflow.com/questions/15595540/datomic-insert-blocks
(require '[datomic.api :as d])
(def uri "datomic:mem://test")
(d/create-database uri)
(def conn (d/connect uri))
(d/transact conn [{:db.install/_attribute :db.part/db
:db/id #db/id[:db.part/db]
:db/ident :car/model
: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 :car/numberplate
: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 :renter/name
: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 :renter/socialsecuritynumber
: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 :rentevent/car
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one}
{:db.install/_attribute :db.part/db
:db/id #db/id[:db.part/db]
:db/ident :rentevent/renter
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one}])
(def new-rentevent (d/function '{:lang :clojure
:params [db cm cp rn rs]
:code [{:db/id #db/id[:db.part/user -1]
:car/model cm
:car/numberplate cp}
{:db/id #db/id[:db.part/user -2],
:renter/name rn
:renter/socialsecuritynumber rs}
{:db/id #db/id[:db.part/user]
:rentevent/car #db/id[:db.part/user -1]
:rentevent/renter #db/id[:db.part/user -2]}]}))
(d/transact conn [{:db/id #db/id[:db.part/user]
:db/ident :new-rentevent
:db/fn new-rentevent}])
(d/transact conn [[:new-rentevent "Ferrari" "RENT ME!" "John Smith" "123456789"]])
(d/transact conn [[:new-rentevent "Jaguar" "AVAILABLE" "Kate Nash" "567894345"]])
(d/transact conn [[:new-rentevent "Maserati" "PICK ME!" "Justin Williams" "789134353"]])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment