Liking cljdoc? Tell your friends :D

datascript-schema

[insert explosive graphic]

[insert wise quote]

Usage

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}}


License

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