X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated.pm;h=465eec05f205c0a7088e7c67cb80e0b0c70e9ca0;hb=67c438630af58cb7032da2206200a6247eabdff3;hp=549bc76c397cedc84a5b1e5e29a1cfc38e1fece2;hpb=b2e4d52289df8386abc4b79ee68c31f9798a1181;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated.pm b/lib/DBIx/Class/Storage/DBI/Replicated.pm index 549bc76..465eec0 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated.pm @@ -139,9 +139,8 @@ to: L. =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 @@ See L for available arguments. =cut has 'pool_args' => ( - is=>'ro', + is=>'rw', isa=>HashRef, lazy=>1, - required=>1, default=>sub { {} }, ); @@ -172,7 +170,7 @@ choose how to spread the query load across each replicant in the pool. =cut has 'balancer_type' => ( - is=>'ro', + is=>'rw', isa=>BalancerClassNamePart, coerce=>1, required=>1, @@ -190,7 +188,7 @@ See L for available arguments. =cut has 'balancer_args' => ( - is=>'ro', + is=>'rw', isa=>HashRef, lazy=>1, required=>1, @@ -223,7 +221,7 @@ is a class that takes a pool () =cut has 'balancer' => ( - is=>'ro', + is=>'rw', isa=>'DBIx::Class::Storage::DBI::Replicated::Balancer', lazy_build=>1, handles=>[qw/auto_validate_every/], @@ -277,7 +275,6 @@ has 'write_handler' => ( is=>'ro', isa=>Object, lazy_build=>1, - lazy_build=>1, handles=>[qw/ on_connect_do on_disconnect_do @@ -316,6 +313,8 @@ has _master_connect_info_opts => =head2 around: connect_info Preserve master's C options (for merging with replicants.) +Also set any Replicated related options from connect_info, such as +C, C, C and C. =cut @@ -327,9 +326,34 @@ around connect_info => sub { 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 $self->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) + if $self->balancer; + } + $self->_master_connect_info_opts(\%opts); $self->$next($info, @extra); @@ -365,7 +389,9 @@ Lazy builder for the L attribute. sub _build_master { my $self = shift @_; - DBIx::Class::Storage::DBI->new($self->schema); + my $master = DBIx::Class::Storage::DBI->new($self->schema); + DBIx::Class::Storage::DBI::Replicated::WithDSN->meta->apply($master); + $master } =head2 _build_pool