diff options
| author | winter | 2024-12-20 17:57:36 +0000 |
|---|---|---|
| committer | winter | 2024-12-20 18:01:26 +0000 |
| commit | 8ca2452dd05f614d55d2fd3ce188d9d04f44d285 (patch) | |
| tree | 7c850737c216df179ce00fa874b1de508894eb71 /migrations/20241220_152023_deletion.php | |
| parent | 583b1f8a865935dd4ae1b0c9fa40a4b347ea3d4d (diff) | |
implement deletion/tombstones?
Diffstat (limited to 'migrations/20241220_152023_deletion.php')
| -rw-r--r-- | migrations/20241220_152023_deletion.php | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/migrations/20241220_152023_deletion.php b/migrations/20241220_152023_deletion.php new file mode 100644 index 0000000..3b5dd9b --- /dev/null +++ b/migrations/20241220_152023_deletion.php @@ -0,0 +1,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(); +}); |
