@@ -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+
628645let 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