Skip to content

Commit 00e722d

Browse files
authored
Merge pull request metabrainz#2159 from reosarevok/MBS-11760
MBS-11760: Add missing delete_unused_tag triggers
2 parents 61ee8af + 4804429 commit 00e722d

15 files changed

+336
-14
lines changed

admin/sql/CreateTriggers.sql

+20-4
Original file line numberDiff line numberDiff line change
@@ -1036,34 +1036,50 @@ CREATE CONSTRAINT TRIGGER delete_unused_tag
10361036
AFTER INSERT ON tag DEFERRABLE INITIALLY DEFERRED
10371037
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag();
10381038

1039+
CREATE CONSTRAINT TRIGGER delete_unused_tag
1040+
AFTER DELETE ON area_tag DEFERRABLE INITIALLY DEFERRED
1041+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
1042+
10391043
CREATE CONSTRAINT TRIGGER delete_unused_tag
10401044
AFTER DELETE ON artist_tag DEFERRABLE INITIALLY DEFERRED
10411045
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10421046

1047+
CREATE CONSTRAINT TRIGGER delete_unused_tag
1048+
AFTER DELETE ON event_tag DEFERRABLE INITIALLY DEFERRED
1049+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
1050+
1051+
CREATE CONSTRAINT TRIGGER delete_unused_tag
1052+
AFTER DELETE ON instrument_tag DEFERRABLE INITIALLY DEFERRED
1053+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
1054+
10431055
CREATE CONSTRAINT TRIGGER delete_unused_tag
10441056
AFTER DELETE ON label_tag DEFERRABLE INITIALLY DEFERRED
10451057
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10461058

10471059
CREATE CONSTRAINT TRIGGER delete_unused_tag
1048-
AFTER DELETE ON release_group_tag DEFERRABLE INITIALLY DEFERRED
1060+
AFTER DELETE ON place_tag DEFERRABLE INITIALLY DEFERRED
10491061
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10501062

10511063
CREATE CONSTRAINT TRIGGER delete_unused_tag
1052-
AFTER DELETE ON work_tag DEFERRABLE INITIALLY DEFERRED
1064+
AFTER DELETE ON recording_tag DEFERRABLE INITIALLY DEFERRED
10531065
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10541066

10551067
CREATE CONSTRAINT TRIGGER delete_unused_tag
1056-
AFTER DELETE ON area_tag DEFERRABLE INITIALLY DEFERRED
1068+
AFTER DELETE ON release_group_tag DEFERRABLE INITIALLY DEFERRED
10571069
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10581070

10591071
CREATE CONSTRAINT TRIGGER delete_unused_tag
1060-
AFTER DELETE ON instrument_tag DEFERRABLE INITIALLY DEFERRED
1072+
AFTER DELETE ON release_tag DEFERRABLE INITIALLY DEFERRED
10611073
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10621074

10631075
CREATE CONSTRAINT TRIGGER delete_unused_tag
10641076
AFTER DELETE ON series_tag DEFERRABLE INITIALLY DEFERRED
10651077
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
10661078

1079+
CREATE CONSTRAINT TRIGGER delete_unused_tag
1080+
AFTER DELETE ON work_tag DEFERRABLE INITIALLY DEFERRED
1081+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
1082+
10671083
--------------------------------------------------------------------------------
10681084
CREATE CONSTRAINT TRIGGER apply_artist_release_group_pending_updates
10691085
AFTER INSERT OR UPDATE OR DELETE ON release DEFERRABLE INITIALLY DEFERRED

admin/sql/DropTriggers.sql

