[insert explosive graphic]
[insert wise quote]
A simple utility to replicate what datomic schema has
Preparing
(ns my-project.core
(:require
[datascript.core :as d]
[datascript-schema.core :as ds]))
(def conn (d/create-conn))
(ds/listen-on-schema-change! conn)
;; or you can attach callback
;;
;; (defn callback
;; [tx-report]
;; do something)
;;
;; (ds/listen-on-schema-change! conn callback)
(defn current-schema
[]
(:schema @conn))
Schema is data that has :db/ident
under the same eid
Actually trying it
;; Adding new schema
user> (d/transact conn [{:db/id -1
:db/ident :role/members
:db/valueType [:db/ident :db.type/ref]
:db/cardinality [:db/ident :db.cardinality/many]}])
user> (current-schema)
;; {:db/ident {:db/unique :db.unique/identity},
;; :db/valueType {:db/valueType :db.type/ref},
;; :db/unique {:db/valueType :db.type/ref},
;; :db/cardinality {:db/valueType :db.type/ref},
;; :role/members {:db/cardinality :db.cardinality/many,
;; :db/valueType :db.type/ref}}
;; Updating schema
(d/transact conn [{:db/id -1
:db/ident :role/members
:db/cardinality [:db/ident :db.cardinality/one]}])
user> (current-schema)
;; {:db/ident {:db/unique :db.unique/identity},
;; :db/valueType {:db/valueType :db.type/ref},
;; :db/unique {:db/valueType :db.type/ref},
;; :db/cardinality {:db/valueType :db.type/ref},
;; :role/members {:db/cardinality :db.cardinality/one, :db/valueType :db.type/ref}}
;; Retracting a part of schema
user> (d/transact conn [[:db/retract
[:db/ident :role/members]
:db/valueType
[:db/ident :db.type/ref]]])
user> (current-schema)
;; {:db/ident {:db/unique :db.unique/identity},
;; :db/valueType {:db/valueType :db.type/ref},
;; :db/unique {:db/valueType :db.type/ref},
;; :db/cardinality {:db/valueType :db.type/ref},
;; :role/members {:db/cardinality :db.cardinality/one}}
;; Completely retract a schema
user> (d/transact conn [[:db.fn/retractEntity [:db/ident :role/members]]])
user> (current-schema)
;; {:db/ident {:db/unique :db.unique/identity},
;; :db/valueType {:db/valueType :db.type/ref},
;; :db/unique {:db/valueType :db.type/ref},
;; :db/cardinality {:db/valueType :db.type/ref}}
Copyright © 2018 fmnasution
Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close