X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated.pm;h=d8a5f6dc8c812eb2da873cc548755ddc4a31a183;hb=4225194590a09e29451ba825c34483f98c1a0c03;hp=ac9a877fe8b5193d1c9ea530ba1569806c50d7a6;hpb=450a317d569e263be281779986afdae63ea49a22;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated.pm b/lib/DBIx/Class/Storage/DBI/Replicated.pm index ac9a877..d8a5f6d 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated.pm @@ -7,8 +7,7 @@ BEGIN { ## use, so we explicitly test for these. my %replication_required = ( - 'Moose' => '0.87', - 'MooseX::AttributeHelpers' => '0.21', + 'Moose' => '0.90', 'MooseX::Types' => '0.16', 'namespace::clean' => '0.11', 'Hash::Merge' => '0.11' @@ -17,9 +16,9 @@ BEGIN { my @didnt_load; for my $module (keys %replication_required) { - eval "use $module $replication_required{$module}"; - push @didnt_load, "$module $replication_required{$module}" - if $@; + eval "use $module $replication_required{$module}"; + push @didnt_load, "$module $replication_required{$module}" + if $@; } croak("@{[ join ', ', @didnt_load ]} are missing and are required for Replication") @@ -33,7 +32,6 @@ use DBIx::Class::Storage::DBI::Replicated::Balancer; use DBIx::Class::Storage::DBI::Replicated::Types qw/BalancerClassNamePart DBICSchema DBICStorageDBI/; use MooseX::Types::Moose qw/ClassName HashRef Object/; use Scalar::Util 'reftype'; -use Carp::Clan qw/^DBIx::Class/; use Hash::Merge 'merge'; use namespace::clean -except => 'meta'; @@ -120,8 +118,7 @@ to force a query to run against Master when needed. Replicated Storage has additional requirements not currently part of L - Moose => '0.87', - MooseX::AttributeHelpers => '0.20', + Moose => '0.90', MooseX::Types => '0.16', namespace::clean => '0.11', Hash::Merge => '0.11' @@ -222,7 +219,7 @@ has 'pool' => ( isa=>'DBIx::Class::Storage::DBI::Replicated::Pool', lazy_build=>1, handles=>[qw/ - connect_replicants + connect_replicants replicants has_replicants /], @@ -277,7 +274,7 @@ has 'read_handler' => ( select select_single columns_info_for - /], + /], ); =head2 write_handler @@ -290,9 +287,9 @@ has 'write_handler' => ( is=>'ro', isa=>Object, lazy_build=>1, - handles=>[qw/ + handles=>[qw/ on_connect_do - on_disconnect_do + on_disconnect_do connect_info throw_exception sql_maker @@ -300,8 +297,8 @@ has 'write_handler' => ( create_ddl_dir deployment_statements datetime_parser - datetime_parser_type - build_datetime_parser + datetime_parser_type + build_datetime_parser last_insert_id insert insert_bulk @@ -316,19 +313,19 @@ has 'write_handler' => ( sth deploy with_deferred_fk_checks - dbh_do + dbh_do reload_row - with_deferred_fk_checks + with_deferred_fk_checks _prep_for_execute - backup - is_datatype_numeric - _count_select - _subq_count_select - _subq_update_delete - svp_rollback - svp_begin - svp_release + backup + is_datatype_numeric + _count_select + _subq_count_select + _subq_update_delete + svp_rollback + svp_begin + svp_release /], ); @@ -364,7 +361,7 @@ around connect_info => sub { ); $self->pool($self->_build_pool) - if $self->pool; + if $self->pool; } if (@opts{qw/balancer_type balancer_args/}) { @@ -376,7 +373,7 @@ around connect_info => sub { ); $self->balancer($self->_build_balancer) - if $self->balancer; + if $self->balancer; } $self->_master_connect_info_opts(\%opts); @@ -413,9 +410,9 @@ sub BUILDARGS { my ($class, $schema, $storage_type_args, @args) = @_; return { - schema=>$schema, - %$storage_type_args, - @args + schema=>$schema, + %$storage_type_args, + @args } } @@ -452,7 +449,7 @@ the balancer knows which pool it's balancing. sub _build_balancer { my $self = shift @_; $self->create_balancer( - pool=>$self->pool, + pool=>$self->pool, master=>$self->master, %{$self->balancer_args}, ); @@ -494,23 +491,23 @@ around connect_replicants => sub { for my $r (@args) { $r = [ $r ] unless reftype $r eq 'ARRAY'; - croak "coderef replicant connect_info not supported" + $self->throw_exception('coderef replicant connect_info not supported') if ref $r->[0] && reftype $r->[0] eq 'CODE'; # any connect_info options? my $i = 0; $i++ while $i < @$r && (reftype($r->[$i])||'') ne 'HASH'; -# make one if none +# make one if none $r->[$i] = {} unless $r->[$i]; # merge if two hashes my @hashes = @$r[$i .. $#{$r}]; - croak "invalid connect_info options" + $self->throw_exception('invalid connect_info options') if (grep { reftype($_) eq 'HASH' } @hashes) != @hashes; - croak "too many hashrefs in connect_info" + $self->throw_exception('too many hashrefs in connect_info') if @hashes > 2; my %opts = %{ merge(reverse @hashes) }; @@ -518,8 +515,15 @@ around connect_replicants => sub { # delete them splice @$r, $i+1, ($#{$r} - $i), (); +# make sure master/replicants opts don't clash + my %master_opts = %{ $self->_master_connect_info_opts }; + if (exists $opts{dbh_maker}) { + delete @master_opts{qw/dsn user password/}; + } + delete $master_opts{dbh_maker}; + # merge with master - %opts = %{ merge(\%opts, $self->_master_connect_info_opts) }; + %opts = %{ merge(\%opts, \%master_opts) }; # update $r->[$i] = \%opts; @@ -593,11 +597,11 @@ sub execute_reliably { ($result[0]) = ($coderef->(@args)); } else { $coderef->(@args); - } + } }; ##Reset to the original state - $self->read_handler($current); + $self->read_handler($current); ##Exception testing has to come last, otherwise you might leave the ##read_handler set to master. @@ -731,7 +735,7 @@ sub debug { if(@_) { foreach my $source ($self->all_storages) { $source->debug(@_); - } + } } return $self->master->debug; } @@ -747,7 +751,7 @@ sub debugobj { if(@_) { foreach my $source ($self->all_storages) { $source->debugobj(@_); - } + } } return $self->master->debugobj; } @@ -763,7 +767,7 @@ sub debugfh { if(@_) { foreach my $source ($self->all_storages) { $source->debugfh(@_); - } + } } return $self->master->debugfh; } @@ -779,7 +783,7 @@ sub debugcb { if(@_) { foreach my $source ($self->all_storages) { $source->debugcb(@_); - } + } } return $self->master->debugcb; }