Skip to content

Instantly share code, notes, and snippets.

@ouvanous
Created June 25, 2020 12:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ouvanous/f046da540656ed17beb509d579ebb27c to your computer and use it in GitHub Desktop.
Save ouvanous/f046da540656ed17beb509d579ebb27c to your computer and use it in GitHub Desktop.
(ns app.core
(:require [crux.api :as crux]
[clojure.java.io :as io])
(:gen-class)
(:import [crux.api ICruxAPI]))
(defn start-node [storage-dir]
(crux/start-node {:crux.node/topology '[crux.standalone/topology
crux.kv.rocksdb/kv-store]
:crux.standalone/event-log-dir "crux-store/eventlog-1"
:crux.kv/db-dir (str (io/file "crux-store" "db"))}))
(defonce node (start-node "crux-store"))
(defn insert-items
[items]
(crux/submit-tx
node
(mapv (fn [item]
[:crux.tx/put item])
items)))
(defn all
[]
(crux/q
(crux/db node)
{:find '[?id]
:where '[[?e :crux.db/id ?id]]}))
(defn by-status
[status]
(crux/q
(crux/db node)
{:find '[?id]
:where '[[?e :crux.db/id ?id]
[?e :app/status ?st]]
:args [{'?st status}]}))
(defn cid
[idx status]
(println idx status)
(keyword (str "item-" idx "-" (name status))))
(defn create-items
[items status]
(insert-items
(mapv (fn [idx]
{:crux.db/id (cid idx status)
:app/status status})
items)))
(defn add-drafts
[]
(create-items (range 5) :draft))
(defn evict
[items]
(crux/submit-tx
node
(mapv (fn [item]
[:crux.tx/evict item])
items)))
(defn add-published
[]
(let [items (range 3)
drafts-id (map (fn [idx]
(cid idx :draft))
items)]
(create-items items :okok)
(evict drafts-id)))
(defn set-to-published
[])
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "OK ...")
(println (add-drafts))
; (Thread/sleep 500)
(println (all))
(println (add-published))
; (Thread/sleep 500)
(println (all)))
@refset
Copy link

refset commented Jun 25, 2020

This is what is printed for me with 1.9.1:

OK ...
0 :draft
1 :draft
2 :draft
3 :draft
4 :draft
#:crux.tx{:tx-id 0, :tx-time #inst "2020-06-25T13:16:42.625-00:00"}
OK ...
#{[:item-1-draft] [:item-2-draft] [:item-4-draft] [:item-3-draft] [:item-0-draft]}
0 :okok
1 :okok
2 :okok
0 :draft
1 :draft
2 :draft
#:crux.tx{:tx-id 2, :tx-time #inst "2020-06-25T13:17:21.457-00:00"}
#{[:item-2-okok] [:item-4-draft] [:item-1-okok] [:item-3-draft] [:item-0-okok]}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment