Skip to content

Commit

Permalink
[#109] This is exploratory work for providing map interface on top of…
Browse files Browse the repository at this point in the history
… datalevin
  • Loading branch information
ieugen committed May 12, 2023
1 parent 2504be9 commit 330f2c0
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 3 deletions.
5 changes: 3 additions & 2 deletions examples/simple-deps/deps.edn
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{:paths ["src"]
:deps {io.github.juji-io/datalevin #_{:git/tag "0.6.21"
:deps {datalevin/datalevin #_{:git/tag "0.6.21"
:git/sha "41d1915eb67b1606aab4807058ff24bb41fdb8e8"}
{:local/root "../.."}
#_{:local/root "../.."}
{:mvn/version "0.8.9"}
com.cognitect/transit-clj {:mvn/version "1.0.329"}}
:aliases {:dev {:jvm-opts ["--add-opens=java.base/java.nio=ALL-UNNAMED"
"--add-opens=java.base/sun.nio.ch=ALL-UNNAMED"]}}}
77 changes: 77 additions & 0 deletions examples/simple-deps/src/java_map.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
(ns java-map
(:require [datalevin.core :as d]))


(defn ->map
"Provide an implementation of java.util.Map interface backed by datalevin / LMDB."
[db table]
(d/open-dbi db table)
(reify java.util.Map

(clear [_this]
(throw (ex-info "Unimplemented" {})))

(containsKey [_this key]
(let [kv (d/get-value db table key :data :data false)]
(some? kv)))

(containsValue [_this value]
(throw (ex-info "Unimplemented" {})))

(entrySet [_this]
(throw (ex-info "Unimplemented" {})))

(get [_this key]
(d/get-value db table key))

(isEmpty [_this]
(throw (ex-info "Unimplemented" {})))

(keySet [_this]
(throw (ex-info "Unimplemented" {})))

(put [_this key value]
(d/transact-kv db [[:put table key value]]))

(remove [_this key]
(let [kv (d/get-value db table key :data :data false)]
(when (some? kv)
(d/transact-kv db [[:del table key :data]])
(nth kv 1))))

(size [_this]
(throw (ex-info "Unimplemented" {})))

(values [_this]
(throw (ex-info "Unimplemented" {})))))

(comment

(def db (d/open-kv "/tmp/datalevin/map"))

(d/open-dbi db "map-table")

(d/transact-kv
db
[[:put "map-table" :datalevin "Hello, world!"]
[:put "map-table" 42 {:saying "So Long, and thanks for all the fish"
:source "The Hitchhiker's Guide to the Galaxy"}]
[:put "map-table" #inst "1991-12-25" "USSR broke apart" :instant]
[:put "map-table" #inst "1989-11-09" "The fall of the Berlin Wall" :instant]])

(d/get-value db "map-table" 1 :data :data false)
(d/get-value db "map-table" 36 :data :data false)

(d/transact-kv db [[:del "map-table" 36 :data]])

(let [my-map (->map db "map-table")]
(println (.get my-map 42))
(.put my-map 36 "Is the secret number")
(.get my-map 36)
(println (.remove my-map 36))
(println (.containsKey my-map 36))
(println (.containsKey my-map 3))
(println (.containsKey my-map 42)))

(d/close-kv db)
)
3 changes: 2 additions & 1 deletion examples/simple-deps/src/kv.clj
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
(ns kv)
(ns kv
(:require [datalevin.core :as d]))

(require '[datalevin.core :as d])
(import '[java.util Date])
Expand Down

0 comments on commit 330f2c0

Please sign in to comment.