defmodule Pleroma.Repo.Migrations.AddRecipientsContainBlockedDomainsFunction do use Ecto.Migration @disable_ddl_transaction true def up do statement = """ CREATE OR REPLACE FUNCTION recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[]) RETURNS boolean AS $$ DECLARE recipient_domain varchar; recipient varchar; BEGIN FOREACH recipient IN ARRAY recipients LOOP recipient_domain = split_part(recipient, '/', 3)::varchar; IF recipient_domain = ANY(blocked_domains) THEN RETURN TRUE; END IF; END LOOP; RETURN FALSE; END; $$ LANGUAGE plpgsql; """ execute(statement) end def down do execute( "drop function if exists recipients_contain_blocked_domains(recipients varchar[], blocked_domains varchar[])" ) end end