20220711182322_add_associated_object_id_function.exs (979B)
- # 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