[Bast-commits] r6183 - in DBIx-Class/0.08/branches/storage-tweaks: lib/DBIx/Class/Storage lib/DBIx/Class/Storage/DBI lib/DBIx/Class/Storage/DBI/Replicated t t/lib

caelum at dev.catalyst.perl.org caelum at dev.catalyst.perl.org
Fri May 8 16:08:29 GMT 2009


Author: caelum
Date: 2009-05-08 16:08:29 +0000 (Fri, 08 May 2009)
New Revision: 6183

Modified:
   DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated.pm
   DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated/Types.pm
   DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/Statistics.pm
   DBIx-Class/0.08/branches/storage-tweaks/t/93storage_replication.t
   DBIx-Class/0.08/branches/storage-tweaks/t/lib/DBICTest.pm
Log:
support ::DBI::Replicated opts in connect_info

Modified: DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated/Types.pm
===================================================================
--- DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated/Types.pm	2009-05-08 15:24:54 UTC (rev 6182)
+++ DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated/Types.pm	2009-05-08 16:08:29 UTC (rev 6183)
@@ -1,5 +1,13 @@
-package DBIx::Class::Storage::DBI::Replicated::Types;
+package # hide from PAUSE
+  DBIx::Class::Storage::DBI::Replicated::Types;
 
+=head1 NAME
+
+DBIx::Class::Storage::DBI::Replicated::Types - Types used internally by
+L<DBIx::Class::Storage::DBI::Replicated>
+
+=cut
+
 use MooseX::Types
   -declare => [qw/BalancerClassNamePart/];
 use MooseX::Types::Moose qw/ClassName Str/;
@@ -21,4 +29,14 @@
     $type;  	
   };
 
+=head1 AUTHOR
+
+  John Napiorkowski <john.napiorkowski at takkle.com>
+
+=head1 LICENSE
+
+You may distribute this code under the same terms as Perl itself.
+
+=cut
+
 1;

