[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