From 61e6200b02bbea7261e1b93ccd5a8c1fe2471a86 Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Thu, 5 May 2022 12:02:58 +0200
Subject: [PATCH] Only trigger refresh_instances when the actor being changed
 is a relay

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 ...ance_trigger_to_only_execute_on_relays.exs | 45 +++++++++++++++++++
 1 file changed, 45 insertions(+)
 create mode 100644 priv/repo/migrations/20220505091224_change_refresh_instance_trigger_to_only_execute_on_relays.exs

diff --git a/priv/repo/migrations/20220505091224_change_refresh_instance_trigger_to_only_execute_on_relays.exs b/priv/repo/migrations/20220505091224_change_refresh_instance_trigger_to_only_execute_on_relays.exs
new file mode 100644
index 000000000..de0b33e44
--- /dev/null
+++ b/priv/repo/migrations/20220505091224_change_refresh_instance_trigger_to_only_execute_on_relays.exs
@@ -0,0 +1,45 @@
+defmodule Mobilizon.Storage.Repo.Migrations.ChangeRefreshInstanceTriggerToOnlyExecuteOnRelays do
+  use Ecto.Migration
+
+  def up do
+    execute("""
+    DROP TRIGGER IF EXISTS refresh_instances_trigger ON actors;
+    """)
+
+    execute("""
+    CREATE TRIGGER refresh_instances_trigger_new
+    AFTER INSERT OR UPDATE
+    ON actors
+    FOR EACH ROW
+    WHEN (NEW.preferred_username = 'relay')
+    EXECUTE PROCEDURE refresh_instances();
+    """)
+
+    execute("""
+    CREATE TRIGGER refresh_instances_trigger_old
+    AFTER DELETE
+    ON actors
+    FOR EACH ROW
+    WHEN (OLD.preferred_username = 'relay')
+    EXECUTE PROCEDURE refresh_instances();
+    """)
+  end
+
+  def down do
+    execute("""
+    DROP TRIGGER IF EXISTS refresh_instances_trigger_new ON actors;
+    """)
+
+    execute("""
+    DROP TRIGGER IF EXISTS refresh_instances_trigger_old ON actors;
+    """)
+
+    execute("""
+    CREATE TRIGGER refresh_instances_trigger
+    AFTER INSERT OR UPDATE OR DELETE
+    ON actors
+    FOR EACH STATEMENT
+    EXECUTE PROCEDURE refresh_instances();
+    """)
+  end
+end