[Bast-commits] r3416 - in branches/DBIx-Class-current: .
lib/DBIx/Class t
matthewt at dev.catalyst.perl.org
matthewt at dev.catalyst.perl.org
Tue May 29 02:07:56 GMT 2007
Author: matthewt
Date: 2007-05-29 02:07:56 +0100 (Tue, 29 May 2007)
New Revision: 3416
Modified:
branches/DBIx-Class-current/
branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm
branches/DBIx-Class-current/t/101populate_rs.t
Log:
r51620 at cain (orig r3322): jnapiorkowski | 2007-05-18 00:05:07 +0000
-- some additional tests for edge cases
-- code cleanups
-- more intuitive handling of single row sub populates
Property changes on: branches/DBIx-Class-current
___________________________________________________________________
Name: svk:merge
- 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.bulk_create:29204
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.current:29201
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.oracle8:29250
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/bulk_create:3319
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/collapse_result_rewrite:3292
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/column_info_from_storage:2596
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/load_namespaces:2725
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/param_bind:3015
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/source-handle:2975
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/storage_exceptions:2617
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/versioning:2930
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3355
+ 168d5346-440b-0410-b799-f706be625ff1:/DBIx-Class-current:2207
462d4d0c-b505-0410-bf8e-ce8f877b3390:/local/bast/DBIx-Class:3159
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.bulk_create:29204
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.current:29201
78d5d833-3a7e-474d-aed6-cfba645156b5:/local/DBIx-Class.oracle8:29250
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-C3:318
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-joins:173
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class-resultset:570
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/bulk_create:3322
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/collapse_result_rewrite:3292
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/column_info_from_storage:2596
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/datetime:1716
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_compat:1855
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/find_unique_query_fixes:2142
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/inflate:1988
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/load_namespaces:2725
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/many_to_many:2025
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/param_bind:3015
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/re_refactor_bugfix:1944
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/reorganize_tests:1827
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset-new-refactor:1766
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_2_electric_boogaloo:2175
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/resultset_cleanup:2102
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/source-handle:2975
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/sqlt_tests_refactor:2043
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/storage_exceptions:2617
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/branches/DBIx-Class/versioning:2930
bd8105ee-0ff8-0310-8827-fb3f25b6796d:/trunk/DBIx-Class:3355
Modified: branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm
===================================================================
--- branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm 2007-05-29 01:07:51 UTC (rev 3415)
+++ branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm 2007-05-29 01:07:56 UTC (rev 3416)
@@ -1288,41 +1288,32 @@
push(@created, $self->create($item));
}
return @created;
- }
- else
- {
+ } else {
my ($first, @rest) = @$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.
-
my @names = grep { !ref $first->{$_} } keys %$first;
- my @values = map { [ map {defined $_ ? $_ : $self->throw_exception("Undefined value for column!")} @$_{@names} ] } @$data;
+
+ my @values = map {
+ [ map {
+ defined $_ ? $_ : $self->throw_exception("Undefined value for column!")
+ } @$_{@names} ]
+ } @$data;
$self->result_source->storage->insert_bulk(
$self->result_source,
\@names,
\@values,
);
-
- ## 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 $item (@$data) {
- foreach my $rel (@rels)
- {
+ foreach my $rel (@rels) {
next unless $item->{$rel};
- my $parent = $self->find(map {{$_=>$item->{$_}} } @pks)
- || next;
+ my $parent = $self->find(map {{$_=>$item->{$_}} } @pks) || next;
my $child = $parent->$rel;
my $related = $child->result_source->resolve_condition(
@@ -1330,12 +1321,12 @@
$parent->result_source->relationship_info($rel)->{cond},
$child,
$parent,
-
);
- my $populate = [map { {%$_, %$related} } @{$item->{$rel}}];
+ my @rows_to_add = ref $item->{$rel} eq 'ARRAY' ? @{$item->{$rel}} : ($item->{$rel});
+ my @populate = map { {%$_, %$related} } @rows_to_add;
- $child->populate( $populate );
+ $child->populate( \@populate );
}
}
Modified: branches/DBIx-Class-current/t/101populate_rs.t
===================================================================
--- branches/DBIx-Class-current/t/101populate_rs.t 2007-05-29 01:07:51 UTC (rev 3415)
+++ branches/DBIx-Class-current/t/101populate_rs.t 2007-05-29 01:07:56 UTC (rev 3416)
@@ -5,14 +5,14 @@
use lib qw(t/lib);
use DBICTest;
-plan tests => 25;
+plan tests => 31;
my $schema = DBICTest->init_schema();
my $rs = $schema->resultset('Artist');
RETURN_RESULTSETS: {
- my ($crap, $girl, $damn) = $rs->populate( [
+ my ($crap, $girl, $damn, $xxxaaa) = $rs->populate( [
{ artistid => 4, name => 'Manufactured Crap', cds => [
{ title => 'My First CD', year => 2006 },
{ title => 'Yet More Tweeny-Pop crap', year => 2007 },
@@ -37,9 +37,11 @@
isa_ok( $crap, 'DBICTest::Artist', "Got 'Artist'");
isa_ok( $damn, 'DBICTest::Artist', "Got 'Artist'");
isa_ok( $girl, 'DBICTest::Artist', "Got 'Artist'");
+ isa_ok( $xxxaaa, '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");
+ ok( $xxxaaa->name eq 'bbbb', "Got Correct name for result object");
use Data::Dump qw/dump/;
@@ -62,14 +64,14 @@
]
},
- {artistid=>10, name => 'XXXX' }
-
+ { artistid =>10, name => 'XXXX' },
+ { artistid =>11, name => 'wart', cds =>{ title => 'xxxaaa' ,year => 2005 }, },
] );
my $artist = $rs->find(8);
ok($artist, 'Found artist');
- is($artist->name, 'Manufactured CrapB');
+ is($artist->name, 'Manufactured CrapB', "Got Correct Name");
is($artist->cds->count, 2, 'Has CDs');
my @cds = $artist->cds;
@@ -82,9 +84,9 @@
$artist = $rs->find(9);
ok($artist, 'Found artist');
- is($artist->name, 'Angsty-Whiny GirlB');
+ is($artist->name, 'Angsty-Whiny GirlB', "Another correct name");
is($artist->cds->count, 3, 'Has CDs');
-
+
@cds = $artist->cds;
@@ -101,6 +103,13 @@
ok($artist, "Got Expected Artist Result");
is($artist->cds->count, 0, 'No CDs');
-
+
+ $artist = $rs->find(10);
+ is($artist->name, 'XXXX', "Got Correct Name");
+ is($artist->cds->count, 0, 'Has NO CDs');
+
+ $artist = $rs->find(11);
+ is($artist->name, 'wart', "Got Correct Name");
+ is($artist->cds->count, 1, 'Has One CD');
}
More information about the Bast-commits
mailing list