Merge 'trunk' into 'replication_dedux'
John Napiorkowski [Wed, 28 May 2008 17:29:00 +0000 (17:29 +0000)]
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

Changes
lib/DBIx/Class.pm
lib/DBIx/Class/Manual/Cookbook.pod
lib/DBIx/Class/Manual/FAQ.pod
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSetManager.pm
t/40resultsetmanager.t

diff --git a/Changes b/Changes
index d15c510..67882d6 100644 (file)
--- 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
index 9147f46..98dc34a 100644 (file)
@@ -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) = @_;
index 8fdd2d6..ef36172 100644 (file)
@@ -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<DBIx::Class::ResultSetColumn> 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<set_cache|DBIx::Class::Resultset/set_cache> 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
index a50865c..8fcc313 100644 (file)
@@ -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<not> the new
+value in the database. To get that you must refresh the row from storage
+using C<discard_changes()>. 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<DBIx::Class::InflateColumn> to accomplish YAML/JSON storage transparently.
index f56254e..e113fdb 100644 (file)
@@ -2654,6 +2654,17 @@ with a father in the person table, we could explicitly use C<INNER JOIN>:
     # 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;
index 78461c9..721c84c 100644 (file)
@@ -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<load_resultset_components> loads components in addition to
-C<DBIx::Class::ResultSet> (or whatever you set as
-C<base_resultset_class>). Any methods tagged with the C<ResultSet>
-attribute will be moved into a table-specific resultset class (by
-default called C<Class::_resultset>, but configurable via
-C<table_resultset_class_suffix>).  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<DBIx::Class> C<table> method.  Any
-methods tagged with the C<ResultSet> attribute will be moved into a
-table-specific resultset class (by default called
-C<Class::_resultset>, but configurable via
-C<table_resultset_class_suffix>).  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<load_resultset_components> loads components in addition to
-C<DBIx::Class::ResultSet> (or whatever you set as
-C<base_resultset_class>).
-
-=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 <dkamholz@cpan.org>
-
-=head1 LICENSE
-
-You may distribute this code under the same terms as Perl itself.
-
-=cut
index 8389291..26707f0 100644 (file)
@@ -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');