aboutsummaryrefslogtreecommitdiffhomepage
path: root/migrations/20241220_152023_deletion.php
blob: 3b5dd9bce55a9393da36582f3de1fcf8fc421889 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php

use \Digitigrade\Db\Migrator;

Migrator::getInstance()->register(20241220_152023, function (PDO $db) {
    // all fetchable/pushable objects can be marked as deleted, which will hide them, and make them get swept up later
    // when they're actually deleted i also need any referents to be cascade-deleted
    // also i noticed the column type for note.in_reply_to is wrong lol
    $db->beginTransaction();
    $db->exec(<<<END
    ALTER TABLE actor ADD COLUMN deleted boolean not null default false;
    ALTER TABLE note ADD COLUMN deleted boolean not null default false;
    ALTER TABLE interaction ADD COLUMN deleted boolean not null default false;

    ALTER TABLE actor_endpoints
        DROP CONSTRAINT actor_endpoints_actor_id_fkey,
        ADD foreign key (actor_id) references actor on delete cascade;
    ALTER TABLE actor_extension
        DROP CONSTRAINT actor_extension_actor_id_fkey,
        ADD foreign key (actor_id) references actor on delete cascade;
    ALTER TABLE actor_webfinger
        DROP CONSTRAINT actor_webfinger_actor_fkey,
        ADD foreign key (actor) references actor on delete cascade;
    ALTER TABLE follow_relation
        DROP CONSTRAINT follow_relation_object_fkey,
        DROP CONSTRAINT follow_relation_subject_fkey,
        ADD foreign key (object) references actor on delete cascade,
        ADD foreign key (subject) references actor on delete cascade;
    ALTER TABLE interaction
        DROP CONSTRAINT interaction_author_fkey,
        DROP CONSTRAINT interaction_target_fkey,
        ADD foreign key (author) references actor on delete cascade,
        ADD foreign key (target) references note on delete cascade;
    ALTER TABLE note
        DROP CONSTRAINT note_author_fkey,
        DROP CONSTRAINT note_thread_apex_fkey,
        DROP COLUMN in_reply_to,
        ADD COLUMN in_reply_to bigint references note on delete set null,
        ADD foreign key (author) references actor on delete cascade,
        ADD foreign key (thread_apex) references note on delete set null;
    ALTER TABLE note_attachment
        DROP CONSTRAINT note_attachment_note_id_fkey,
        ADD foreign key (note_id) references note on delete cascade;
    ALTER TABLE note_extension
        DROP CONSTRAINT note_extension_note_id_fkey,
        ADD foreign key (note_id) references note on delete cascade;
    ALTER TABLE note_formatted_content
        DROP CONSTRAINT note_formatted_content_note_id_fkey,
        ADD foreign key (note_id) references note on delete cascade;
    ALTER TABLE note_mention
        DROP CONSTRAINT note_mention_actor_id_fkey,
        DROP CONSTRAINT note_mention_note_id_fkey,
        ADD foreign key (actor_id) references actor on delete cascade,
        ADD foreign key (note_id) references note on delete cascade;
    ALTER TABLE note_privacy
        DROP CONSTRAINT note_privacy_note_id_fkey,
        ADD foreign key (note_id) references note on delete cascade;
    END);
    $db->commit();
});