18490: Add a where clause to avoid updating identical rows.
authorPeter Amstutz <peter.amstutz@curii.com>
Mon, 29 Nov 2021 21:15:23 +0000 (16:15 -0500)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 29 Nov 2021 21:35:17 +0000 (16:35 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

services/api/lib/update_permissions.rb

index 23e60c8ed94733db647e3aafd911bbd272407646..f782ac5cdda94fdf7219a7e22250c3d0aa952e28 100644 (file)
@@ -131,7 +131,12 @@ delete from #{PERMISSION_VIEW} where
     ActiveRecord::Base.connection.exec_query %{
 insert into #{PERMISSION_VIEW} (user_uuid, target_uuid, perm_level, traverse_owned)
   select user_uuid, target_uuid, val as perm_level, traverse_owned from #{temptable_perms} where val>0
-on conflict (user_uuid, target_uuid) do update set perm_level=EXCLUDED.perm_level, traverse_owned=EXCLUDED.traverse_owned;
+on conflict (user_uuid, target_uuid) do update
+set perm_level=EXCLUDED.perm_level, traverse_owned=EXCLUDED.traverse_owned
+where #{PERMISSION_VIEW}.user_uuid=EXCLUDED.user_uuid and
+      #{PERMISSION_VIEW}.target_uuid=EXCLUDED.target_uuid and
+       (#{PERMISSION_VIEW}.perm_level != EXCLUDED.perm_level or
+        #{PERMISSION_VIEW}.traverse_owned != EXCLUDED.traverse_owned);
 },
                                              "update_permissions.insert"