Add rollbacks for associated_object_id
[akkoma] / priv / repo / optional_migrations / pleroma_develop_rollbacks / 20220711182322_add_associated_object_id_function.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Repo.Migrations.AddAssociatedObjectIdFunction do
6 use Ecto.Migration
7
8 def up do
9 statement = """
10 CREATE OR REPLACE FUNCTION associated_object_id(data jsonb) RETURNS varchar AS $$
11 DECLARE
12 object_data jsonb;
13 BEGIN
14 IF jsonb_typeof(data->'object') = 'array' THEN
15 object_data := data->'object'->0;
16 ELSE
17 object_data := data->'object';
18 END IF;
19
20 IF jsonb_typeof(object_data->'id') = 'string' THEN
21 RETURN object_data->>'id';
22 ELSIF jsonb_typeof(object_data) = 'string' THEN
23 RETURN object_data#>>'{}';
24 ELSE
25 RETURN NULL;
26 END IF;
27 END;
28 $$ LANGUAGE plpgsql IMMUTABLE;
29 """
30
31 execute(statement)
32 end
33
34 def down do
35 execute("DROP FUNCTION IF EXISTS associated_object_id(data jsonb)")
36 end
37 end