r11791 - in mb_server/trunk: lib/MusicBrainz/Server lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit/Artist t

View: New views
1 Messages — Rating Filter:   Alert me  

r11791 - in mb_server/trunk: lib/MusicBrainz/Server lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit/Artist t

by root-97 :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View Threaded | Show Only this Message

Author: acid2
Date: 2009-06-29 16:15:27 +0000 (Mon, 29 Jun 2009)
New Revision: 11791

Added:
   mb_server/trunk/lib/MusicBrainz/Server/Edit/Artist/Merge.pm
   mb_server/trunk/t/edit_artist_merge.t
Modified:
   mb_server/trunk/lib/MusicBrainz/Server/Constants.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/Artist.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/ArtistCredit.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
   mb_server/trunk/t/data_artist.t
   mb_server/trunk/t/data_artistcredit.t
Log:
Merge artists edit type. See review r234

Merge branch 'edit-artist-merge'

Modified: mb_server/trunk/lib/MusicBrainz/Server/Constants.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Constants.pm 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/lib/MusicBrainz/Server/Constants.pm 2009-06-29 16:15:27 UTC (rev 11791)
@@ -35,6 +35,7 @@
 Readonly our $EDIT_ARTIST_CREATE => 1;
 Readonly our $EDIT_ARTIST_EDIT => 2;
 Readonly our $EDIT_ARTIST_DELETE => 3;
+Readonly our $EDIT_ARTIST_MERGE => 4;
 
 Readonly our $EDIT_LABEL_CREATE => 10;
 Readonly our $EDIT_LABEL_EDIT => 11;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Artist.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/Artist.pm 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Artist.pm 2009-06-29 16:15:27 UTC (rev 11791)
@@ -4,6 +4,8 @@
 use Carp;
 use List::MoreUtils qw( uniq );
 use MusicBrainz::Server::Entity::Artist;
+use MusicBrainz::Server::Data::ArtistCredit;
+use MusicBrainz::Server::Data::Edit;
 use MusicBrainz::Server::Data::Utils qw(
     defined_hash
     generate_gid
@@ -118,6 +120,25 @@
     return 1;
 }
 
+sub merge
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->dbh);
+    my $ac_data = MusicBrainz::Server::Data::ArtistCredit->new(c => $self->c);
+    my $edit_data = MusicBrainz::Server::Data::Edit->new(c => $self->c);
+
+    $self->alias->merge($old_id => $new_id);
+    $self->annotation->merge($old_id => $new_id);
+    $self->update_gid_redirects($old_id => $new_id);
+    $ac_data->merge_artists($old_id => $new_id);
+    $edit_data->merge_entities('artist', $old_id => $new_id);
+    
+    my $old_gid = $sql->SelectSingleValue('DELETE FROM artist WHERE id = ? RETURNING gid', $old_id);
+    $self->add_gid_redirects($old_gid => $new_id);
+
+    return 1;
+}
+
 sub _hash_to_row
 {
     my ($self, $artist, $names) = @_;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/ArtistCredit.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/ArtistCredit.pm 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/ArtistCredit.pm 2009-06-29 16:15:27 UTC (rev 11791)
@@ -110,6 +110,13 @@
     return $id;
 }
 
+sub merge_artists
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->dbh);
+    $sql->Do('UPDATE artist_credit_name SET artist = ? WHERE artist = ?', $new_id, $old_id);
+}
+
 __PACKAGE__->meta->make_immutable;
 no Moose;
 1;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Edit.pm 2009-06-29 16:15:27 UTC (rev 11791)
@@ -51,6 +51,14 @@
     return $edit;
 }
 
+sub merge_entities
+{
+    my ($self, $type, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->raw_dbh);
+    $sql->Do("DELETE FROM edit_$type WHERE edit IN (SELECT edit FROM edit_$type WHERE $type = ?) AND $type = ?", $new_id, $old_id);
+    $sql->Do("UPDATE edit_$type SET $type = ? WHERE $type = ?", $new_id, $old_id);
+}
+
 sub create
 {
     my ($self, %opts) = @_;

Modified: mb_server/trunk/t/data_artist.t
===================================================================
--- mb_server/trunk/t/data_artist.t 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/t/data_artist.t 2009-06-29 16:15:27 UTC (rev 11791)
@@ -1,6 +1,6 @@
 use strict;
 use warnings;
-use Test::More tests => 62;
+use Test::More tests => 65;
 use Test::Moose;
 use_ok 'MusicBrainz::Server::Data::Artist';
 use MusicBrainz::Server::Data::Search;
@@ -144,4 +144,16 @@
 $artist = $artist_data->get_by_gid('2adff2b0-5dbf-11de-8a39-0800200c9a66');
 is($artist->id, 3);
 
+my $sql_raw = Sql->new($c->raw_dbh);
+$sql_raw->Begin;
+
+$artist_data->merge(4, 3);
+$artist = $artist_data->get_by_id(4);
+ok(!defined $artist);
+
+$artist = $artist_data->get_by_id(3);
+ok(defined $artist);
+is($artist->name, 'Test Artist');
+
+$sql_raw->Commit;
 $sql->Commit;

Modified: mb_server/trunk/t/data_artistcredit.t
===================================================================
--- mb_server/trunk/t/data_artistcredit.t 2009-06-29 13:57:11 UTC (rev 11790)
+++ mb_server/trunk/t/data_artistcredit.t 2009-06-29 16:15:27 UTC (rev 11791)
@@ -1,6 +1,6 @@
 use strict;
 use warnings;
-use Test::More tests => 19;
+use Test::More tests => 21;
 use_ok 'MusicBrainz::Server::Data::ArtistCredit';
 
 use MusicBrainz::Server::Context;
@@ -40,4 +40,10 @@
     { name => 'Portishead', artist => 2 });
 ok(defined $ac);
 ok($ac > 4);
+
+$artist_credit_data->merge_artists(5, 3);
+$ac = $artist_credit_data->get_by_id(1);
+is($ac->names->[0]->artist_id, 4);
+is($ac->names->[1]->artist_id, 3);
+
 $sql->Commit;


_______________________________________________
MusicBrainz-commits mailing list
MusicBrainz-commits@...
http://lists.musicbrainz.org/mailman/listinfo/musicbrainz-commits