Add rollbacks for associated_object_id
[akkoma] / priv / repo / optional_migrations / pleroma_develop_rollbacks / 20220711182322_add_associated_object_id_function.exs
diff --git a/priv/repo/optional_migrations/pleroma_develop_rollbacks/20220711182322_add_associated_object_id_function.exs b/priv/repo/optional_migrations/pleroma_develop_rollbacks/20220711182322_add_associated_object_id_function.exs
new file mode 100644 (file)
index 0000000..76348f3
--- /dev/null
@@ -0,0 +1,37 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Repo.Migrations.AddAssociatedObjectIdFunction do
+  use Ecto.Migration
+
+  def up do
+    statement = """
+    CREATE OR REPLACE FUNCTION associated_object_id(data jsonb) RETURNS varchar AS $$
+    DECLARE
+      object_data jsonb;
+    BEGIN
+      IF jsonb_typeof(data->'object') = 'array' THEN
+        object_data := data->'object'->0;
+      ELSE
+        object_data := data->'object';
+      END IF;
+
+      IF jsonb_typeof(object_data->'id') = 'string' THEN
+        RETURN object_data->>'id';
+      ELSIF jsonb_typeof(object_data) = 'string' THEN
+        RETURN object_data#>>'{}';
+      ELSE
+        RETURN NULL;
+      END IF;
+    END;
+    $$ LANGUAGE plpgsql IMMUTABLE;
+    """
+
+    execute(statement)
+  end
+
+  def down do
+    execute("DROP FUNCTION IF EXISTS associated_object_id(data jsonb)")
+  end
+end