From: Matt S Trout Date: Thu, 23 Nov 2006 21:21:39 +0000 (+0000) Subject: Merge 'DBIx-Class-current' into 'source-handle' X-Git-Tag: v0.08010~150^2~112^2~4 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=362c66db4c21efb954313e957bb6e5f8003ffa36;hp=-c;p=dbsrgits%2FDBIx-Class.git Merge 'DBIx-Class-current' into 'source-handle' r34019@cain (orig r2917): matthewt | 2006-11-22 05:22:32 +0000 moved tests to compose_namespace instead of compose_connection, marked compose_connection as deprecated, undocumented DB.pm r34020@cain (orig r2918): matthewt | 2006-11-22 05:30:06 +0000 class reg test r34029@cain (orig r2921): claco | 2006-11-22 17:38:43 +0000 Updated version requirement for Class::Accessor::Grouped to 0.03 r34035@cain (orig r2925): ningu | 2006-11-22 22:10:30 +0000 r18925@haferschleim (orig r2919): ningu | 2006-11-21 22:44:26 -0800 - slight optimization to ident_condition in PK.pm - get ident_cond in update() before applying arguments, so a column's pk can be updated r18926@haferschleim (orig r2920): ningu | 2006-11-21 22:54:10 -0800 revert update() change r18953@haferschleim (orig r2922): ningu | 2006-11-22 12:12:43 -0800 re-commit minimal pk-mutation in update(), with test r18956@haferschleim (orig r2924): ningu | 2006-11-22 14:09:07 -0800 add shallow copy of $attrs in ResultSet->new r34039@cain (orig r2929): ningu | 2006-11-23 00:02:14 +0000 trivial test cleanup r34041@cain (orig r2931): matthewt | 2006-11-23 20:05:52 +0000 r28722@cain (orig r2813): castaway | 2006-10-06 19:45:42 +0000 Versioning! With tests! Woo! r34042@cain (orig r2932): matthewt | 2006-11-23 20:05:58 +0000 r28723@cain (orig r2814): castaway | 2006-10-06 19:52:38 +0000 s/Path::Class/File::Spec/ r34043@cain (orig r2933): matthewt | 2006-11-23 20:06:02 +0000 r34044@cain (orig r2934): matthewt | 2006-11-23 20:06:06 +0000 r34045@cain (orig r2935): matthewt | 2006-11-23 20:06:09 +0000 r34031@cain (orig r2923): castaway | 2006-11-22 20:44:36 +0000 Fix tests, remove some random rints r34046@cain (orig r2936): matthewt | 2006-11-23 20:06:14 +0000 --- 362c66db4c21efb954313e957bb6e5f8003ffa36 diff --combined lib/DBIx/Class/ResultSet.pm index 1ace329,8eff3f6..718cb1a --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@@ -10,10 -10,9 +10,10 @@@ use Carp::Clan qw/^DBIx::Class/ use Data::Page; use Storable; use DBIx::Class::ResultSetColumn; +use DBIx::Class::ResultSourceHandle; use base qw/DBIx::Class/; -__PACKAGE__->mk_group_accessors('simple' => qw/result_source result_class/); +__PACKAGE__->mk_group_accessors('simple' => qw/result_class _source_handle/); =head1 NAME @@@ -85,8 -84,8 +85,9 @@@ sub new return $class->new_result(@_) if ref $class; my ($source, $attrs) = @_; - #weaken $source; + $source = $source->handle + unless $source->isa('DBIx::Class::ResultSourceHandle'); + $attrs = { %{$attrs||{}} }; if ($attrs->{page}) { $attrs->{rows} ||= 10; @@@ -97,8 -96,8 +98,8 @@@ $attrs->{alias} ||= 'me'; my $self = { - result_source => $source, - result_class => $attrs->{result_class} || $source->result_class, + _source_handle => $source, + result_class => $attrs->{result_class} || $source->resolve->result_class, cond => $attrs->{where}, count => undef, pager => undef, @@@ -239,7 -238,7 +240,7 @@@ sub search_rs : $having); } - my $rs = (ref $self)->new($self->result_source, $new_attrs); + my $rs = (ref $self)->new($self->_source_handle, $new_attrs); if ($rows) { $rs->set_cache($rows); } @@@ -741,7 -740,7 +742,7 @@@ sub next sub _construct_object { my ($self, @row) = @_; my $info = $self->_collapse_result($self->{_attrs}{as}, \@row); - my @new = $self->result_class->inflate_result($self->result_source, @$info); + my @new = $self->result_class->inflate_result($self->_source_handle, @$info); @new = $self->{_attrs}{record_filter}->(@new) if exists $self->{_attrs}{record_filter}; return @new; @@@ -917,7 -916,7 +918,7 @@@ sub _count { # Separated out so pager c # offset, order by and page are not needed to count. record_filter is cdbi delete $attrs->{$_} for qw/rows offset order_by page pager record_filter/; - my $tmp_rs = (ref $self)->new($self->result_source, $attrs); + my $tmp_rs = (ref $self)->new($self->_source_handle, $attrs); my ($count) = $tmp_rs->cursor->next; return $count; } @@@ -1228,7 -1227,7 +1229,7 @@@ attribute set on the resultset (10 by d sub page { my ($self, $page) = @_; - return (ref $self)->new($self->result_source, { %{$self->{attrs}}, page => $page }); + return (ref $self)->new($self->_source_handle, { %{$self->{attrs}}, page => $page }); } =head2 new_result @@@ -1258,9 -1257,11 +1259,9 @@@ sub new_result my %new = ( %{ $self->_remove_alias($values, $alias) }, %{ $self->_remove_alias($collapsed_cond, $alias) }, - -result_source => $self->result_source, ); - my $obj = $self->result_class->new(\%new); - return $obj; + return $self->result_class->new(\%new,$self->_source_handle); } # _collapse_cond @@@ -1554,7 -1555,7 +1555,7 @@@ sub related_resultset my $rel_obj = $self->result_source->relationship_info($rel); $self->throw_exception( - "search_related: result source '" . $self->result_source->name . + "search_related: result source '" . $self->_source_handle->source_moniker . "' has no such relationship $rel") unless $rel_obj; @@@ -1563,7 -1564,7 +1564,7 @@@ my $join_count = $seen->{$rel}; my $alias = ($join_count > 1 ? join('_', $rel, $join_count) : $rel); - $self->result_source->schema->resultset($rel_obj->{class})->search_rs( + $self->_source_handle->schema->resultset($rel_obj->{class})->search_rs( undef, { %{$self->{attrs}||{}}, join => undef, @@@ -1604,7 -1605,7 +1605,7 @@@ sub _resolved_attrs return $self->{_attrs} if $self->{_attrs}; my $attrs = { %{$self->{attrs}||{}} }; - my $source = $self->{result_source}; + my $source = $self->result_source; my $alias = $attrs->{alias}; $attrs->{columns} ||= delete $attrs->{cols} if exists $attrs->{cols}; @@@ -1736,16 -1737,6 +1737,16 @@@ sub _merge_attr } } +sub result_source { + my $self = shift; + + if (@_) { + $self->_source_handle($_[0]->handle); + } else { + $self->_source_handle->resolve; + } +} + =head2 throw_exception See L for details. @@@ -1754,7 -1745,7 +1755,7 @@@ sub throw_exception { my $self=shift; - $self->result_source->schema->throw_exception(@_); + $self->_source_handle->schema->throw_exception(@_); } # XXX: FIXME: Attributes docs need clearing up diff --combined lib/DBIx/Class/Row.pm index c4cfadc,ae72e6f..a1624af --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@@ -6,7 -6,7 +6,7 @@@ use warnings use base qw/DBIx::Class/; use Carp::Clan qw/^DBIx::Class/; -__PACKAGE__->mk_group_accessors('simple' => 'result_source'); +__PACKAGE__->mk_group_accessors('simple' => qw/_source_handle/); =head1 NAME @@@ -30,7 -30,7 +30,7 @@@ Creates a new row object from column = =cut sub new { - my ($class, $attrs) = @_; + my ($class, $attrs, $source) = @_; $class = ref $class if ref $class; my $new = { _column_data => {} }; @@@ -39,7 -39,9 +39,7 @@@ if ($attrs) { $new->throw_exception("attrs must be a hashref") unless ref($attrs) eq 'HASH'; - if (my $source = delete $attrs->{-result_source}) { - $new->result_source($source); - } + foreach my $k (keys %$attrs) { $new->throw_exception("No such column $k on $class") unless $class->has_column($k); @@@ -47,8 -49,6 +47,8 @@@ } } + $new->_source_handle($source) if $source; + return $new; } @@@ -67,9 -67,9 +67,9 @@@ L) sub insert { my ($self) = @_; return $self if $self->in_storage; - $self->{result_source} ||= $self->result_source_instance + my $source = $self->result_source; + $source ||= $self->result_source($self->result_source_instance) if $self->can('result_source_instance'); - my $source = $self->{result_source}; $self->throw_exception("No result_source set on this object; can't insert") unless $source; #use Data::Dumper; warn Dumper($self); @@@ -108,12 -108,12 +108,12 @@@ required sub update { my ($self, $upd) = @_; $self->throw_exception( "Not in database" ) unless $self->in_storage; my $ident_cond = $self->ident_condition; $self->throw_exception("Cannot safely update a row in a PK-less table") if ! keys %$ident_cond; + $self->set_columns($upd) if $upd; + my %to_update = $self->get_dirty_columns; + return $self unless keys %to_update; my $rows = $self->result_source->storage->update( $self->result_source->from, \%to_update, $ident_cond); if ($rows == 0) { @@@ -325,17 -325,9 +325,17 @@@ Called by ResultSet to inflate a resul sub inflate_result { my ($class, $source, $me, $prefetch) = @_; - #use Data::Dumper; print Dumper(@_); + + my ($source_handle) = $source; + + if ($source->isa('DBIx::Class::ResultSourceHandle')) { + $source = $source_handle->resolve + } else { + $source_handle = $source->handle + } + my $new = { - result_source => $source, + _source_handle => $source_handle, _column_data => $me, _in_storage => 1 }; @@@ -435,18 -427,6 +435,18 @@@ sub is_column_changed Accessor to the ResultSource this object was created from +=cut + +sub result_source { + my $self = shift; + + if (@_) { + $self->_source_handle($_[0]->handle); + } else { + $self->_source_handle->resolve; + } +} + =head2 register_column $column_info = { .... };