+7-3
Original file line numberDiff line numberDiff line change
@@ -314,13 +314,17 @@ DROP TRIGGER url_gc_a_del_l_url_url ON l_url_url;
314314
DROP TRIGGER url_gc_a_upd_l_url_work ON l_url_work;
315315
DROP TRIGGER url_gc_a_del_l_url_work ON l_url_work;
316316
DROP TRIGGER delete_unused_tag ON tag;
317+
DROP TRIGGER delete_unused_tag ON area_tag;
317318
DROP TRIGGER delete_unused_tag ON artist_tag;
319+
DROP TRIGGER delete_unused_tag ON event_tag;
320+
DROP TRIGGER delete_unused_tag ON instrument_tag;
318321
DROP TRIGGER delete_unused_tag ON label_tag;
322+
DROP TRIGGER delete_unused_tag ON place_tag;
323+
DROP TRIGGER delete_unused_tag ON recording_tag;
319324
DROP TRIGGER delete_unused_tag ON release_group_tag;
320-
DROP TRIGGER delete_unused_tag ON work_tag;
321-
DROP TRIGGER delete_unused_tag ON area_tag;
322-
DROP TRIGGER delete_unused_tag ON instrument_tag;
325+
DROP TRIGGER delete_unused_tag ON release_tag;
323326
DROP TRIGGER delete_unused_tag ON series_tag;
327+
DROP TRIGGER delete_unused_tag ON work_tag;
324328
DROP TRIGGER apply_artist_release_group_pending_updates ON release;
325329
DROP TRIGGER apply_artist_release_pending_updates ON release;
326330
DROP TRIGGER apply_artist_release_pending_updates ON release_country;
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
\set ON_ERROR_STOP 1
2+
3+
BEGIN;
4+
5+
CREATE CONSTRAINT TRIGGER delete_unused_tag
6+
AFTER DELETE ON event_tag DEFERRABLE INITIALLY DEFERRED
7+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
8+
9+
CREATE CONSTRAINT TRIGGER delete_unused_tag
10+
AFTER DELETE ON place_tag DEFERRABLE INITIALLY DEFERRED
11+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
12+
13+
CREATE CONSTRAINT TRIGGER delete_unused_tag
14+
AFTER DELETE ON recording_tag DEFERRABLE INITIALLY DEFERRED
15+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
16+
17+
CREATE CONSTRAINT TRIGGER delete_unused_tag
18+
AFTER DELETE ON release_tag DEFERRABLE INITIALLY DEFERRED
19+
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();
20+
21+
COMMIT;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO area (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Area', 'Area 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Area', 'Area 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO area_tag (area, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM area_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM area_tag WHERE tag = 4;
20+
INSERT INTO area_tag (area, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM area_tag WHERE tag = 5 AND area = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON area_tag trigger
38+
DELETE FROM area_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON area_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-artist-tags-deleted.sql

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1212
INSERT INTO artist_tag (artist, tag, count) VALUES
1313
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1414

15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1516
DELETE FROM artist_tag WHERE tag = 2;
1617

1718
-- Deleting but the re-adding should not garbage collect
@@ -30,7 +31,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3031

3132
SELECT set_eq(
3233
'SELECT id FROM tag', '{4, 5}'::INT[],
33-
'Tag collected after commit'
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON artist_tag trigger
38+
DELETE FROM artist_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON artist_tag'
3443
);
3544

3645
SELECT finish();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO event (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Event', 'Event 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Event', 'Event 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO event_tag (event, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM event_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM event_tag WHERE tag = 4;
20+
INSERT INTO event_tag (event, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM event_tag WHERE tag = 5 AND event = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON event_tag trigger
38+
DELETE FROM event_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON event_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO instrument (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Instrument', 'Instrument 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Instrument', 'Instrument 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO instrument_tag (instrument, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM instrument_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM instrument_tag WHERE tag = 4;
20+
INSERT INTO instrument_tag (instrument, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM instrument_tag WHERE tag = 5 AND instrument = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON instrument_tag trigger
38+
DELETE FROM instrument_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON instrument_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-label-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1212
INSERT INTO label_tag (label, tag, count) VALUES
1313
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1414

15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1516
DELETE FROM label_tag WHERE tag = 2;
1617

1718
-- Deleting but the re-adding should not garbage collect
@@ -30,8 +31,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3031

3132
SELECT set_eq(
3233
'SELECT id FROM tag', '{4, 5}'::INT[],
33-
'Tag collected after commit'
34+
'Tag deleted after commit by AFTER INSERT ON tag'
3435
);
3536

37+
-- Delete tag after commit to test AFTER DELETE ON label_tag trigger
38+
DELETE FROM label_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON label_tag');
43+
3644
SELECT finish();
3745
ROLLBACK;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
SET search_path = 'musicbrainz', 'public';
2+
3+
--------------------------------------------------------------------------------
4+
BEGIN;
5+
SELECT no_plan();
6+
7+
INSERT INTO place (id, gid, name, comment)
8+
VALUES (1, '82ac9811-db47-4c05-9792-83cf4208afd0', 'Place', 'Place 1'),
9+
(2, '9baea67a-8d86-422d-b653-b0f6d0a93c7c', 'Place', 'Place 2');
10+
11+
INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Shared tag');
12+
INSERT INTO place_tag (place, tag, count) VALUES
13+
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
14+
15+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
16+
DELETE FROM place_tag WHERE tag = 2;
17+
18+
-- Deleting but the re-adding should not garbage collect
19+
DELETE FROM place_tag WHERE tag = 4;
20+
INSERT INTO place_tag (place, tag, count) VALUES (1, 4, 1);
21+
22+
DELETE FROM place_tag WHERE tag = 5 AND place = 1;
23+
24+
SELECT set_eq(
25+
'SELECT id FROM tag', '{2, 4, 5}'::INT[],
26+
'Tag exists before commit'
27+
);
28+
29+
-- Simulate the commit
30+
SET CONSTRAINTS ALL IMMEDIATE;
31+
32+
SELECT set_eq(
33+
'SELECT id FROM tag', '{4, 5}'::INT[],
34+
'Tag deleted after commit by AFTER INSERT ON tag'
35+
);
36+
37+
-- Delete tag after commit to test AFTER DELETE ON place_tag trigger
38+
DELETE FROM place_tag WHERE tag = 5;
39+
40+
SELECT set_eq(
41+
'SELECT id FROM tag', '{4}'::INT[],
42+
'Tag deleted after commit by AFTER DELETE ON place_tag'
43+
);
44+
45+
SELECT finish();
46+
ROLLBACK;

t/pgtap/unused-tags/unused-recording-tags-deleted.sql

+10-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1414
INSERT INTO recording_tag (recording, tag, count) VALUES
1515
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1616

17+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1718
DELETE FROM recording_tag WHERE tag = 2;
1819

1920
-- Deleting but the re-adding should not garbage collect
@@ -32,7 +33,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3233

3334
SELECT set_eq(
3435
'SELECT id FROM tag', '{4, 5}'::INT[],
35-
'Tag collected after commit'
36+
'Tag deleted after commit by AFTER INSERT ON tag'
37+
);
38+
39+
-- Delete tag after commit to test AFTER DELETE ON recording_tag trigger
40+
DELETE FROM recording_tag WHERE tag = 5;
41+
42+
SELECT set_eq(
43+
'SELECT id FROM tag', '{4}'::INT[],
44+
'Tag deleted after commit by AFTER DELETE ON recording_tag'
3645
);
3746

3847
SELECT finish();

t/pgtap/unused-tags/unused-release-group-tags-deleted.sql

+9-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ INSERT INTO tag (id, name) VALUES (2, 'Unused tag'), (4, 'Used tag'), (5, 'Share
1414
INSERT INTO release_group_tag (release_group, tag, count) VALUES
1515
(1, 2, 1), (1, 4, 1), (1, 5, 1), (2, 5, 1);
1616

17+
-- Delete tag before commit to test AFTER INSERT ON tag trigger
1718
DELETE FROM release_group_tag WHERE tag = 2;
1819

1920
-- Deleting but the re-adding should not garbage collect
@@ -32,8 +33,15 @@ SET CONSTRAINTS ALL IMMEDIATE;
3233

3334
SELECT set_eq(
3435
'SELECT id FROM tag', '{4, 5}'::INT[],
35-
'Tag collected after commit'
36+
'Tag deleted after commit by AFTER INSERT ON tag'
3637
);
3738

39+
-- Delete tag after commit to test AFTER DELETE ON release_group_tag trigger
40+
DELETE FROM release_group_tag WHERE tag = 5;
41+
42+
SELECT set_eq(
43+
'SELECT id FROM tag', '{4}'::INT[],
44+
'Tag deleted after commit by AFTER DELETE ON release_group_tag');
45+
3846
SELECT finish();
3947
ROLLBACK;

0 commit comments

Comments
 (0)