r11789 - in mb_server/trunk: admin/sql admin/sql/updates lib/MusicBrainz/Server/Data t

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

r11789 - in mb_server/trunk: admin/sql admin/sql/updates lib/MusicBrainz/Server/Data 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 13:56:58 +0000 (Mon, 29 Jun 2009)
New Revision: 11789

Added:
   mb_server/trunk/admin/sql/updates/ngs-20090629-unique_alias.sql
Modified:
   mb_server/trunk/admin/sql/CreateIndexes.sql
   mb_server/trunk/admin/sql/DropIndexes.sql
   mb_server/trunk/admin/sql/InsertTestData.sql
   mb_server/trunk/lib/MusicBrainz/Server/Data/Alias.pm
   mb_server/trunk/lib/MusicBrainz/Server/Data/Annotation.pm
   mb_server/trunk/t/data_artist.t
   mb_server/trunk/t/data_artistalias.t
Log:
Merge alias/annotations support. See review 213

Merge branch 'merge-alias'

Modified: mb_server/trunk/admin/sql/CreateIndexes.sql
===================================================================
--- mb_server/trunk/admin/sql/CreateIndexes.sql 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/admin/sql/CreateIndexes.sql 2009-06-29 13:56:58 UTC (rev 11789)
@@ -5,8 +5,8 @@
 CREATE INDEX artist_idx_name ON artist (name);
 CREATE INDEX artist_idx_sortname ON artist (sortname);
 
-CREATE INDEX artist_alias_idx_name ON artist_alias (name);
 CREATE INDEX artist_alias_idx_artist ON artist_alias (artist);
+CREATE UNIQUE INDEX artist_alias_idx_name_artist ON artist_alias (name, artist);
 
 CREATE UNIQUE INDEX artist_name_idx_name ON artist_name (name);
 CREATE INDEX artist_name_idx_page ON artist_name (page_index(name));
@@ -21,8 +21,8 @@
 CREATE INDEX label_idx_name ON label (name);
 CREATE INDEX label_idx_sortname ON label (sortname);
 
-CREATE INDEX label_alias_idx_name ON label_alias (name);
 CREATE INDEX label_alias_idx_label ON label_alias (label);
+CREATE UNIQUE INDEX label_alias_idx_name_label ON label_alias (name, label);
 
 CREATE UNIQUE INDEX label_name_idx_name ON label_name (name);
 CREATE INDEX label_name_idx_page ON label_name (page_index(name));

Modified: mb_server/trunk/admin/sql/DropIndexes.sql
===================================================================
--- mb_server/trunk/admin/sql/DropIndexes.sql 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/admin/sql/DropIndexes.sql 2009-06-29 13:56:58 UTC (rev 11789)
@@ -2,7 +2,7 @@
 \unset ON_ERROR_STOP
 
 DROP INDEX artist_alias_idx_artist;
-DROP INDEX artist_alias_idx_name;
+DROP INDEX artist_alias_idx_name_artist;
 DROP INDEX artist_idx_gid;
 DROP INDEX artist_idx_name;
 DROP INDEX artist_idx_sortname;
@@ -12,7 +12,7 @@
 DROP INDEX country_idx_isocode;
 DROP INDEX editor_idx_name;
 DROP INDEX label_alias_idx_label;
-DROP INDEX label_alias_idx_name;
+DROP INDEX label_alias_idx_name_label;
 DROP INDEX label_idx_gid;
 DROP INDEX label_idx_name;
 DROP INDEX label_idx_sortname;

Modified: mb_server/trunk/admin/sql/InsertTestData.sql
===================================================================
--- mb_server/trunk/admin/sql/InsertTestData.sql 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/admin/sql/InsertTestData.sql 2009-06-29 13:56:58 UTC (rev 11789)
@@ -214,6 +214,9 @@
 INSERT INTO artist_alias (id, name, artist, editpending)
     VALUES (1, 8, 4, 2);
 
+INSERT INTO artist_alias (id, name, artist)
+    VALUES (2, 8, 5);
+
 TRUNCATE label_alias CASCADE;
 
 INSERT INTO label_name (id, name) VALUES (3, 'Test Label Alias');
@@ -391,8 +394,10 @@
 INSERT INTO annotation (id, editor, text) VALUES (4, 1, 'Test annotation 4.');
 INSERT INTO annotation (id, editor, text) VALUES (5, 1, 'Test annotation 5.');
 INSERT INTO annotation (id, editor, text) VALUES (6, 1, 'Test annotation 6.');
+INSERT INTO annotation (id, editor, text) VALUES (7, 1, 'Test annotation 7.');
 
 INSERT INTO artist_annotation (artist, annotation) VALUES (3, 1);
