X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema.pm;h=e58fbf2368ca0438b54e0f5e9e68b63beeab8745;hb=4738027bec6af9ae613fe256bc53185a0337373f;hp=2a1c883572e4f23feb390c8230eab343243131f6;hpb=5d52945aba75c14ac389b43c378fae5109679c1d;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Schema.pm b/lib/DBIx/Class/Schema.pm index 2a1c883..e58fbf2 100644 --- a/lib/DBIx/Class/Schema.pm +++ b/lib/DBIx/Class/Schema.pm @@ -211,7 +211,6 @@ sub load_namespaces { foreach my $result (keys %results) { my $result_class = $results{$result}; $class->ensure_class_loaded($result_class); - $result_class->source_name($result) unless $result_class->source_name; my $rs_class = delete $resultsets{$result}; my $rs_set = $result_class->resultset_class; @@ -226,7 +225,9 @@ sub load_namespaces { $result_class->resultset_class($rs_class); } - push(@to_register, [ $result_class->source_name, $result_class ]); + my $source_name = $result_class->source_name || $result; + + push(@to_register, [ $source_name, $result_class ]); } } @@ -572,6 +573,14 @@ See L for more information. This interface is preferred over using the individual methods L, L, and L below. +WARNING: If you are connected with C 0> the transaction is +considered nested, and you will still need to call L to write your +changes when appropriate. You will also want to connect with C +1> to get partial rollback to work, if the storage driver for your database +supports it. + +Connecting with C 1> is recommended. + =cut sub txn_do { @@ -707,26 +716,15 @@ wantarray context if you want the PKs automatically created. sub populate { my ($self, $name, $data) = @_; - my $rs = $self->resultset($name); - my @names = @{shift(@$data)}; - if(defined wantarray) { - my @created; - foreach my $item (@$data) { - my %create; - @create{@names} = @$item; - push(@created, $rs->create(\%create)); + if(my $rs = $self->resultset($name)) { + if(defined wantarray) { + return $rs->populate($data); + } else { + $rs->populate($data); } - return @created; - } - my @results_to_create; - foreach my $datum (@$data) { - my %result_to_create; - foreach my $index (0..$#names) { - $result_to_create{$names[$index]} = $$datum[$index]; - } - push @results_to_create, \%result_to_create; + } else { + $self->throw_exception("$name is not a resultset"); } - $rs->populate(\@results_to_create); } =head2 connection @@ -1054,7 +1052,7 @@ If no arguments are passed, then the following default values are used: =item databases - ['MySQL', 'SQLite', 'PostgreSQL'] -=item version - $schema->VERSION +=item version - $schema->schema_version =item directory - './' @@ -1239,7 +1237,7 @@ sub register_extra_source { sub _register_source { my ($self, $moniker, $source, $params) = @_; - %$source = %{ $source->new( { %$source, source_name => $moniker }) }; + $source = $source->new({ %$source, source_name => $moniker }); my %reg = %{$self->source_registrations}; $reg{$moniker} = $source;