[Dbix-class] 0.08 Regression?
Adam Herzog
adam at herzogdesigns.com
Wed Jun 13 17:37:53 GMT 2007
I think I stumbled across a regression while testing RC3. I'm not
sure how best to incorporate a test into the suite, but I've put
together a minimal case that demonstrates the problem. It works
correctly (or at least, as I expect it to) under 0.07006, but not the
latest RC.
The test scenario contains authors and books, where a book belongs_to
an author, and an author has_many books. The problem seems to occur
where the foreign key in books has an accessor set, and the
relationship has the same name as the actual column name. Somewhere
along the line, the column accessor is getting confused with the
relationship, I guess.
I've included the test files inline below, as well as attached them
to the email.
-A
============================
MyDB.pm
============================
package MyDB;
use strict;
use warnings;
use base qw/DBIx::Class::Schema/;
__PACKAGE__->load_classes(qw/Author Book/);
1;
============================
MyDB/Author.pm
============================
package MyDB::Author;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('authors');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
name => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_many( 'books' => 'MyDB::Book', 'author' );
1;
============================
MyDB/Book.pm
============================
package MyDB::Book;
use warnings;
use strict;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/ Core /);
__PACKAGE__->table('books');
__PACKAGE__->add_columns(
id => {
data_type => 'INTEGER',
is_nullable => 0,
is_auto_increment => 1,
},
title => {
data_type => 'VARCHAR',
size => 150,
is_nullable => 0,
},
author => {
accessor => 'author_id',
data_type => 'INTEGER',
is_nullable => 0,
is_foreign_key => 1,
},
);
__PACKAGE__->set_primary_key('id');
__PACKAGE__->belongs_to( 'author' => 'MyDB::Author', 'author' );
1;
============================
test.t
============================
use strict;
use warnings;
use Test::More tests => 3;
use MyDB;
my $schema = MyDB->connect( 'dbi:mysql:test', '', '' );
$schema->deploy( { add_drop_table => 1 } );
$schema->populate( 'Author', [ [qw/id name/], [ 1, 'Stephen
King' ], ] );
$schema->populate( 'Book', [ [qw/id title author/], [ 1, 'Misery',
1 ], ] );
my $book = $schema->resultset('Book')->find(1);
is( $book->title(), 'Misery' );
is( $book->author_id(), 1 );
is( $book->author->name(), 'Stephen King' );
============================
test output (under RC3)
============================
test....ok 1/3
# Failed test at test.t line 15.
# got: 'MyDB::Author=HASH(0x1a9bbbc)'
# expected: '1'
Can't locate object method "author" via package "MyDB::Book" at
test.t line 16.
test....NOK 2/3# Looks like you planned 3 tests but only ran 2.
# Looks like you failed 1 test of 2 run.
# Looks like your test died just after 2.
test....dubious
Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 2-3
Failed 2/3 tests, 33.33% okay
Failed Test Stat Wstat Total Fail List of Failed
------------------------------------------------------------------------
-------
test.t 255 65280 3 3 2-3
Failed 1/1 test scripts. 2/3 subtests failed.
Files=1, Tests=3, 0 wallclock secs ( 0.33 cusr + 0.06 csys = 0.39
CPU)
Failed 1/1 test programs. 2/3 subtests failed.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Author.pm
Type: text/x-perl-script
Size: 515 bytes
Desc: not available
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20070613/dd52a137/Author.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Book.pm
Type: text/x-perl-script
Size: 674 bytes
Desc: not available
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20070613/dd52a137/Book.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: MyDB.pm
Type: text/x-perl-script
Size: 125 bytes
Desc: not available
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20070613/dd52a137/MyDB.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.t
Type: application/octet-stream
Size: 483 bytes
Desc: not available
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20070613/dd52a137/test.obj
More information about the Dbix-class
mailing list