Skip to content

Commit 8ab9d6b

Browse files
committed
SEARCH-680: Index genre annotations
1 parent dff0a11 commit 8ab9d6b

File tree

7 files changed

+114
-12
lines changed

7 files changed

+114
-12
lines changed

sir/schema/__init__.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,24 @@
4040
SearchAnnotation = E(modelext.CustomAnnotation, [
4141
F("id", "id"),
4242
F("entity", ["areas.area.gid", "artists.artist.gid", "events.event.gid",
43-
"instruments.instrument.gid", "labels.label.gid",
44-
"places.place.gid", "recordings.recording.gid",
45-
"releases.release.gid", "release_groups.release_group.gid",
43+
"genres.genre.gid", "instruments.instrument.gid",
44+
"labels.label.gid", "places.place.gid",
45+
"recordings.recording.gid", "releases.release.gid",
46+
"release_groups.release_group.gid",
4647
"series.series.gid", "works.work.gid"]),
4748
F("name", ["areas.area.name", "artists.artist.name", "events.event.name",
48-
"instruments.instrument.name", "labels.label.name",
49-
"places.place.name", "recordings.recording.name",
50-
"releases.release.name", "release_groups.release_group.name",
49+
"genres.genre.name", "instruments.instrument.name",
50+
"labels.label.name", "places.place.name",
51+
"recordings.recording.name", "releases.release.name",
52+
"release_groups.release_group.name",
5153
"series.series.name", "works.work.name"]),
5254
F("text", "text"),
5355
F("type", ["areas.__tablename__", "artists.__tablename__",
54-
"events.__tablename__", "instruments.__tablename__",
55-
"labels.__tablename__", "places.__tablename__",
56-
"recordings.__tablename__", "releases.__tablename__",
57-
"release_groups.__tablename__", "series.__tablename__",
58-
"works.__tablename__"],
56+
"events.__tablename__", "genres.__tablename__",
57+
"instruments.__tablename__", "labels.__tablename__",
58+
"places.__tablename__", "recordings.__tablename__",
59+
"releases.__tablename__", "release_groups.__tablename__",
60+
"series.__tablename__", "works.__tablename__"],
5961
transformfunc=tfs.annotation_type)
6062
],
6163
1.5,

sir/schema/modelext.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class CustomAnnotation(Annotation):
2222
areas = relationship("AreaAnnotation")
2323
artists = relationship("ArtistAnnotation")
2424
events = relationship("EventAnnotation")
25+
genres = relationship("GenreAnnotation")
2526
instruments = relationship("InstrumentAnnotation")
2627
labels = relationship("LabelAnnotation")
2728
places = relationship("PlaceAnnotation")

sir/schema/queryext.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
# Copyright (c) 2015 Wieland Hoffmann
44
# License: MIT, see LICENSE for details
55
from mbdata.models import (Annotation, AreaAnnotation, ArtistAnnotation,
6-
EventAnnotation, InstrumentAnnotation, LabelAnnotation,
6+
EventAnnotation, GenreAnnotation,
7+
InstrumentAnnotation, LabelAnnotation,
78
PlaceAnnotation, RecordingAnnotation, ReleaseAnnotation,
89
ReleaseGroupAnnotation, SeriesAnnotation, WorkAnnotation)
910
from sqlalchemy import func
@@ -13,6 +14,7 @@
1314
AreaAnnotation,
1415
ArtistAnnotation,
1516
EventAnnotation,
17+
GenreAnnotation,
1618
InstrumentAnnotation,
1719
LabelAnnotation,
1820
PlaceAnnotation,

sir/schema/transformfuncs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"area_annotation": "area",
88
"artist_annotation": "artist",
99
"event_annotation": "event",
10+
"genre_annotation": "genre",
1011
"instrument_annotation": "instrument",
1112
"label_annotation": "label",
1213
"place_annotation": "place",

sir/wscompat/convert.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,8 @@ def convert_annotation(obj):
761761
l.append(convert_one_annotation(obj, 'artist', a.artist))
762762
for a in obj.events:
763763
l.append(convert_one_annotation(obj, 'event', a.event))
764+
for a in obj.genres:
765+
l.append(convert_one_annotation(obj, 'genre', a.genre))
764766
for a in obj.instruments:
765767
l.append(convert_one_annotation(obj, 'instrument', a.instrument))
766768
for a in obj.labels:

sql/CreateFunctions.sql

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,78 @@ BEGIN
254254
END;
255255
$$ LANGUAGE plpgsql;
256256

