[Bast-commits] r3418 - 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:08:11 GMT 2007


Author: matthewt
Date: 2007-05-29 02:08:08 +0100 (Tue, 29 May 2007)
New Revision: 3418

Modified:
   branches/DBIx-Class-current/
   branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm
   branches/DBIx-Class-current/t/101populate_rs.t
Log:
 r51629 at cain (orig r3325):  jnapiorkowski | 2007-05-18 16:01:47 +0000
 -- Additional tests for checking correct autocreation of PK's when needed
 -- Cleaned up the code to reflect DBIx indenting standards
 -- Additional documentation



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:3324
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:3325
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:08:01 UTC (rev 3417)
+++ branches/DBIx-Class-current/lib/DBIx/Class/ResultSet.pm	2007-05-29 01:08:08 UTC (rev 3418)
@@ -1252,32 +1252,45 @@
 submitting to a $resultset->create(...) method.
 
 In void context, C<insert_bulk> in L<DBIx::Class::Storage::DBI> is used
-to insert the data, as this is a fast method.
+to insert the data, as this is a faster method.
 
 Otherwise, each set of data is inserted into the database using
 L<DBIx::Class::ResultSet/create>, and a arrayref of the resulting row
 objects is returned.
 
-i.e.,
+Example:  Assuming an Artist Class that has many CDs Classes relating:
 
-  $rs->populate( [
-	  { artistid => 4, name => 'Manufactured Crap', cds => [ 
-		  { title => 'My First CD', year => 2006 },
-		  { title => 'Yet More Tweeny-Pop crap', 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 }
-		]
-	  },
-	  { name => 'Like I Give a Damn' }
+  my $Artist_rs = $schema->resultset("Artist");
+  
+  ## Void Context Example 
+  $Artist_rs->populate([
+     { artistid => 4, name => 'Manufactured Crap', cds => [ 
+        { title => 'My First CD', year => 2006 },
+        { title => 'Yet More Tweeny-Pop crap', 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 }
+      ],
+     },
+  ]);
+  
+  ## Array Context Example
+  my ($ArtistOne, $ArtistTwo, $ArtistThree) = $Artist_rs->populate([
+    { name => "Artist One"},
+	{ name => "Artist Two"},
+	{ name => "Artist Three", cds=> [
+	  { title => "First CD", year => 2007},
+	  { title => "Second CD", year => 2008},
+	]}
+  ]);
+  
+  print $ArtistOne->name; ## response is 'Artist One'
+  print $ArtistThree->cds->count ## reponse is '2'
 
-	] );
-
 =cut
-use Data::Dump qw/dump/;
 
 sub populate {
   my ($self, $data) = @_;
@@ -1290,46 +1303,44 @@
     return @created;
   } else {
     my ($first, @rest) = @$data;
-	
+
     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,
-	);
+      $self->result_source, 
+      \@names, 
+      \@values,
+    );
 
-	my @rels = grep { $self->result_source->has_relationship($_) } keys %$first;
-	my @pks = $self->result_source->primary_columns;
+    my @rels = grep { $self->result_source->has_relationship($_) } keys %$first;
+    my @pks = $self->result_source->primary_columns;
 
-	foreach my $item (@$data) {
+    foreach my $item (@$data) {
 
-		foreach my $rel (@rels) {
-			next unless $item->{$rel};
-			
-			my $parent	= $self->find(map {{$_=>$item->{$_}} } @pks) || next;
-			my $child	= $parent->$rel;
+      foreach my $rel (@rels) {
+        next unless $item->{$rel};
 
-			my $related = $child->result_source->resolve_condition(
-				
-				$parent->result_source->relationship_info($rel)->{cond},
-				$child,
-				$parent,
-			);
-			
-			my @rows_to_add = ref $item->{$rel} eq 'ARRAY' ? @{$item->{$rel}} : ($item->{$rel});
-			my @populate = map { {%$_, %$related} } @rows_to_add;
+        my $parent = $self->find(map {{$_=>$item->{$_}} } @pks) || next;
+        my $child = $parent->$rel;
+		
+        my $related = $child->result_source->resolve_condition(
+          $parent->result_source->relationship_info($rel)->{cond},
+          $child,
+          $parent,
+        );
 
-			$child->populate( \@populate );
-		}
-	}
-	
+        my @rows_to_add = ref $item->{$rel} eq 'ARRAY' ? @{$item->{$rel}} : ($item->{$rel});
+        my @populate = map { {%$_, %$related} } @rows_to_add;
+
+        $child->populate( \@populate );
+      }
+    }
   }
 }
 

Modified: branches/DBIx-Class-current/t/101populate_rs.t
===================================================================
--- branches/DBIx-Class-current/t/101populate_rs.t	2007-05-29 01:08:01 UTC (rev 3417)
+++ branches/DBIx-Class-current/t/101populate_rs.t	2007-05-29 01:08:08 UTC (rev 3418)
@@ -5,7 +5,7 @@
 use lib qw(t/lib);
 use DBICTest;
 
-plan tests => 31;
+plan tests => 40;
 
 my $schema = DBICTest->init_schema();
 my $rs = $schema->resultset('Artist');
@@ -42,9 +42,7 @@
 	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/;
-	
+		
 	ok( $crap->cds->count == 2, "got Expected Number of Cds");
 	ok( $girl->cds->count == 3, "got Expected Number of Cds");
 }
@@ -113,3 +111,40 @@
 	is($artist->cds->count, 1, 'Has One CD');
 }
 
+RETURN_RESULTSETS_AUTOPK: {
+
+	my ($crap, $girl, $damn, $xxxaaa) = $rs->populate( [
+	  { name => 'Manufactured CrapC', cds => [ 
+		  { title => 'My First CD', year => 2006 },
+		  { title => 'Yet More Tweeny-Pop crap', year => 2007 },
+		] 
+	  },
+	  { name => 'Angsty-Whiny GirlC', 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 }
+
+		]
+	  },
+	  { name => 'Like I Give a DamnC' },
+	  
+	  { name => 'bbbbC', cds => [
+		  { title => 'xxxaaa' ,year => 2005 },
+		]
+	  },
+
+	] );
+	
+	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 CrapC', "Got Correct name for result object");
+	ok( $girl->name eq 'Angsty-Whiny GirlC', "Got Correct name for result object");
+	ok( $xxxaaa->name eq 'bbbbC', "Got Correct name for result object");
+	
+	ok( $crap->cds->count == 2, "got Expected Number of Cds");
+	ok( $girl->cds->count == 3, "got Expected Number of Cds");
+}
+




More information about the Bast-commits mailing list