diff --git a/admin/sql/CreateFKConstraints.sql b/admin/sql/CreateFKConstraints.sql index 82db56fe26a..0acd3f22741 100644 --- a/admin/sql/CreateFKConstraints.sql +++ b/admin/sql/CreateFKConstraints.sql @@ -500,6 +500,16 @@ ALTER TABLE edit_note FOREIGN KEY (edit) REFERENCES edit(id); +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_edit_note + FOREIGN KEY (edit_note) + REFERENCES edit_note(id); + +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_change_editor + FOREIGN KEY (change_editor) + REFERENCES editor(id); + ALTER TABLE edit_note_recipient ADD CONSTRAINT edit_note_recipient_fk_recipient FOREIGN KEY (recipient) diff --git a/admin/sql/CreateIndexes.sql b/admin/sql/CreateIndexes.sql index bbecbb2e01b..79810473552 100644 --- a/admin/sql/CreateIndexes.sql +++ b/admin/sql/CreateIndexes.sql @@ -170,6 +170,8 @@ CREATE INDEX edit_url_idx ON edit_url (url); CREATE INDEX edit_note_idx_edit ON edit_note (edit); CREATE INDEX edit_note_idx_editor ON edit_note (editor); +CREATE INDEX edit_note_change_idx_edit_note ON edit_note_change (edit_note); + CREATE INDEX edit_note_recipient_idx_recipient ON edit_note_recipient (recipient); CREATE UNIQUE INDEX event_idx_gid ON event (gid); diff --git a/admin/sql/CreatePrimaryKeys.sql b/admin/sql/CreatePrimaryKeys.sql index 72dbf7af9d0..7d7988fc9a2 100644 --- a/admin/sql/CreatePrimaryKeys.sql +++ b/admin/sql/CreatePrimaryKeys.sql @@ -54,6 +54,7 @@ ALTER TABLE edit_instrument ADD CONSTRAINT edit_instrument_pkey PRIMARY KEY (edi ALTER TABLE edit_label ADD CONSTRAINT edit_label_pkey PRIMARY KEY (edit, label); ALTER TABLE edit_mood ADD CONSTRAINT edit_mood_pkey PRIMARY KEY (edit, mood); ALTER TABLE edit_note ADD CONSTRAINT edit_note_pkey PRIMARY KEY (id); +ALTER TABLE edit_note_change ADD CONSTRAINT edit_note_change_pkey PRIMARY KEY (id); ALTER TABLE edit_note_recipient ADD CONSTRAINT edit_note_recipient_pkey PRIMARY KEY (recipient, edit_note); ALTER TABLE edit_place ADD CONSTRAINT edit_place_pkey PRIMARY KEY (edit, place); ALTER TABLE edit_recording ADD CONSTRAINT edit_recording_pkey PRIMARY KEY (edit, recording); diff --git a/admin/sql/CreateTables.sql b/admin/sql/CreateTables.sql index c34f32ae637..c9d24e0bed9 100644 --- a/admin/sql/CreateTables.sql +++ b/admin/sql/CreateTables.sql @@ -575,6 +575,18 @@ CREATE TABLE edit_note post_time TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); +CREATE TABLE edit_note_change +( + id SERIAL, -- PK + status edit_note_status, + edit_note INTEGER NOT NULL, -- references edit_note.id + change_editor INTEGER NOT NULL, -- references editor.id + change_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + old_note TEXT NOT NULL, + new_note TEXT NOT NULL, + reason TEXT NOT NULL DEFAULT '' +); + CREATE TABLE edit_note_recipient ( recipient INTEGER NOT NULL, -- PK, references editor.id edit_note INTEGER NOT NULL -- PK, references edit_note.id diff --git a/admin/sql/CreateTypes.sql b/admin/sql/CreateTypes.sql index 2f1d9f3dddf..001706422f9 100644 --- a/admin/sql/CreateTypes.sql +++ b/admin/sql/CreateTypes.sql @@ -3,6 +3,8 @@ BEGIN; CREATE TYPE cover_art_presence AS ENUM ('absent', 'present', 'darkened'); +CREATE TYPE edit_note_status AS ENUM ('deleted', 'edited'); + CREATE TYPE event_art_presence AS ENUM ('absent', 'present', 'darkened'); CREATE TYPE fluency AS ENUM ( diff --git a/admin/sql/DropFKConstraints.sql b/admin/sql/DropFKConstraints.sql index df52bf6d3a1..ba59b6c1516 100644 --- a/admin/sql/DropFKConstraints.sql +++ b/admin/sql/DropFKConstraints.sql @@ -98,6 +98,8 @@ ALTER TABLE edit_mood DROP CONSTRAINT IF EXISTS edit_mood_fk_edit; ALTER TABLE edit_mood DROP CONSTRAINT IF EXISTS edit_mood_fk_mood; ALTER TABLE edit_note DROP CONSTRAINT IF EXISTS edit_note_fk_editor; ALTER TABLE edit_note DROP CONSTRAINT IF EXISTS edit_note_fk_edit; +ALTER TABLE edit_note_change DROP CONSTRAINT IF EXISTS edit_note_change_fk_edit_note; +ALTER TABLE edit_note_change DROP CONSTRAINT IF EXISTS edit_note_change_fk_change_editor; ALTER TABLE edit_note_recipient DROP CONSTRAINT IF EXISTS edit_note_recipient_fk_recipient; ALTER TABLE edit_note_recipient DROP CONSTRAINT IF EXISTS edit_note_recipient_fk_edit_note; ALTER TABLE edit_place DROP CONSTRAINT IF EXISTS edit_place_fk_edit; diff --git a/admin/sql/DropIndexes.sql b/admin/sql/DropIndexes.sql index b36e419951a..0eb398ab2d5 100644 --- a/admin/sql/DropIndexes.sql +++ b/admin/sql/DropIndexes.sql @@ -87,6 +87,7 @@ DROP INDEX edit_instrument_idx; DROP INDEX edit_label_idx; DROP INDEX edit_label_idx_status; DROP INDEX edit_mood_idx; +DROP INDEX edit_note_change_idx_edit_note; DROP INDEX edit_note_idx_edit; DROP INDEX edit_note_idx_editor; DROP INDEX edit_note_recipient_idx_recipient; diff --git a/admin/sql/DropPrimaryKeys.sql b/admin/sql/DropPrimaryKeys.sql index fb5c5eea526..da41d8b69bb 100644 --- a/admin/sql/DropPrimaryKeys.sql +++ b/admin/sql/DropPrimaryKeys.sql @@ -54,6 +54,7 @@ ALTER TABLE edit_instrument DROP CONSTRAINT IF EXISTS edit_instrument_pkey; ALTER TABLE edit_label DROP CONSTRAINT IF EXISTS edit_label_pkey; ALTER TABLE edit_mood DROP CONSTRAINT IF EXISTS edit_mood_pkey; ALTER TABLE edit_note DROP CONSTRAINT IF EXISTS edit_note_pkey; +ALTER TABLE edit_note_change DROP CONSTRAINT IF EXISTS edit_note_change_pkey; ALTER TABLE edit_note_recipient DROP CONSTRAINT IF EXISTS edit_note_recipient_pkey; ALTER TABLE edit_place DROP CONSTRAINT IF EXISTS edit_place_pkey; ALTER TABLE edit_recording DROP CONSTRAINT IF EXISTS edit_recording_pkey; diff --git a/admin/sql/DropTables.sql b/admin/sql/DropTables.sql index cc805b2826a..a5f2617f01c 100644 --- a/admin/sql/DropTables.sql +++ b/admin/sql/DropTables.sql @@ -58,6 +58,7 @@ DROP TABLE edit_instrument; DROP TABLE edit_label; DROP TABLE edit_mood; DROP TABLE edit_note; +DROP TABLE edit_note_change; DROP TABLE edit_note_recipient; DROP TABLE edit_place; DROP TABLE edit_recording; diff --git a/admin/sql/DropTypes.sql b/admin/sql/DropTypes.sql index 6ae9a9a3427..b4c83aef7c4 100644 --- a/admin/sql/DropTypes.sql +++ b/admin/sql/DropTypes.sql @@ -2,6 +2,7 @@ \unset ON_ERROR_STOP DROP TYPE IF EXISTS cover_art_presence; +DROP TYPE IF EXISTS edit_note_status; DROP TYPE IF EXISTS event_art_presence; DROP TYPE IF EXISTS fluency; DROP TYPE IF EXISTS oauth_code_challenge_method; diff --git a/admin/sql/SetSequences.sql b/admin/sql/SetSequences.sql index 44b77639add..6aa8c87eb90 100644 --- a/admin/sql/SetSequences.sql +++ b/admin/sql/SetSequences.sql @@ -28,6 +28,7 @@ SELECT setval('cdtoc_id_seq', COALESCE((SELECT MAX(id) FROM cdtoc), 0) + 1, FALS SELECT setval('cdtoc_raw_id_seq', COALESCE((SELECT MAX(id) FROM cdtoc_raw), 0) + 1, FALSE); SELECT setval('edit_id_seq', COALESCE((SELECT MAX(id) FROM edit), 0) + 1, FALSE); SELECT setval('edit_note_id_seq', COALESCE((SELECT MAX(id) FROM edit_note), 0) + 1, FALSE); +SELECT setval('edit_note_change_id_seq', COALESCE((SELECT MAX(id) FROM edit_note_change), 0) + 1, FALSE); SELECT setval('editor_id_seq', COALESCE((SELECT MAX(id) FROM editor), 0) + 1, FALSE); SELECT setval('editor_preference_id_seq', COALESCE((SELECT MAX(id) FROM editor_preference), 0) + 1, FALSE); SELECT setval('editor_subscribe_artist_id_seq', COALESCE((SELECT MAX(id) FROM editor_subscribe_artist), 0) + 1, FALSE); diff --git a/admin/sql/TruncateTables.sql b/admin/sql/TruncateTables.sql index 64ef158432e..6a7ab114216 100644 --- a/admin/sql/TruncateTables.sql +++ b/admin/sql/TruncateTables.sql @@ -58,6 +58,7 @@ TRUNCATE TABLE edit_instrument RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_label RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_mood RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_note RESTART IDENTITY CASCADE; +TRUNCATE TABLE edit_note_change RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_note_recipient RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_place RESTART IDENTITY CASCADE; TRUNCATE TABLE edit_recording RESTART IDENTITY CASCADE; diff --git a/admin/sql/updates/20211203-mbs-11312-standalone.sql b/admin/sql/updates/20211203-mbs-11312-standalone.sql new file mode 100644 index 00000000000..f3f80f0a105 --- /dev/null +++ b/admin/sql/updates/20211203-mbs-11312-standalone.sql @@ -0,0 +1,17 @@ +\set ON_ERROR_STOP 1 + +BEGIN; + +-- Foreign keys + +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_edit_note + FOREIGN KEY (edit_note) + REFERENCES edit_note(id); + +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_change_editor + FOREIGN KEY (change_editor) + REFERENCES editor(id); + +COMMIT; diff --git a/admin/sql/updates/20211203-mbs-11312.sql b/admin/sql/updates/20211203-mbs-11312.sql new file mode 100644 index 00000000000..26f57b6a0e2 --- /dev/null +++ b/admin/sql/updates/20211203-mbs-11312.sql @@ -0,0 +1,36 @@ +\set ON_ERROR_STOP 1 + +BEGIN; + +DO $$ +BEGIN + PERFORM 1 FROM pg_type + WHERE typname = 'edit_note_status'; + + IF NOT FOUND THEN + CREATE TYPE edit_note_status AS ENUM ('deleted', 'edited'); + END IF; +END +$$; + +CREATE TABLE edit_note_change +( + id SERIAL, -- PK + status edit_note_status, + edit_note INTEGER NOT NULL, -- references edit_note.id + change_editor INTEGER NOT NULL, -- references editor.id + change_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + old_note TEXT NOT NULL, + new_note TEXT NOT NULL, + reason TEXT NOT NULL DEFAULT '' +); + +-- Primary keys + +ALTER TABLE edit_note_change ADD CONSTRAINT edit_note_change_pkey PRIMARY KEY (id); + +-- Indexes + +CREATE INDEX edit_note_change_idx_edit_note ON edit_note_change (edit_note); + +COMMIT; diff --git a/admin/sql/updates/schema-change/28.all.sql b/admin/sql/updates/schema-change/28.all.sql index d91e2484105..dbd87cdd6c1 100644 --- a/admin/sql/updates/schema-change/28.all.sql +++ b/admin/sql/updates/schema-change/28.all.sql @@ -1,4 +1,5 @@ -- Generated by CompileSchemaScripts.pl from: +-- 20211203-mbs-11312.sql -- 20220802-mbs-12497.sql -- 20220927-mbs-12573.sql -- 20221114-mbs-12704.sql @@ -7,6 +8,41 @@ BEGIN; SET search_path = musicbrainz, public; SET LOCAL statement_timeout = 0; +-------------------------------------------------------------------------------- +SELECT '20211203-mbs-11312.sql'; + + +DO $$ +BEGIN + PERFORM 1 FROM pg_type + WHERE typname = 'edit_note_status'; + + IF NOT FOUND THEN + CREATE TYPE edit_note_status AS ENUM ('deleted', 'edited'); + END IF; +END +$$; + +CREATE TABLE edit_note_change +( + id SERIAL, -- PK + status edit_note_status, + edit_note INTEGER NOT NULL, -- references edit_note.id + change_editor INTEGER NOT NULL, -- references editor.id + change_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + old_note TEXT NOT NULL, + new_note TEXT NOT NULL, + reason TEXT NOT NULL DEFAULT '' +); + +-- Primary keys + +ALTER TABLE edit_note_change ADD CONSTRAINT edit_note_change_pkey PRIMARY KEY (id); + +-- Indexes + +CREATE INDEX edit_note_change_idx_edit_note ON edit_note_change (edit_note); + -------------------------------------------------------------------------------- SELECT '20220802-mbs-12497.sql'; diff --git a/admin/sql/updates/schema-change/28.master_or_standalone.sql b/admin/sql/updates/schema-change/28.master_or_standalone.sql new file mode 100644 index 00000000000..c289a922434 --- /dev/null +++ b/admin/sql/updates/schema-change/28.master_or_standalone.sql @@ -0,0 +1,23 @@ +-- Generated by CompileSchemaScripts.pl from: +-- 20211203-mbs-11312-standalone.sql +\set ON_ERROR_STOP 1 +BEGIN; +SET search_path = musicbrainz, public; +SET LOCAL statement_timeout = 0; +-------------------------------------------------------------------------------- +SELECT '20211203-mbs-11312-standalone.sql'; + + +-- Foreign keys + +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_edit_note + FOREIGN KEY (edit_note) + REFERENCES edit_note(id); + +ALTER TABLE edit_note_change + ADD CONSTRAINT edit_note_change_fk_change_editor + FOREIGN KEY (change_editor) + REFERENCES editor(id); + +COMMIT; diff --git a/upgrade.json b/upgrade.json index 8078da32254..0e06506dbd7 100644 --- a/upgrade.json +++ b/upgrade.json @@ -206,6 +206,7 @@ }, "28": { "all": [ + "20211203-mbs-11312.sql", "20220802-mbs-12497.sql", "20220927-mbs-12573.sql", "20221114-mbs-12704.sql", @@ -213,6 +214,9 @@ ], "master_only": [ "20230423-nix-pending-keys-insertion.sql" + ], + "master_or_standalone": [ + "20211203-mbs-11312-standalone.sql" ] } }