r11792 - in mb_server/trunk: lib/MusicBrainz/Server lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit/Label t

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

r11792 - in mb_server/trunk: lib/MusicBrainz/Server lib/MusicBrainz/Server/Data lib/MusicBrainz/Server/Edit/Label 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:41 +0000 (Mon, 29 Jun 2009)
New Revision: 11792

Added:
   mb_server/trunk/lib/MusicBrainz/Server/Edit/Label/Merge.pm
   mb_server/trunk/t/edit_label_merge.t
Modified:
   mb_server/trunk/lib/MusicBrainz/Server/Constants.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/Label.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/ReleaseLabel.pm
   mb_server/trunk/t/data_label.t
   mb_server/trunk/t/data_releaselabel.t
Log:
Merge labels edit type. See review 216

Merge branch 'edit-label-merge'

Modified: mb_server/trunk/lib/MusicBrainz/Server/Constants.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Constants.pm 2009-06-29 16:15:27 UTC (rev 11791)
+++ mb_server/trunk/lib/MusicBrainz/Server/Constants.pm 2009-06-29 16:15:41 UTC (rev 11792)
@@ -40,6 +40,7 @@
 Readonly our $EDIT_LABEL_CREATE => 10;
 Readonly our $EDIT_LABEL_EDIT => 11;
 Readonly our $EDIT_LABEL_DELETE => 13;
+Readonly our $EDIT_LABEL_MERGE => 14;
 
 Readonly our $EDIT_RELEASEGROUP_DELETE => 23;
 Readonly our $EDIT_RELEASEGROUP_MERGE => 24;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Label.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/Label.pm 2009-06-29 16:15:27 UTC (rev 11791)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Label.pm 2009-06-29 16:15:41 UTC (rev 11792)
@@ -1,6 +1,8 @@
 package MusicBrainz::Server::Data::Label;
 
 use Moose;
+use MusicBrainz::Server::Data::Edit;
+use MusicBrainz::Server::Data::ReleaseLabel;
 use MusicBrainz::Server::Entity::Label;
 use MusicBrainz::Server::Data::Utils qw(
     defined_hash
@@ -114,6 +116,27 @@
     return 1;
 }
 
+sub merge
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $new_label = $self->get_by_id($new_id);
+    my $rl_data = MusicBrainz::Server::Data::ReleaseLabel->new(c => $self->c);
+    my $edit_data = MusicBrainz::Server::Data::Edit->new(c => $self->c);
+
+    my $sql = Sql->new($self->c->dbh);
+    $self->alias->merge($old_id => $new_id);
+    $self->annotation->merge($old_id => $new_id);
+    $rl_data->merge_labels($old_id => $new_id);
+    $edit_data->merge_entities('label', $old_id => $new_id);
+    $self->update_gid_redirects($old_id => $new_id);
+
+    $sql->Do('DELETE FROM label_meta WHERE id = ?', $old_id);
+    my $old_gid = $sql->SelectSingleValue('DELETE FROM label WHERE id = ? RETURNING gid', $old_id);
+    $self->add_gid_redirects($old_gid => $new_id);
+
+    return 1;
+}
+
 sub _hash_to_row
 {
     my ($self, $label, $names) = @_;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/ReleaseLabel.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/ReleaseLabel.pm 2009-06-29 16:15:27 UTC (rev 11791)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/ReleaseLabel.pm 2009-06-29 16:15:41 UTC (rev 11792)
@@ -74,6 +74,13 @@
         $query, $label_id, $offset || 0);
 }
 
+sub merge_labels
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->dbh);
+    $sql->Do('UPDATE release_label SET label = ? WHERE label = ?', $new_id, $old_id);
+}
+
 __PACKAGE__->meta->make_immutable;
 no Moose;
 1;

Modified: mb_server/trunk/t/data_label.t
===================================================================
--- mb_server/trunk/t/data_label.t 2009-06-29 16:15:27 UTC (rev 11791)
+++ mb_server/trunk/t/data_label.t 2009-06-29 16:15:41 UTC (rev 11792)
@@ -1,6 +1,6 @@
 use strict;
 use warnings;
-use Test::More tests => 44;
+use Test::More tests => 46;
 use_ok 'MusicBrainz::Server::Data::Label';
 use MusicBrainz::Server::Data::Search;
 
@@ -89,4 +89,16 @@
 $label_data->delete($label->id);
 $label = $label_data->get_by_id($label->id);
 ok(!defined $label);
+
+my $sql_raw = Sql->new($c->raw_dbh);
+$sql_raw->Begin;
+
+$label_data->merge(2, 1);
+$label = $label_data->get_by_id(2);
+ok(!defined $label);
+
+$label = $label_data->get_by_id(1);
+ok(defined $label);
+
+$sql_raw->Commit;
 $sql->Commit;

Modified: mb_server/trunk/t/data_releaselabel.t
===================================================================
--- mb_server/trunk/t/data_releaselabel.t 2009-06-29 16:15:27 UTC (rev 11791)
+++ mb_server/trunk/t/data_releaselabel.t 2009-06-29 16:15:41 UTC (rev 11792)
@@ -1,10 +1,11 @@
 use strict;
 use warnings;
-use Test::More tests => 16;
+use Test::More tests => 18;
 use_ok 'MusicBrainz::Server::Data::ReleaseLabel';
 
 use MusicBrainz::Server::Context;
 use MusicBrainz::Server::Test;
+use Sql;
 
 my $c = MusicBrainz::Server::Test->create_test_context();
 MusicBrainz::Server::Test->prepare_test_database($c);
@@ -30,3 +31,15 @@
 is( $rls->[2]->catalog_number, "ABC-123" );
 is( $rls->[3]->release->id, 1 );
 is( $rls->[3]->catalog_number, "ABC-123-X" );
+
+my $sql = Sql->new($c->dbh);
+$sql->Begin;
+
+$rl_data->merge_labels(2 => 1);
+($rls, $hits) = $rl_data->find_by_label(1, 100);
+is($hits, 4);
+
+($rls, $hits) = $rl_data->find_by_label(2, 100);
+is($hits, 0);
+
+$sql->Commit;


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