Modified: DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated.pm
===================================================================
--- DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated.pm	2009-05-08 15:24:54 UTC (rev 6182)
+++ DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/DBI/Replicated.pm	2009-05-08 16:08:29 UTC (rev 6183)
@@ -139,9 +139,8 @@
 =cut
 
 has 'pool_type' => (
-  is=>'ro',
+  is=>'rw',
   isa=>ClassName,
-  required=>1,
   default=>'DBIx::Class::Storage::DBI::Replicated::Pool',
   handles=>{
     'create_pool' => 'new',
@@ -156,10 +155,9 @@
 =cut
 
 has 'pool_args' => (
-  is=>'ro',
+  is=>'rw',
   isa=>HashRef,
   lazy=>1,
-  required=>1,
   default=>sub { {} },
 );
 
@@ -172,7 +170,7 @@
 =cut
 
 has 'balancer_type' => (
-  is=>'ro',
+  is=>'rw',
   isa=>BalancerClassNamePart,
   coerce=>1,
   required=>1,
@@ -190,7 +188,7 @@
 =cut
 
 has 'balancer_args' => (
-  is=>'ro',
+  is=>'rw',
   isa=>HashRef,
   lazy=>1,
   required=>1,
@@ -223,7 +221,7 @@
 =cut
 
 has 'balancer' => (
-  is=>'ro',
+  is=>'rw',
   isa=>'DBIx::Class::Storage::DBI::Replicated::Balancer',
   lazy_build=>1,
   handles=>[qw/auto_validate_every/],
@@ -316,6 +314,8 @@
 =head2 around: connect_info
 
 Preserve master's C<connect_info> options (for merging with replicants.)
+Also set any Replicated related options from connect_info, such as
+C<pool_type>, C<pool_args>, C<balancer_type> and C<balancer_args>.
 
 =cut
 
@@ -327,9 +327,32 @@
     next unless (reftype($arg)||'') eq 'HASH';
     %opts = (%opts, %$arg);
   }
-
   delete $opts{dsn};
 
+  if (@opts{qw/pool_type pool_args/}) {
+    $self->pool_type(delete $opts{pool_type})
+      if $opts{pool_type};
+
+    $self->pool_args({
+      %{ $self->pool_args },
+      %{ delete $opts{pool_args} || {} }
+    });
+
+    $self->pool($self->_build_pool);
+  }
+
+  if (@opts{qw/balancer_type balancer_args/}) {
+    $self->balancer_type(delete $opts{balancer_type})
+      if $opts{balancer_type};
+
+    $self->balancer_args({
+      %{ $self->balancer_args },
+      %{ delete $opts{balancer_args} || {} }
+    });
+
+    $self->balancer($self->_build_balancer);
+  }
+
   $self->_master_connect_info_opts(\%opts);
 
   $self->$next($info, @extra);

Modified: DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/Statistics.pm
===================================================================
--- DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/Statistics.pm	2009-05-08 15:24:54 UTC (rev 6182)
+++ DBIx-Class/0.08/branches/storage-tweaks/lib/DBIx/Class/Storage/Statistics.pm	2009-05-08 16:08:29 UTC (rev 6183)
@@ -77,6 +77,10 @@
   $self->debugfh->print($msg);
 }
 
+=head2 silence
+
+Turn off all output if set to true.
+
 =head2 txn_begin
 
 Called when a transaction begins.

Modified: DBIx-Class/0.08/branches/storage-tweaks/t/93storage_replication.t
===================================================================
--- DBIx-Class/0.08/branches/storage-tweaks/t/93storage_replication.t	2009-05-08 15:24:54 UTC (rev 6182)
+++ DBIx-Class/0.08/branches/storage-tweaks/t/93storage_replication.t	2009-05-08 16:08:29 UTC (rev 6183)
@@ -11,7 +11,7 @@
     eval "use DBIx::Class::Storage::DBI::Replicated; use Test::Moose";
     plan $@
         ? ( skip_all => "Deps not installed: $@" )
-        : ( tests => 83 );
+        : ( tests => 88 );
 }
 
 use_ok 'DBIx::Class::Storage::DBI::Replicated::Pool';
@@ -51,10 +51,10 @@
     ## Initialize the object
     
 	sub new {
-	    my $class = shift @_;
+	    my ($class, $schema_method) = (shift, shift);
 	    my $self = $class->SUPER::new(@_);
 	
-	    $self->schema( $self->init_schema );
+	    $self->schema( $self->init_schema($schema_method) );
 	    return $self;
 	}
     
@@ -64,26 +64,45 @@
         # current SQLT SQLite producer does not handle DROP TABLE IF EXISTS, trap warnings here
         local $SIG{__WARN__} = sub { warn @_ unless $_[0] =~ /no such table.+DROP TABLE/ };
 
-        my $class = shift @_;
+        my ($class, $schema_method) = @_;
 
-        my $schema = DBICTest->init_schema(
-            sqlite_use_file => 1,
-            storage_type=>{
-            	'::DBI::Replicated' => {
-            		balancer_type=>'::Random',
-                    balancer_args=>{
-                    	auto_validate_every=>100,
-                    },
-            	}
-            },
-            deploy_args=>{
-                   add_drop_table => 1,
-            },
-        );
+        my $method = "get_schema_$schema_method";
+        my $schema = $class->$method;
 
         return $schema;
     }
-    
+
+    sub get_schema_by_storage_type {
+      DBICTest->init_schema(
+        sqlite_use_file => 1,
+        storage_type=>{
+          '::DBI::Replicated' => {
+            balancer_type=>'::Random',
+            balancer_args=>{
+              auto_validate_every=>100,
+            },
+          }
+        },
+        deploy_args=>{
+          add_drop_table => 1,
+        },
+      );
+    }
+
+    sub get_schema_by_connect_info {
+      DBICTest->init_schema(
+        sqlite_use_file => 1,
+        storage_type=> '::DBI::Replicated',
+        balancer_type=>'::Random',
+        balancer_args=> {
+          auto_validate_every=>100,
+        },
+        deploy_args=>{
+          add_drop_table => 1,
+        },
+      );
+    }
+
     sub generate_replicant_connect_info {}
     sub replicate {}
     sub cleanup {}
@@ -218,15 +237,23 @@
     'DBIx::Class::DBI::Replicated::TestReplication::Custom' :
     'DBIx::Class::DBI::Replicated::TestReplication::SQLite';
 
-ok my $replicated = $replicated_class->new
-    => 'Created a replication object';
-    
-isa_ok $replicated->schema
-    => 'DBIx::Class::Schema';
-    
-isa_ok $replicated->schema->storage
-    => 'DBIx::Class::Storage::DBI::Replicated';
+my $replicated;
 
+for my $method (qw/by_connect_info by_storage_type/) {
+  ok $replicated = $replicated_class->new($method)
+      => "Created a replication object $method";
+      
+  isa_ok $replicated->schema
+      => 'DBIx::Class::Schema';
+      
+  isa_ok $replicated->schema->storage
+      => 'DBIx::Class::Storage::DBI::Replicated';
+
+  isa_ok $replicated->schema->storage->balancer
+      => 'DBIx::Class::Storage::DBI::Replicated::Balancer::Random'
+      => 'configured balancer_type';
+}
+
 ok $replicated->schema->storage->meta
     => 'has a meta object';
     
@@ -248,18 +275,20 @@
 ok my @all_storages = $replicated->schema->storage->all_storages
     => '->all_storages';
 
-is scalar @all_storages
-    ,3
+is scalar @all_storages,
+    3
     => 'correct number of ->all_storages';
 
-is ((grep $_->isa('DBIx::Class::Storage::DBI'), @all_storages)
-    ,3
+is ((grep $_->isa('DBIx::Class::Storage::DBI'), @all_storages),
+    3
     => '->all_storages are correct type');
 
-is ((grep $_->{master_option},
-      grep { (reftype($_)||'') eq 'HASH' }
-        map @{ $_->_connect_info }, @all_storages)
-    ,3
+my @all_storage_opts =
+  grep { (reftype($_)||'') eq 'HASH' }
+    map @{ $_->_connect_info }, @all_storages;
+
+is ((grep $_->{master_option}, @all_storage_opts),
+    3
     => 'connect_info was merged from master to replicants');
  
 my @replicant_names = keys %{ $replicated->schema->storage->replicants };

Modified: DBIx-Class/0.08/branches/storage-tweaks/t/lib/DBICTest.pm
===================================================================
--- DBIx-Class/0.08/branches/storage-tweaks/t/lib/DBICTest.pm	2009-05-08 15:24:54 UTC (rev 6182)
+++ DBIx-Class/0.08/branches/storage-tweaks/t/lib/DBICTest.pm	2009-05-08 16:08:29 UTC (rev 6183)
@@ -74,7 +74,7 @@
     my $dbuser = $ENV{"DBICTEST_DBUSER"} || '';
     my $dbpass = $ENV{"DBICTEST_DBPASS"} || '';
 
-    my @connect_info = ($dsn, $dbuser, $dbpass, { AutoCommit => 1 });
+    my @connect_info = ($dsn, $dbuser, $dbpass, { AutoCommit => 1, %args });
 
     return @connect_info;
 }




More information about the Bast-commits mailing list