Skip to content
Go to file
Cannot retrieve contributors at this time
64 lines (55 sloc) 2.11 KB
;; Copyright (c) Cognitect, Inc.
;; All rights reserved.
(ns datomic.ion.starter
[clojure.edn :as edn]
[ :as io]
[clojure.string :as str]
[datomic.client.api :as d]
[datomic.ion.starter.utils :as utils]))
(def database-name "datomic-docs-tutorial")
(def get-client
"Return a shared client. Set datomic/ion/starter/config.edn resource
before calling this function."
(memoize #(if-let [r (io/resource "datomic/ion/starter/config.edn")]
(d/client (edn/read-string (slurp r)))
(throw (RuntimeException. "You need to add a resource datomic/ion/starter/config.edn with your connection config")))))
(defn get-connection
"Get shared connection."
(utils/with-retry #(d/connect (get-client) {:db-name database-name})))
(defn- ensure-dataset
"Ensure that a database named db-name exists, running setup-fn
against the shared connection. Returns result of setup-fn"
[db-name setup-sym]
(require (symbol (namespace setup-sym)))
(let [setup-var (resolve setup-sym)
client (get-client)]
(when-not setup-var
(utils/anomaly! :not-found (str "Could not resolve " setup-sym)))
(d/create-database client {:db-name db-name})
(let [conn (get-connection)]
(setup-var conn))))
(defn ensure-sample-dataset
"Creates db (if necessary) and transacts sample data."
(utils/with-retry #(ensure-dataset database-name 'datomic.ion.starter.inventory/load-dataset)))
(defn get-db
"Returns current db value from shared connection."
(d/db (get-connection)))
(defn get-schema
"Returns a data representation of db schema."
(->> (d/pull db '{:eid 0 :selector [{:db.install/attribute [*]}]})
(remove (fn [m] (str/starts-with? (namespace (:db/ident m)) "db")))
(map #(update % :db/valueType :db/ident))
(map #(update % :db/cardinality :db/ident))))
(defn get-items-by-type
"Returns pull maps describing all items matching type"
[db type pull-expr]
(d/q '[:find (pull ?e pull-expr)
:in $ ?type pull-expr
:where [?e :inv/type ?type]]
db type pull-expr))
You can’t perform that action at this time.