use Data::Dump qw/dump/;
sub populate {
- my ($self, $data) = @_;
+ my ($self, $data) = @_; #warn dump $self->result_source->primary_columns;
if(defined wantarray) {
my @created;
else
{
my ($first, @rest) = @$data;
- my @names = keys %$first;
- warn dump keys %$_ for @$data;
+ ## We assume for now that the first item is required to name all the columns
+ ## and relationships similarly to how schema->populate requires a first item
+ ## of all the column names.
- #@$data = map { my %unit = %$_; warn dump @unit{qw/cds artistid/}; warn dump %unit; } @$data;
+ my @names = grep { !$self->result_source->has_relationship($_) } keys %$first;
- die "Void mode not supported yet :)";
+ $self->result_source->storage->insert_bulk(
+ $self->result_source,
+ \@names,
+ [map { [ map {defined $_ ? $_ : $self->throw_exception("Undefined value for column!")} @$_{@names} ] } @$data]
+ );
+
+ ## Again we assume the first row has to define all the related resultsets
+ my @rels = grep { $self->result_source->has_relationship($_) } keys %$first;
+ my @pks = $self->result_source->primary_columns;
+
+ ## Must have PKs to use this!!!
+
+ foreach my $item (@$data)
+ {
+ ## First we need to get a result for each
+ ## We need to call populate for each relationship.
+
+ foreach my $rel (@rels)
+ {
+ my $result = $self->find(map {{$_=>$item->{$_}} } @pks);
+
+ my @discard = $result->$rel->populate($item->{$rel});
+ #$result->$rel->populate($item->{$rel});
+ }
+ }
- #$self->result_source->storage->insert_bulk($self->result_source, \@names, $data);
}
}
use lib qw(t/lib);
use DBICTest;
-plan tests => 18;
+plan tests => 25;
my $schema = DBICTest->init_schema();
my $rs = $schema->resultset('Artist');
RETURN_RESULTSETS: {
- my ($crap, $girl) = $rs->populate( [
+ my ($crap, $girl, $damn) = $rs->populate( [
{ artistid => 4, name => 'Manufactured Crap', cds => [
{ title => 'My First CD', year => 2006 },
{ title => 'Yet More Tweeny-Pop crap', year => 2007 },
]
},
- { name => 'Like I Give a Damn' }
+ { artistid=>6, name => 'Like I Give a Damn' }
] );
isa_ok( $crap, 'DBICTest::Artist', "Got 'Artist'");
- isa_ok( $girl, 'DBICTest::Artist', "Got 'Artist'");
+ isa_ok( $damn, 'DBICTest::Artist', "Got 'Artist'");
+ isa_ok( $girl, 'DBICTest::Artist', "Got 'Artist'");
ok( $crap->name eq 'Manufactured Crap', "Got Correct name for result object");
ok( $girl->name eq 'Angsty-Whiny Girl', "Got Correct name for result object");
RETURN_VOID: {
$rs->populate( [
- { artistid => 4, name => 'Manufactured Crap', cds => [
- { title => 'My First CD', year => 2006 },
- { title => 'Yet More Tweeny-Pop crap', year => 2007 },
+ { artistid => 7, name => 'Manufactured CrapB', cds => [
+ { title => 'My First CDB', year => 2006 },
+ { title => 'Yet More Tweeny-Pop crapB', year => 2007 },
]
},
- { artistid => 5, name => 'Angsty-Whiny Girl', cds => [
- { title => 'My parents sold me to a record company' ,year => 2005 },
- { title => 'Why Am I So Ugly?', year => 2006 },
- { title => 'I Got Surgery and am now Popular', year => 2007 }
+ { artistid => 8, name => 'Angsty-Whiny GirlB', cds => [
+ { title => 'My parents sold me to a record companyB' ,year => 2005 },
+ { title => 'Why Am I So Ugly?B', year => 2006 },
+ { title => 'I Got Surgery and am now PopularB', year => 2007 }
]
},
- { name => 'Like I Give a Damn' }
+ {artistid=>9, name => 'XXXX' }
] );
-
- my $artist = $rs->find(4);
+
+ my $artist = $rs->find(7);
ok($artist, 'Found artist');
- is($artist->name, 'Manufactured Crap');
+ is($artist->name, 'Manufactured CrapB');
is($artist->cds->count, 2, 'Has CDs');
my @cds = $artist->cds;
- is($cds[0]->title, 'My First CD', 'A CD');
+ is($cds[0]->title, 'My First CDB', 'A CD');
is($cds[0]->year, 2006, 'Published in 2006');
- is($cds[1]->title, 'Yet More Tweeny-Pop crap', 'Another crap CD');
+ is($cds[1]->title, 'Yet More Tweeny-Pop crapB', 'Another crap CD');
is($cds[1]->year, 2007, 'Published in 2007');
- $artist = $rs->find(5);
+ $artist = $rs->find(8);
ok($artist, 'Found artist');
- is($artist->name, 'Angsty-Whiny Girl');
+ is($artist->name, 'Angsty-Whiny GirlB');
is($artist->cds->count, 3, 'Has CDs');
@cds = $artist->cds;
- is($cds[0]->title, 'My parents sold me to a record company', 'A CD');
+ is($cds[0]->title, 'My parents sold me to a record companyB', 'A CD');
is($cds[0]->year, 2005, 'Published in 2005');
- is($cds[1]->title, 'Why Am I So Ugly?', 'A Coaster');
+ is($cds[1]->title, 'Why Am I So Ugly?B', 'A Coaster');
is($cds[1]->year, 2006, 'Published in 2006');
- is($cds[2]->title, 'I Got Surgery and am now Popular', 'Selling un-attainable dreams');
+ is($cds[2]->title, 'I Got Surgery and am now PopularB', 'Selling un-attainable dreams');
is($cds[2]->year, 2007, 'Published in 2007');
- $artist = $rs->search({name => 'Like I Give A Damn'})->single;
- ok($artist);
+ $artist = $rs->search({name => 'XXXX'})->single;
+ ok($artist, "Got Expected Artist Result");
is($artist->cds->count, 0, 'No CDs');
+
}