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