Skip to content

Commit c636b62

Browse files
committed
CP-49045: update UUID index when the uuid is changed
The UUID index isn't used currently, this fixes a latent bug. Signed-off-by: Edwin Török <edwin.torok@citrix.com>
1 parent 2450ff4 commit c636b62

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

ocaml/database/db_cache_types.ml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,23 @@ let uuid_of ~tblname ~objref db =
625625
)
626626
with _ -> None
627627

628+
let maybe_update_uuid_keymap ~tblname ~objref ~fldname ~newval db =
629+
if fldname = Db_names.uuid then
630+
db
631+
|> Database.update_keymap @@ fun keymap ->
632+
let keymap =
633+
match uuid_of ~tblname ~objref db with
634+
| None ->
635+
keymap
636+
| Some uuid ->
637+
KeyMap.remove (Uuid uuid) keymap
638+
in
639+
KeyMap.add_unique tblname Db_names.uuid
640+
(Uuid (Schema.Value.Unsafe_cast.string newval))
641+
(tblname, objref) keymap
642+
else
643+
db
644+
628645
let set_field tblname objref fldname newval db =
629646
if fldname = Db_names.ref then
630647
failwith (Printf.sprintf "Cannot safely update field: %s" fldname) ;
@@ -642,6 +659,7 @@ let set_field tblname objref fldname newval db =
642659
if need_other_table_update then
643660
let g = Manifest.generation (Database.manifest db) in
644661
db
662+
|> maybe_update_uuid_keymap ~tblname ~objref ~fldname ~newval
645663
|> update_many_to_many g tblname objref remove_from_set
646664
|> update_one_to_many g tblname objref remove_from_set
647665
|> Database.update
@@ -656,6 +674,7 @@ let set_field tblname objref fldname newval db =
656674
else
657675
let g = Manifest.generation (Database.manifest db) in
658676
db
677+
|> maybe_update_uuid_keymap ~tblname ~objref ~fldname ~newval
659678
|> ((fun _ -> newval)
660679
|> Row.update g fldname empty
661680
|> Table.update g objref Row.empty

0 commit comments

Comments
 (0)