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