[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