[Bast-commits] r3937 - in DBIx-Class-Partitioned/1.000/trunk: lib/DBIx/Class lib/DBIx/Class/ResultSet t t/lib/My/Schema

edenc at dev.catalyst.perl.org edenc at dev.catalyst.perl.org
Tue Jan 15 16:06:02 GMT 2008


Author: edenc
Date: 2008-01-15 16:06:01 +0000 (Tue, 15 Jan 2008)
New Revision: 3937

Added:
   DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/ResultSet/
   DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/ResultSet/Partitioned.pm
Modified:
   DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/Partitioned.pm
   DBIx-Class-Partitioned/1.000/trunk/t/01-basic.t
   DBIx-Class-Partitioned/1.000/trunk/t/lib/My/Schema/User.pm
Log:
added custom resultset to alow per-partition searches

Modified: DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/Partitioned.pm
===================================================================
--- DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/Partitioned.pm	2008-01-15 14:48:39 UTC (rev 3936)
+++ DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/Partitioned.pm	2008-01-15 16:06:01 UTC (rev 3937)
@@ -59,6 +59,9 @@
         }
         $class->_partitions->{$partition} = $new_source;
     }
+    $class->ensure_class_loaded('DBIx::Class::ResultSet::Partitioned');
+    $class->resultset_class('DBIx::Class::ResultSet::Partitioned')
+      unless $class->can('DBIx::Class::ResultSet::Partitioned');
 }
 
 sub partition {
@@ -146,7 +149,9 @@
         $self->_current_partition($new_part);
     }
     elsif ( $old_part && !$new_part ) {
-        my $row = $self->partition($old_part)->resultset->find( { $self->get_columns } );
+        my $row =
+          $self->partition($old_part)
+          ->resultset->find( { $self->get_columns } );
         $row->is_partition_row(1);
         $row->delete;
         $self->_current_partition('');
@@ -157,7 +162,7 @@
 sub delete {
     my $self = shift;
     $self->next::method(@_);
-    if ( my $part = $self->_current_partition && !$self->is_partition_row) {
+    if ( my $part = $self->_current_partition && !$self->is_partition_row ) {
         $self->partition($part)->resultset->find( { $self->get_columns } )
           ->delete;
         $self->_current_partition('');

Added: DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/ResultSet/Partitioned.pm
===================================================================
--- DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/ResultSet/Partitioned.pm	                        (rev 0)
+++ DBIx-Class-Partitioned/1.000/trunk/lib/DBIx/Class/ResultSet/Partitioned.pm	2008-01-15 16:06:01 UTC (rev 3937)
@@ -0,0 +1,33 @@
+package DBIx::Class::ResultSet::Partitioned;
+
+use warnings;
+use strict;
+
+use base qw/DBIx::Class::ResultSet/;
+
+__PACKAGE__->mk_group_accessors( 'simple' => qw/partition/ );
+
+sub search_rs {
+    my $self = shift;
+    my $new  = $self->next::method(@_);
+    $new->partition( $self->partition );
+    return $new;
+}
+
+sub _resolved_attrs {
+    my $self = shift;
+    if ( $self->partition ) {
+        my $source = $self->result_source;
+
+        $self->result_source(
+            # ugh...
+            $self->new_result( {} )->partition( $self->partition )
+        );
+        my $orig = $self->next::method(@_);
+        $self->result_source($source);
+        return $orig;
+    }
+    return $self->next::method(@_);
+}
+
+1;

Modified: DBIx-Class-Partitioned/1.000/trunk/t/01-basic.t
===================================================================
--- DBIx-Class-Partitioned/1.000/trunk/t/01-basic.t	2008-01-15 14:48:39 UTC (rev 3936)
+++ DBIx-Class-Partitioned/1.000/trunk/t/01-basic.t	2008-01-15 16:06:01 UTC (rev 3937)
@@ -7,7 +7,7 @@
 my $schema = My::Schema->connect('dbi:SQLite:dbname=t/test.db');
 my $test   = sub {
     my $user_rs = $schema->resultset('User');
-    $user_rs->partition( 'active_user' );
+    $user_rs->partition('active_user');
     my $data = { foo => 'bar', is_expired => 0 };
     isa_ok( my $user = $user_rs->create($data), 'My::Schema::User' );
     $user->add_to_affiliations( { name => 'foo' } );
@@ -44,6 +44,9 @@
     $user->update;
     ok( !$schema->resultset('ActiveUser')->search( { $user->get_columns } )
           ->count );
+    ok( !$user_rs->search( { $user->get_columns } )->count );
+    $user_rs->partition('');
+    ok( $user_rs->search( { $user->get_columns } )->count );
     die 'rollback';
 };
 eval { $schema->txn_do($test) };

Modified: DBIx-Class-Partitioned/1.000/trunk/t/lib/My/Schema/User.pm
===================================================================
--- DBIx-Class-Partitioned/1.000/trunk/t/lib/My/Schema/User.pm	2008-01-15 14:48:39 UTC (rev 3936)
+++ DBIx-Class-Partitioned/1.000/trunk/t/lib/My/Schema/User.pm	2008-01-15 16:06:01 UTC (rev 3937)
@@ -26,35 +26,4 @@
     return;
 }
 
-__PACKAGE__->resultset_class('My::ResultSet::User');
-
-package My::ResultSet::User;
-
-use warnings;
-use strict;
-
-use base qw/DBIx::Class::ResultSet/;
-
-__PACKAGE__->mk_group_accessors( 'simple' => qw/partition/ );
-
-sub search_rs {
-    my $self = shift;
-    my $new  = $self->next::method(@_);
-    $new->partition( $self->partition );
-    return $new;
-}
-
-sub cursor {
-    my $self = shift;
-    if ( $self->partition ) {
-        my $source = $self->result_source;
-        $self->result_source(
-            $self->result_class->partition( $self->partition ) );
-        my $cursor = $self->next::method(@_);
-        $self->result_source($source);
-        return $cursor;
-    }
-    return $self->next::method(@_);
-}
-
 1;




More information about the Bast-commits mailing list