From: John Napiorkowski Date: Wed, 28 May 2008 17:29:00 +0000 (+0000) Subject: Merge 'trunk' into 'replication_dedux' X-Git-Tag: v0.08240~402^2~36 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=9c0df5f32b68e23c670c89ce6cdbff60b4bd0ed0;hp=10b4863bd65f323d71eb11da4436e5410b4ef189;p=dbsrgits%2FDBIx-Class.git Merge 'trunk' into 'replication_dedux' r13166@dev (orig r4392): castaway | 2008-05-19 16:57:25 -0500 Added doc for "for => update" attribute, thanks StuartL. r13167@dev (orig r4393): castaway | 2008-05-19 16:59:16 -0500 Oops, =cut after the pod not in the middle r13272@dev (orig r4419): ash | 2008-05-27 05:41:44 -0500 Update FAQ to mention behavour of scalar refs w.r.t. update r13273@dev (orig r4420): ash | 2008-05-27 07:49:09 -0500 Add set_cache example to cookbook r13274@dev (orig r4421): ash | 2008-05-27 07:50:10 -0500 Fix var name typo in cookbook r13376@dev (orig r4422): matthewt | 2008-05-27 08:31:58 -0500 version bump, deprecated ResultSetManager --- diff --git a/Changes b/Changes index d15c510..67882d6 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,6 @@ Revision history for DBIx::Class + - mark ResultSetManager as deprecated and undocument it - pod fix (RT #32988) - add Test::Exception to test requirements (RT #34256) - make ash's build_requires/META.yml fixes work better diff --git a/lib/DBIx/Class.pm b/lib/DBIx/Class.pm index 9147f46..98dc34a 100644 --- a/lib/DBIx/Class.pm +++ b/lib/DBIx/Class.pm @@ -24,7 +24,9 @@ sub component_base_class { 'DBIx::Class' } # i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports # brain damage and presumably various other packaging systems too -$VERSION = '0.08010'; +$VERSION = '0.08099_01'; + +$VERSION = eval $VERSION; # numify for warning-free dev releases sub MODIFY_CODE_ATTRIBUTES { my ($class,$code,@attrs) = @_; diff --git a/lib/DBIx/Class/Manual/Cookbook.pod b/lib/DBIx/Class/Manual/Cookbook.pod index 8fdd2d6..ef36172 100644 --- a/lib/DBIx/Class/Manual/Cookbook.pod +++ b/lib/DBIx/Class/Manual/Cookbook.pod @@ -763,6 +763,23 @@ This will cause the following SQL statement to be run: Which will of course only work if your database supports this function. See L for more documentation. +=head2 Creating a result set from a set of rows + +Sometimes you have a (set of) row objects that you want to put into a +resultset without the need to hit the DB again. You can do that by using the +L method: + + my @uploadable_groups; + while (my $group = $groups->next) { + if ($group->can_upload($self)) { + push @uploadable_groups, $group; + } + } + my $new_rs = $self->result_source->resultset; + $new_rs->set_cache(\@uploadable_groups); + return $new_rs; + + =head1 USING RELATIONSHIPS =head2 Create a new row in a related table diff --git a/lib/DBIx/Class/Manual/FAQ.pod b/lib/DBIx/Class/Manual/FAQ.pod index a50865c..8fcc313 100644 --- a/lib/DBIx/Class/Manual/FAQ.pod +++ b/lib/DBIx/Class/Manual/FAQ.pod @@ -357,6 +357,19 @@ scalar reference: ->update({ somecolumn => \'othercolumn' }) +But note that when using a scalar reference the column in the database +will be updated but when you read the value from the object with e.g. + + ->somecolumn() + +you still get back the scalar reference to the string, B the new +value in the database. To get that you must refresh the row from storage +using C. Or chain your function calls like this: + + ->update->discard_changes + + to update the database and refresh the object in one step. + =item .. store JSON/YAML in a column and have it deflate/inflate automatically? You can use L to accomplish YAML/JSON storage transparently. diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index f56254e..e113fdb 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -2654,6 +2654,17 @@ with a father in the person table, we could explicitly use C: # SELECT child.* FROM person child # INNER JOIN person father ON child.father_id = father.id +=head2 for + +=over 4 + +=item Value: ( 'update' | 'shared' ) + +=back + +Set to 'update' for a SELECT ... FOR UPDATE or 'shared' for a SELECT +... FOR SHARED. + =cut 1; diff --git a/lib/DBIx/Class/ResultSetManager.pm b/lib/DBIx/Class/ResultSetManager.pm index 78461c9..721c84c 100644 --- a/lib/DBIx/Class/ResultSetManager.pm +++ b/lib/DBIx/Class/ResultSetManager.pm @@ -4,38 +4,25 @@ use warnings; use base 'DBIx::Class'; use Class::Inspector; -=head1 NAME - -DBIx::Class::ResultSetManager - helpful methods for managing resultset -classes (EXPERIMENTAL) - -=head1 SYNOPSIS +warn "DBIx::Class::ResultSetManager never left experimental status and +has now been DEPRECATED. This module will be deleted in 09000 so please +migrate any and all code using it to explicit resultset classes using either +__PACKAGE__->resultset_class(...) calls or by switching from using +DBIx::Class::Schema->load_classes() to load_namespaces() and creating +appropriate My::Schema::ResultSet::* classes for it to pick up."; - # in a table class - __PACKAGE__->load_components(qw/ResultSetManager Core/); # note order! - - # will be removed from the table class and inserted into a - # table-specific resultset class - sub search_by_year_desc : ResultSet { - my $self = shift; - my $cond = shift; - my $attrs = shift || {}; - $attrs->{order_by} = 'year DESC'; - $self->search($cond, $attrs); - } +=head1 NAME - $rs = $schema->resultset('CD')->search_by_year_desc({ artist => 'Tool' }); +DBIx::Class::ResultSetManager - scheduled for deletion in 09000 =head1 DESCRIPTION -This package implements two useful features for customizing resultset -classes. C loads components in addition to -C (or whatever you set as -C). Any methods tagged with the C -attribute will be moved into a table-specific resultset class (by -default called C, but configurable via -C). Most of the magic is done when you -call C<< __PACKAGE__->table >>. +DBIx::Class::ResultSetManager never left experimental status and +has now been DEPRECATED. This module will be deleted in 09000 so please +migrate any and all code using it to explicit resultset classes using either +__PACKAGE__->resultset_class(...) calls or by switching from using +DBIx::Class::Schema->load_classes() to load_namespaces() and creating +appropriate My::Schema::ResultSet::* classes for it to pick up."; =cut @@ -44,17 +31,6 @@ __PACKAGE__->mk_classdata($_) __PACKAGE__->base_resultset_class('DBIx::Class::ResultSet'); __PACKAGE__->table_resultset_class_suffix('::_resultset'); -=head2 table - -Stacks on top of the normal L C method. Any -methods tagged with the C attribute will be moved into a -table-specific resultset class (by default called -C, but configurable via -C). The magic for this is done within -this C<< __PACKAGE__->table >> call. - -=cut - sub table { my ($self,@rest) = @_; my $ret = $self->next::method(@rest); @@ -65,14 +41,6 @@ sub table { return $ret; } -=head2 load_resultset_components - -C loads components in addition to -C (or whatever you set as -C). - -=cut - sub load_resultset_components { my ($self,@comp) = @_; my $resultset_class = $self->_setup_resultset_class; @@ -119,13 +87,3 @@ sub _register_resultset_class { } 1; - -=head1 AUTHORS - -David Kamholz - -=head1 LICENSE - -You may distribute this code under the same terms as Perl itself. - -=cut diff --git a/t/40resultsetmanager.t b/t/40resultsetmanager.t index 8389291..26707f0 100644 --- a/t/40resultsetmanager.t +++ b/t/40resultsetmanager.t @@ -15,6 +15,11 @@ BEGIN { } } +BEGIN { + local $SIG{__WARN__} = sub {}; + require DBIx::Class::ResultSetManager; +} + use DBICTest::ResultSetManager; # uses Class::Inspector my $schema = DBICTest::ResultSetManager->compose_namespace('DB');