[mb-commits] r9871 - in mb_server/trunk/admin/sql: . updates

root at musicbrainz.org root at musicbrainz.org
Fri Jun 13 03:42:44 UTC 2008


Author: robert
Date: 2008-06-13 03:42:44 +0000 (Fri, 13 Jun 2008)
New Revision: 9871

Modified:
   mb_server/trunk/admin/sql/CreateFunctions.sql
   mb_server/trunk/admin/sql/DropTriggers.sql
   mb_server/trunk/admin/sql/updates/20080610-2.sql
Log:
Update lastmodfied columns in:
  album when release events for the albums are added/removed
  album when tracks are updated
  album when tracks are added/removed from albums
  artist when tracks are updated
  artist when releases are updated
This way changes bubble up to the top and we can see changes to tracks reflected in the artist lastupdate timestamp


Modified: mb_server/trunk/admin/sql/CreateFunctions.sql
===================================================================
--- mb_server/trunk/admin/sql/CreateFunctions.sql	2008-06-10 23:51:52 UTC (rev 9870)
+++ mb_server/trunk/admin/sql/CreateFunctions.sql	2008-06-13 03:42:44 UTC (rev 9871)
@@ -102,7 +102,20 @@
 
 create or replace function b_iu_update_lastmodified () returns TRIGGER as '
 begin
-   NEW.lastupdate = now(); 
+    NEW.lastupdate = now(); 
+    IF (TG_RELNAME = ''track'')
+    THEN
+        -- update the releases
+        UPDATE album SET lastupdate = NOW() FROM albumjoin WHERE NEW.id = albumjoin.track and albumjoin.album = album.id;
+    END IF;
+    IF (TG_RELNAME = ''album'')
+    THEN
+        -- update the artist
+        IF (NEW.artist != 1)
+        THEN
+            UPDATE artist SET lastupdate = NOW() WHERE artist.id = NEW.artist;
+        END IF;
+    END IF;
    return NEW;
 end;
 ' language 'plpgsql';
@@ -150,6 +163,9 @@
             puids = puids + (SELECT COUNT(*) FROM puidjoin WHERE track = NEW.track)
     WHERE   id = NEW.album;
 
+    -- When a track is added to an album, update the albums lastupdate
+    UPDATE  album SET lastupdate = NOW() WHERE album.id = NEW.album;
+
     return NULL;
 end;
 ' language 'plpgsql';
@@ -171,20 +187,26 @@
             puids = puids + (SELECT COUNT(*) FROM puidjoin WHERE track = NEW.track)
     WHERE   id = NEW.album;
 
+    -- When a track is added to an album, update the albums lastupdate
+    UPDATE  album SET lastupdate = NOW() WHERE album.id = NEW.album;
+
     return NULL;
 end;
 ' language 'plpgsql';
 --'--
-create or replace function a_del_albumjoin () returns trigger as '
+create or replace function a_del_albumjoin () returns trigger as $$
 begin
     UPDATE  albummeta
     SET     tracks = tracks - 1,
             puids = puids - (SELECT COUNT(*) FROM puidjoin WHERE track = OLD.track)
     WHERE   id = OLD.album;
 
+    -- When a track is removed from an album, update the albums lastupdate
+    UPDATE  album SET lastupdate = NOW() WHERE album.id = OLD.album;
+
     return NULL;
 end;
-' language 'plpgsql';
+$$ language 'plpgsql';
 
 --'-----------------------------------------------------------------
 -- Changes to album_cdtoc could cause changes to albummeta.discids
@@ -363,6 +385,7 @@
 CREATE OR REPLACE FUNCTION a_ins_release () RETURNS TRIGGER AS '
 BEGIN
     EXECUTE set_album_firstreleasedate(NEW.album);
+    UPDATE album SET lastupdate = NOW() WHERE id = NEW.album;
     RETURN NEW;
 END;
 ' LANGUAGE 'plpgsql';
@@ -374,6 +397,7 @@
     THEN
         EXECUTE set_album_firstreleasedate(OLD.album);
     END IF;
+    UPDATE album SET lastupdate = NOW() WHERE id = NEW.album;
     RETURN NEW;
 END;
 ' LANGUAGE 'plpgsql';
@@ -381,6 +405,7 @@
 CREATE OR REPLACE FUNCTION a_del_release () RETURNS TRIGGER AS '
 BEGIN
     EXECUTE set_album_firstreleasedate(OLD.album);
+    UPDATE album SET lastupdate = NOW() WHERE id = OLD.album;
     RETURN OLD;
 END;
 ' LANGUAGE 'plpgsql';

Modified: mb_server/trunk/admin/sql/DropTriggers.sql
===================================================================
--- mb_server/trunk/admin/sql/DropTriggers.sql	2008-06-10 23:51:52 UTC (rev 9870)
+++ mb_server/trunk/admin/sql/DropTriggers.sql	2008-06-13 03:42:44 UTC (rev 9871)
@@ -31,5 +31,9 @@
 DROP TRIGGER a_del_track_tag ON track_tag;
 DROP TRIGGER a_ins_label_tag ON label_tag;
 DROP TRIGGER a_del_label_tag ON label_tag;
+DROP TRIGGER b_iu_artist ON artist;
+DROP TRIGGER b_iu_album ON album;
+DROP TRIGGER b_iu_track ON track;
+DROP TRIGGER b_iu_label ON label;
 
 -- vi: set ts=4 sw=4 et :

Modified: mb_server/trunk/admin/sql/updates/20080610-2.sql
===================================================================
--- mb_server/trunk/admin/sql/updates/20080610-2.sql	2008-06-10 23:51:52 UTC (rev 9870)
+++ mb_server/trunk/admin/sql/updates/20080610-2.sql	2008-06-13 03:42:44 UTC (rev 9871)
@@ -4,22 +4,10 @@
 
 -- IMPORTANT: This script should only be run on non-SLAVE servers
 
--- Create function to keep lastupdate columns up to date
-create or replace function b_iu_update_lastmodified () returns TRIGGER as '
-begin
-   NEW.lastupdate = now();
-   return NEW;
-end;
-' language 'plpgsql';
+-- drop triggers
+-- drop functions
+-- create functions
+-- create triggers
 
--- Create triggers
-create trigger b_iu_artist BEFORE INSERT OR DELETE OR UPDATE ON artist 
-   FOR EACH ROW EXECUTE PROCEDURE b_iu_update_lastmodified();
-create trigger b_iu_album BEFORE INSERT OR DELETE OR UPDATE ON album 
-   FOR EACH ROW EXECUTE PROCEDURE b_iu_update_lastmodified();
-create trigger b_iu_label BEFORE INSERT OR DELETE OR UPDATE ON label 
-   FOR EACH ROW EXECUTE PROCEDURE b_iu_update_lastmodified();
-create trigger b_iu_track BEFORE INSERT OR DELETE OR UPDATE ON track 
-   FOR EACH ROW EXECUTE PROCEDURE b_iu_update_lastmodified();
-
 COMMIT;
+




More information about the MusicBrainz-commits mailing list