[Bast-commits] r3415 - 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:51 GMT 2007


Author: matthewt
Date: 2007-05-29 02:07:51 +0100 (Tue, 29 May 2007)
New Revision: 3415

Modified:
   branches/DBIx-Class-current/
   branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm
   branches/DBIx-Class-current/t/101populate_rs.t
Log:
 r51617 at cain (orig r3319):  jnapiorkowski | 2007-05-17 20:03:35 +0000
 - void context only uses insert bulk now.
 - added a few test for edge cases, like only one row to insert
 



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:3317
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: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

Modified: branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm
===================================================================
--- branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm	2007-05-29 01:07:45 UTC (rev 3414)
+++ branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm	2007-05-29 01:07:51 UTC (rev 3415)
@@ -1280,7 +1280,7 @@
 use Data::Dump qw/dump/;
 
 sub populate {
-  my ($self, $data) = @_;  #warn dump $self->result_source->primary_columns;
+  my ($self, $data) = @_;
   
   if(defined wantarray) {
     my @created;
@@ -1297,12 +1297,13 @@
 	## and relationships similarly to how schema->populate requires a first item
 	## of all the column names.
 	
-    my @names = grep { !$self->result_source->has_relationship($_) } keys %$first;
-	
+    my @names = grep { !ref $first->{$_} } keys %$first;
+	my @values = map { [ map {defined $_ ? $_ : $self->throw_exception("Undefined value for column!")} @$_{@names} ] } @$data;
+		
     $self->result_source->storage->insert_bulk(
 		$self->result_source, 
 		\@names, 
-		[map { [ map {defined $_ ? $_ : $self->throw_exception("Undefined value for column!")} @$_{@names} ] } @$data]
+		\@values,
 	);
 	
 	## Again we assume the first row has to define all the related resultsets
@@ -1310,18 +1311,31 @@
 	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);
+			next unless $item->{$rel};
+			my $parent	= $self->find(map {{$_=>$item->{$_}} } @pks)
+			 || next;
 			
-			my @discard = $result->$rel->populate($item->{$rel});
-			#$result->$rel->populate($item->{$rel});
+			my $child	= $parent->$rel;
+
+			my $related = $child->result_source->resolve_condition(
+				
+				$parent->result_source->relationship_info($rel)->{cond},
+				$child,
+				$parent,
+				
+			);
+			
+			my $populate = [map {  {%$_, %$related} } @{$item->{$rel}}];
+
+			$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:45 UTC (rev 3414)
+++ branches/DBIx-Class-current/t/101populate_rs.t	2007-05-29 01:07:51 UTC (rev 3415)
@@ -25,7 +25,12 @@
 
 		]
 	  },
-	  { artistid=>6, name => 'Like I Give a Damn' }
+	  { artistid=>6, name => 'Like I Give a Damn' },
+	  
+	  { artistid => 7, name => 'bbbb', cds => [
+		  { title => 'xxxaaa' ,year => 2005 },
+		]
+	  },
 
 	] );
 	
@@ -45,23 +50,23 @@
 RETURN_VOID: {
 
 	$rs->populate( [
-	  { artistid => 7, name => 'Manufactured CrapB', cds => [ 
+	  { artistid => 8, name => 'Manufactured CrapB', cds => [ 
 		  { title => 'My First CDB', year => 2006 },
 		  { title => 'Yet More Tweeny-Pop crapB', year => 2007 },
 		] 
 	  },
-	  { artistid => 8, name => 'Angsty-Whiny GirlB', cds => [
+	  { artistid => 9, 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 }
 
 		]
 	  },
-	  {artistid=>9,  name => 'XXXX' }
+	  {artistid=>10,  name => 'XXXX' }
 
 	] );
 	
-	my $artist = $rs->find(7);
+	my $artist = $rs->find(8);
 
 	ok($artist, 'Found artist');
 	is($artist->name, 'Manufactured CrapB');
@@ -75,7 +80,7 @@
 	is($cds[1]->title, 'Yet More Tweeny-Pop crapB', 'Another crap CD');
 	is($cds[1]->year,  2007, 'Published in 2007');
 
-	$artist = $rs->find(8);
+	$artist = $rs->find(9);
 	ok($artist, 'Found artist');
 	is($artist->name, 'Angsty-Whiny GirlB');
 	is($artist->cds->count, 3, 'Has CDs');




More information about the Bast-commits mailing list