|
7 | 7 | ReadArrayList ReadCountedHashSet ReadCursor ReadHashMap ReadCountedHashMap
|
8 | 8 | ReadHashSet Slot Tag WriteArrayList WriteCountedHashSet WriteCursor WriteCountedHashMap
|
9 | 9 | WriteHashMap WriteHashSet WriteLinkedArrayList]
|
10 |
| - [java.nio ByteBuffer])) |
| 10 | + [java.io OutputStream OutputStreamWriter] |
| 11 | + [java.nio ByteBuffer] |
| 12 | + [java.security DigestOutputStream])) |
11 | 13 |
|
12 | 14 | (defn xit-tag->keyword
|
13 | 15 | "Converts a XitDB Tag enum to a corresponding Clojure keyword."
|
|
57 | 59 | ^bytes [^Database jdb v]
|
58 | 60 | (if (nil? v)
|
59 | 61 | (byte-array (-> jdb .md .getDigestLength))
|
60 |
| - (do |
| 62 | + (let [digest (.md jdb)] |
61 | 63 | ;; add type name
|
62 |
| - (.update (.md jdb) (-> v .getClass .getCanonicalName (.getBytes "UTF-8"))) |
| 64 | + (.update digest (-> v .getClass .getCanonicalName (.getBytes "UTF-8"))) |
63 | 65 | ;; add null byte as separator
|
64 |
| - (.update (.md jdb) (byte-array 1)) |
| 66 | + (.update digest (byte-array 1)) |
65 | 67 | ;; add the value
|
66 | 68 | (cond
|
67 | 69 | (validation/lazy-seq? v)
|
68 | 70 | (throw (IllegalArgumentException. "Lazy sequences can be infinite and not allowed!"))
|
69 | 71 |
|
70 | 72 | (bytes? v)
|
71 |
| - (.update (.md jdb) v) |
| 73 | + (.update digest v) |
72 | 74 |
|
73 | 75 | (instance? Database$Bytes v)
|
74 |
| - (.update (.md jdb) (.value v)) |
| 76 | + (.update digest (.value v)) |
75 | 77 |
|
76 | 78 | (coll? v)
|
77 |
| - (with-open [os (java.security.DigestOutputStream. (java.io.OutputStream/nullOutputStream) (.md jdb))] |
78 |
| - (with-open [writer (java.io.OutputStreamWriter. os)] |
| 79 | + (with-open [os (DigestOutputStream. (OutputStream/nullOutputStream) digest)] |
| 80 | + (with-open [writer (OutputStreamWriter. os)] |
79 | 81 | (binding [*out* writer]
|
80 | 82 | (pr v))))
|
81 | 83 |
|
82 | 84 | :else
|
83 |
| - (.update (.md jdb) (.getBytes (str v) "UTF-8"))) |
| 85 | + (.update digest (.getBytes (str v) "UTF-8"))) |
84 | 86 | ;; finish hash
|
85 |
| - (.digest (.md jdb))))) |
| 87 | + (.digest digest)))) |
86 | 88 |
|
87 | 89 | (defn ^Slot primitive-for
|
88 | 90 | "Converts a Clojure primitive value to its corresponding XitDB representation.
|
|
0 commit comments