X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated.pm;h=c21fe8a44f4784d367a25f91e9311a57f1fa8583;hb=734868da8acee7ff14dff8b91ab18f0edc3c10df;hp=7e84f7ce0d4b918d65cfaa9f7a37b5a67d7450eb;hpb=48580715af3072905f2c71dc27e7f70f21a11338;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated.pm b/lib/DBIx/Class/Storage/DBI/Replicated.pm index 7e84f7c..c21fe8a 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated.pm @@ -14,7 +14,7 @@ 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 Hash::Merge 'merge'; +use Hash::Merge; use List::Util qw/min max/; use namespace::clean -except => 'meta'; @@ -306,6 +306,7 @@ has 'write_handler' => ( backup is_datatype_numeric + can_insert_returning _count_select _subq_count_select _subq_update_delete @@ -365,6 +366,7 @@ has 'write_handler' => ( _do_query _dbh_sth _dbh_execute + _prefetch_insert_auto_nextvals /], ); @@ -384,10 +386,12 @@ around connect_info => sub { my $wantarray = wantarray; + my $merge = Hash::Merge->new('LEFT_PRECEDENT'); + my %opts; for my $arg (@$info) { next unless (reftype($arg)||'') eq 'HASH'; - %opts = %{ merge($arg, \%opts) }; + %opts = %{ $merge->merge($arg, \%opts) }; } delete $opts{dsn}; @@ -396,7 +400,7 @@ around connect_info => sub { if $opts{pool_type}; $self->pool_args( - merge((delete $opts{pool_args} || {}), $self->pool_args) + $merge->merge((delete $opts{pool_args} || {}), $self->pool_args) ); $self->pool($self->_build_pool) @@ -408,7 +412,7 @@ around connect_info => sub { if $opts{balancer_type}; $self->balancer_args( - merge((delete $opts{balancer_args} || {}), $self->balancer_args) + $merge->merge((delete $opts{balancer_args} || {}), $self->balancer_args) ); $self->balancer($self->_build_balancer) @@ -553,7 +557,8 @@ around connect_replicants => sub { $self->throw_exception('too many hashrefs in connect_info') if @hashes > 2; - my %opts = %{ merge(reverse @hashes) }; + my $merge = Hash::Merge->new('LEFT_PRECEDENT'); + my %opts = %{ $merge->merge(reverse @hashes) }; # delete them splice @$r, $i+1, ($#{$r} - $i), (); @@ -566,7 +571,7 @@ around connect_replicants => sub { delete $master_opts{dbh_maker}; # merge with master - %opts = %{ merge(\%opts, \%master_opts) }; + %opts = %{ $merge->merge(\%opts, \%master_opts) }; # update $r->[$i] = \%opts;