+INSERT INTO artist_annotation (artist, annotation) VALUES (4, 7);
 INSERT INTO label_annotation (label, annotation) VALUES (2, 2);
 INSERT INTO recording_annotation (recording, annotation) VALUES (1, 3);
 INSERT INTO release_annotation (release, annotation) VALUES (1, 4);

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Alias.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/Alias.pm 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Alias.pm 2009-06-29 13:56:58 UTC (rev 11789)
@@ -62,6 +62,16 @@
     return 1;
 }
 
+sub merge
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->dbh);
+    my $table = $self->table;
+    my $type = $self->type;
+    $sql->Do("DELETE FROM $table WHERE name IN (SELECT name FROM $table WHERE $type = ?) AND $type = ?", $new_id, $old_id);
+    $sql->Do("UPDATE $table SET $type = ? WHERE $type = ?", $new_id, $old_id);
+}
+
 no Moose;
 __PACKAGE__->meta->make_immutable;
 1;

Modified: mb_server/trunk/lib/MusicBrainz/Server/Data/Annotation.pm
===================================================================
--- mb_server/trunk/lib/MusicBrainz/Server/Data/Annotation.pm 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/lib/MusicBrainz/Server/Data/Annotation.pm 2009-06-29 13:56:58 UTC (rev 11789)
@@ -67,6 +67,15 @@
     return 1;
 }
 
+sub merge
+{
+    my ($self, $old_id, $new_id) = @_;
+    my $sql = Sql->new($self->c->dbh);
+    my $table = $self->table;
+    my $type = $self->type;
+    $sql->Do("UPDATE $table SET $type = ? WHERE $type = ?", $new_id, $old_id);
+}
+
 no Moose;
 __PACKAGE__->meta->make_immutable;
 1;

Modified: mb_server/trunk/t/data_artist.t
===================================================================
--- mb_server/trunk/t/data_artist.t 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/t/data_artist.t 2009-06-29 13:56:58 UTC (rev 11789)
@@ -1,6 +1,6 @@
 use strict;
 use warnings;
-use Test::More tests => 58;
+use Test::More tests => 62;
 use Test::Moose;
 use_ok 'MusicBrainz::Server::Data::Artist';
 use MusicBrainz::Server::Data::Search;
@@ -49,10 +49,23 @@
 my $annotation = $artist_data->annotation->get_latest(3);
 like ( $annotation->text, qr/Test annotation 1/ );
 
-$artist_data->annotation->delete(3);
+$artist_data->annotation->merge(3, 4);
 $annotation = $artist_data->annotation->get_latest(3);
 ok(!defined $annotation);
 
+$annotation = $artist_data->annotation->get_latest(4);
+like ( $annotation->text, qr/Test annotation 1/ );
+
+TODO: {
+    local $TODO = 'Merging annotations should concatenate or combine them';
+    like($annotation->text, qr/Test annotation 1/);
+    like($annotation->text, qr/Test annotation 7/);
+}
+
+$artist_data->annotation->delete(4);
+$annotation = $artist_data->annotation->get_latest(4);
+ok(!defined $annotation);
+
 $artist = $artist_data->get_by_gid('a4ef1d08-962e-4dd6-ae14-e42a6a97fc11');
 is ( $artist->id, 4 );
 

Modified: mb_server/trunk/t/data_artistalias.t
===================================================================
--- mb_server/trunk/t/data_artistalias.t 2009-06-29 13:56:42 UTC (rev 11788)
+++ mb_server/trunk/t/data_artistalias.t 2009-06-29 13:56:58 UTC (rev 11789)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 use strict;
-use Test::More tests => 11;
+use Test::More tests => 17;
 
 BEGIN { use_ok 'MusicBrainz::Server::Data::Artist' }
 
@@ -33,6 +33,23 @@
 is(scalar @$alias_set, 1);
 is($alias_set->[0]->name, 'Test Alias');
 
+$alias_set = $artist_data->alias->find_by_entity_id(3);
+is(scalar @$alias_set, 0);
+
+$artist_data->alias->merge(4, 3);
+
+$alias_set = $artist_data->alias->find_by_entity_id(3);
+is(scalar @$alias_set, 1);
+is($alias_set->[0]->name, 'Test Alias');
+
+$alias_set = $artist_data->alias->find_by_entity_id(5);
+is(scalar @$alias_set, 1);
+
+# Test merging aliases with identical names
+$artist_data->alias->merge(5, 3);
+is(scalar @$alias_set, 1, 'should only have 1 alias after merge');
+is($alias_set->[0]->name, 'Test Alias');
+
 $artist_data->alias->delete(4);
 $alias_set = $artist_data->alias->find_by_entity_id(4);
 is(scalar @$alias_set, 0);


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