Skip to content

Commit 883e3b0

Browse files
committed
hash with format tag instead of class name
1 parent 87cc49e commit 883e3b0

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

src/xitdb/util/conversion.clj

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,26 @@
2828
(= tag Tag/FLOAT) :float
2929
:else :unknown))
3030

31+
(defn fmt-tag-keyword [v]
32+
(cond
33+
(keyword? v) :keyword
34+
(boolean? v) :boolean
35+
(number? v) :key-integer
36+
(instance? java.time.Instant v) :inst
37+
(instance? java.util.Date v) :date
38+
(coll? v) :coll
39+
(string? v) :string))
40+
3141
;; map of logical tag -> string used as formatTag in the Bytes record.
3242
(def fmt-tag-value
3343
{:keyword "kw"
3444
:boolean "bl"
3545
:key-integer "ki"
3646
:nil "nl" ;; TODO: Could use Tag/NONE instead
3747
:inst "in"
38-
:date "da"})
48+
:date "da"
49+
:coll "co"
50+
:string "st"})
3951

4052
(def true-str "#t")
4153
(def false-str "#f")
@@ -59,11 +71,11 @@
5971
^bytes [^Database jdb v]
6072
(if (nil? v)
6173
(byte-array (-> jdb .md .getDigestLength))
62-
(let [digest (.md jdb)]
63-
;; add type name
64-
(.update digest (-> v .getClass .getCanonicalName (.getBytes "UTF-8")))
65-
;; add null byte as separator
66-
(.update digest (byte-array 1))
74+
(let [digest (.md jdb)
75+
fmt-tag (or (some-> v fmt-tag-keyword fmt-tag-value)
76+
(throw (ex-info (str "Format tag not found for type: " (type v)) {})))]
77+
;; add format tag
78+
(.update digest (.getBytes fmt-tag "UTF-8"))
6779
;; add the value
6880
(cond
6981
(validation/lazy-seq? v)

0 commit comments

Comments
 (0)