Skip to content

Commit 2264e4b

Browse files
authored
Merge pull request #2 from codeboost/improve-hashing
improve hashing
2 parents 2ad2690 + 1f96524 commit 2264e4b

File tree

3 files changed

+33
-18
lines changed

3 files changed

+33
-18
lines changed

src/xitdb/array_list.clj

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,9 @@
4444
(common/-read-from-cursor cursor)))
4545

4646
(nth [_ i not-found]
47-
(try
48-
(let [cursor (.getCursor ral (long i))]
49-
(if cursor
50-
(common/-read-from-cursor cursor)
51-
not-found))
52-
(catch Exception _
47+
(let [cursor (.getCursor ral (long i))]
48+
(if cursor
49+
(common/-read-from-cursor cursor)
5350
not-found)))
5451

5552
clojure.lang.ILookup

src/xitdb/linked_list.clj

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,9 @@
3838
(common/-read-from-cursor cursor)))
3939

4040
(nth [_ i not-found]
41-
(try
42-
(let [cursor (.getCursor rlal (long i))]
43-
(if cursor
44-
(common/-read-from-cursor cursor)
45-
not-found))
46-
(catch Exception _
41+
(let [cursor (.getCursor rlal (long i))]
42+
(if cursor
43+
(common/-read-from-cursor cursor)
4744
not-found)))
4845

4946
clojure.lang.ILookup

src/xitdb/util/conversion.clj

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,33 @@
5656
Uses the MessageDigest from the database."
5757
^bytes [^Database jdb v]
5858
(if (nil? v)
59-
(byte-array (-> jdb .-header .hashSize))
60-
(let [hash-code (hash v)
61-
buffer (ByteBuffer/allocate Integer/BYTES)
62-
_ (.putInt buffer hash-code)
63-
bytes (.array buffer)]
64-
(.digest (.md jdb) bytes))))
59+
(byte-array (-> jdb .md .getDigestLength))
60+
(do
61+
;; add type name
62+
(.update (.md jdb) (-> v .getClass .getCanonicalName (.getBytes "UTF-8")))
63+
;; add null byte as separator
64+
(.update (.md jdb) (byte-array 1))
65+
;; add the value
66+
(cond
67+
(validation/lazy-seq? v)
68+
(throw (IllegalArgumentException. "Lazy sequences can be infinite and not allowed!"))
69+
70+
(bytes? v)
71+
(.update (.md jdb) v)
72+
73+
(instance? Database$Bytes v)
74+
(.update (.md jdb) (.value v))
75+
76+
(coll? v)
77+
(with-open [os (java.security.DigestOutputStream. (java.io.OutputStream/nullOutputStream) (.md jdb))]
78+
(with-open [writer (java.io.OutputStreamWriter. os)]
79+
(binding [*out* writer]
80+
(pr v))))
81+
82+
:else
83+
(.update (.md jdb) (.getBytes (str v) "UTF-8")))
84+
;; finish hash
85+
(.digest (.md jdb)))))
6586

6687
(defn ^Slot primitive-for
6788
"Converts a Clojure primitive value to its corresponding XitDB representation.

0 commit comments

Comments
 (0)