257+
CREATE OR REPLACE FUNCTION search_genre_annotation_insert() RETURNS trigger
258+
AS $$
259+
BEGIN
260+
PERFORM amqp.publish(2, 'search', 'index', (
261+
WITH keys(annotation, genre) AS (SELECT NEW.annotation, NEW.genre)
262+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre_annotation"'),
263+
'{_operation}', '"insert"')::text FROM keys
264+
));
265+
RETURN NEW;
266+
END;
267+
$$ LANGUAGE plpgsql;
268+
269+
CREATE OR REPLACE FUNCTION search_genre_annotation_update() RETURNS trigger
270+
AS $$
271+
BEGIN
272+
PERFORM amqp.publish(2, 'search', 'update', (
273+
WITH keys(annotation, genre) AS (SELECT NEW.annotation, NEW.genre)
274+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre_annotation"'),
275+
'{_operation}', '"update"')::text FROM keys
276+
));
277+
RETURN NEW;
278+
END;
279+
$$ LANGUAGE plpgsql;
280+
281+
CREATE OR REPLACE FUNCTION search_genre_annotation_delete() RETURNS trigger
282+
AS $$
283+
BEGIN
284+
PERFORM amqp.publish(2, 'search', 'update', (
285+
WITH keys(annotation, genre) AS (SELECT OLD.annotation, OLD.genre)
286+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre_annotation"'),
287+
'{_operation}', '"delete"')::text FROM keys
288+
));
289+
RETURN OLD;
290+
END;
291+
$$ LANGUAGE plpgsql;
292+
293+
CREATE OR REPLACE FUNCTION search_genre_insert() RETURNS trigger
294+
AS $$
295+
BEGIN
296+
PERFORM amqp.publish(2, 'search', 'index', (
297+
WITH keys(id) AS (SELECT NEW.id)
298+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre"'),
299+
'{_operation}', '"insert"')::text FROM keys
300+
));
301+
RETURN NEW;
302+
END;
303+
$$ LANGUAGE plpgsql;
304+
305+
CREATE OR REPLACE FUNCTION search_genre_update() RETURNS trigger
306+
AS $$
307+
BEGIN
308+
PERFORM amqp.publish(2, 'search', 'update', (
309+
WITH keys(id) AS (SELECT NEW.id)
310+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre"'),
311+
'{_operation}', '"update"')::text FROM keys
312+
));
313+
RETURN NEW;
314+
END;
315+
$$ LANGUAGE plpgsql;
316+
317+
CREATE OR REPLACE FUNCTION search_genre_delete() RETURNS trigger
318+
AS $$
319+
BEGIN
320+
PERFORM amqp.publish(2, 'search', 'update', (
321+
WITH keys(id) AS (SELECT OLD.id)
322+
SELECT jsonb_set(jsonb_set(to_jsonb(keys), '{_table}', '"genre"'),
323+
'{_operation}', '"delete"')::text FROM keys
324+
));
325+
RETURN OLD;
326+
END;
327+
$$ LANGUAGE plpgsql;
328+
257329
CREATE OR REPLACE FUNCTION search_instrument_annotation_insert() RETURNS trigger
258330
AS $$
259331
BEGIN

sql/CreateTriggers.sql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,28 @@ CREATE TRIGGER search_event_update AFTER UPDATE OF begin_date_day, begin_date_mo
7979
CREATE TRIGGER search_event_delete BEFORE DELETE ON musicbrainz.event
8080
FOR EACH ROW EXECUTE PROCEDURE search_event_delete();
8181

82+
CREATE TRIGGER search_genre_annotation_insert AFTER INSERT ON musicbrainz.genre_annotation
83+
FOR EACH ROW EXECUTE PROCEDURE search_genre_annotation_insert();
84+
85+
CREATE TRIGGER search_genre_annotation_update AFTER UPDATE OF annotation, genre ON musicbrainz.genre_annotation
86+
FOR EACH ROW
87+
WHEN ((OLD.annotation, OLD.genre) IS DISTINCT FROM (NEW.annotation, NEW.genre))
88+
EXECUTE PROCEDURE search_genre_annotation_update();
89+
90+
CREATE TRIGGER search_genre_annotation_delete BEFORE DELETE ON musicbrainz.genre_annotation
91+
FOR EACH ROW EXECUTE PROCEDURE search_genre_annotation_delete();
92+
93+
CREATE TRIGGER search_genre_insert AFTER INSERT ON musicbrainz.genre
94+
FOR EACH ROW EXECUTE PROCEDURE search_genre_insert();
95+
96+
CREATE TRIGGER search_genre_update AFTER UPDATE OF gid, name ON musicbrainz.genre
97+
FOR EACH ROW
98+
WHEN ((OLD.gid, OLD.name) IS DISTINCT FROM (NEW.gid, NEW.name))
99+
EXECUTE PROCEDURE search_genre_update();
100+
101+
CREATE TRIGGER search_genre_delete BEFORE DELETE ON musicbrainz.genre
102+
FOR EACH ROW EXECUTE PROCEDURE search_genre_delete();
103+
82104
CREATE TRIGGER search_instrument_annotation_insert AFTER INSERT ON musicbrainz.instrument_annotation
83105
FOR EACH ROW EXECUTE PROCEDURE search_instrument_annotation_insert();
84106

0 commit comments

Comments
 (0)