Skip to content

Commit afccc92

Browse files
committed
Fix False Positives while Checking Referential Integrity
Closes: #2015
1 parent 2cc35a1 commit afccc92

File tree

4 files changed

+28
-2
lines changed

4 files changed

+28
-2
lines changed

modules/db/src/blaze/db/impl/batch_db.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@
190190
(-rev-include [db resource-handle]
191191
(let [search-param-registry (:search-param-registry node)
192192
type (name (type/type resource-handle))
193-
reference (codec/v-hash (rh/reference resource-handle))]
193+
reference (rh/tid-id resource-handle)]
194194
(coll/eduction
195195
(comp
196196
(mapcat
@@ -203,7 +203,7 @@
203203
(sr/list-by-target-type search-param-registry type))))
204204

205205
(-rev-include [db resource-handle source-type code]
206-
(rev-include db snapshot (codec/v-hash (rh/reference resource-handle))
206+
(rev-include db snapshot (rh/tid-id resource-handle)
207207
(codec/tid source-type) (codec/c-hash code)))
208208

209209
(-patient-everything [db patient-handle start end]

modules/db/src/blaze/db/impl/index/resource_handle.clj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,6 @@
121121

122122
(defn local-ref-tuple [{type :fhir/type id :id}]
123123
[(name type) id])
124+
125+
(defn tid-id [rh]
126+
(codec/tid-id (tid rh) (codec/id-byte-string (id rh))))

modules/db/test/blaze/db/api_test.clj

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,24 @@
521521
:op := :delete
522522
:num-changes := 2)))))
523523

524+
(testing "referential integrity checks are not affected by hash collisions"
525+
(with-system-data [{:blaze.db/keys [node]} config]
526+
[[[:create
527+
{:fhir/type :fhir/Encounter
528+
:id "A597AEF8855D993D92B063CC69194E33A57F07760034D054150054BCDABFE332"}]
529+
[:create
530+
{:fhir/type :fhir/Encounter
531+
:id "1577C74A3D24F812C29FC372B5B0D9D325AA86A05A541598BF3734247EEAAE5C"}]
532+
[:create
533+
{:fhir/type :fhir/Observation :id "0"
534+
:encounter #fhir/Reference{:reference "Encounter/1577C74A3D24F812C29FC372B5B0D9D325AA86A05A541598BF3734247EEAAE5C"}}]]]
535+
536+
(testing "deleting the unreferenced encounter succeeds"
537+
(let [db @(d/transact node [[:delete "Encounter" "A597AEF8855D993D92B063CC69194E33A57F07760034D054150054BCDABFE332"]])]
538+
(given (d/resource-handle db "Encounter" "A597AEF8855D993D92B063CC69194E33A57F07760034D054150054BCDABFE332")
539+
:op := :delete
540+
:num-changes := 2)))))
541+
524542
(testing "encounter with a condition referencing it"
525543
(with-system-data [{:blaze.db/keys [node]} config]
526544
[[[:create {:fhir/type :fhir/Encounter :id "0"}]

modules/db/test/blaze/db/impl/index/resource_handle_spec.clj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(:require
33
[blaze.byte-buffer :refer [byte-buffer?]]
44
[blaze.byte-buffer-spec]
5+
[blaze.byte-string :refer [byte-string?]]
56
[blaze.db.impl.codec-spec]
67
[blaze.db.impl.index.resource-handle :as rh]
78
[blaze.db.kv-spec]
@@ -54,3 +55,7 @@
5455
(s/fdef rh/local-ref-tuple
5556
:args (s/cat :rh rh/resource-handle?)
5657
:ret :blaze.fhir/literal-ref-tuple)
58+
59+
(s/fdef rh/tid-id
60+
:args (s/cat :rh rh/resource-handle?)
61+
:ret byte-string?)

0 commit comments

Comments
 (0)