Am 26.08.2008 um 20:34 schrieb Matt S Trout:

On Tue, Aug 26, 2008 at 03:03:11PM +0200, Moritz Onken wrote:
As I said I'm on it and writing some examples and tests.

Ok, awesome. Please start a new thread when you've got that together, I
think this one was mostly the "resolving confusion" thread so the
"figuring out what to fix" one can be its own thing :)

first test is attached. Couldn't find a test case where it returns
totally unrelated rows. The only problem is that it returns rows
multiple times.

############################################################
use strict;
use warnings;

use Test::More;
use lib qw(t/lib);
use DBICTest;
use Data::Dumper;

my $schema = DBICTest->init_schema();

my $orig_debug = $schema->storage->debug;

BEGIN {
    eval "use DBD::SQLite";
    plan $@
      ? ( skip_all => 'needs DBD::SQLite for testing' )
      : ( tests => 10 );
}

my $artist = $schema->resultset("Artist")->first;
$artist->cds->delete;
$artist->onekeys->delete;

$artist->create_related( "cds", { title => "cd1", year => "1984" } );
$artist->create_related( "cds", { title => "cd2", year => "1984" } );
$artist->create_related( "cds", { title => "cd3", year => "1984" } );
$artist->create_related( "onekeys", { cd => 1 } );
$artist->create_related( "onekeys", { cd => 2 } );

is( $artist->onekeys->count, 2, "count without prefetch is fine" );
is( $artist->cds->count, 2 );

my $search = {};
my $attr = { prefetch => [qw/cds onekeys/] };

$artist = $schema->resultset("Artist")->search( $search, $attr )->first;

is( $artist->onekeys->count, 2, "artist has 2 onekeys" )
  ;    # returns 6 which is 2*3 (see l. 29)
is( $artist->cds->count, 3, "artist has 3 cds" );

my @cds = sort ( map { $_->title } $artist->cds->all );
is_deeply( [EMAIL PROTECTED], [qw(cd1 cd2 cd3)], "no duplicates" );

my @onekeys = sort ( map { $_->cd } $artist->onekeys->all );
is_deeply( [EMAIL PROTECTED], [qw(1 2)] );    # @onekeys = (1,1,2,2);

$attr = { prefetch => [qw/onekeys cds/] };    # switch order

$artist =
  $schema->resultset("Artist")
  ->search( { artistid => $artist->artistid }, $attr )->first;

is( $artist->onekeys->count, 2, "artist has 2 onekeys" );
is( $artist->cds->count,     3, "artist has 3 cds" );

@cds = sort ( map { $_->title } $artist->cds->all );
is_deeply( [EMAIL PROTECTED], [qw(cd1 cd2 cd3)] )
  ;    # @onekeys = qw(cd1 cd1 cd2 cd2 cd3 cd3));

@onekeys = sort ( map { $_->cd } $artist->onekeys->all );
is_deeply( [EMAIL PROTECTED], [qw(1 2)] );


_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]

Reply via email to