Skip to content

fmnasution/datascript-schema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published