X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated.pm;h=c7b1f294578b2f9e86c0d8a9c5fa8e7ce1f8f9c0;hb=0180bef9e132569a564a1171c6dfb318a2f6de27;hp=888e6241a4debdc2edfdb9f4e4023ead21eb58db;hpb=79a77af646d55bab4840d883527d4f73c9426427;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated.pm b/lib/DBIx/Class/Storage/DBI/Replicated.pm index 888e624..c7b1f29 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated.pm @@ -1,15 +1,37 @@ package DBIx::Class::Storage::DBI::Replicated; -use Moose; -use Class::MOP; -use Moose::Util::TypeConstraints; +BEGIN { + use Carp::Clan qw/^DBIx::Class/; + + ## Modules required for Replication support not required for general DBIC + ## use, so we explicitly test for these. + + my %replication_required = ( + Moose => '0.54', + MooseX::AttributeHelpers => '0.12', + Moose::Util::TypeConstraints => '0.54', + Class::MOP => '0.63', + ); + + my @didnt_load; + + for my $module (keys %replication_required) { + 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") + if @didnt_load; +} + use DBIx::Class::Storage::DBI; use DBIx::Class::Storage::DBI::Replicated::Pool; use DBIx::Class::Storage::DBI::Replicated::Balancer; =head1 NAME -DBIx::Class::Storage::DBI::Replicated - ALPHA Replicated database support +DBIx::Class::Storage::DBI::Replicated - BETA Replicated database support =head1 SYNOPSIS @@ -47,7 +69,7 @@ tasks. =head1 DESCRIPTION Warning: This class is marked BETA. This has been running a production -website using MySQL native replication as it's backend and we have some decent +website using MySQL native replication as its backend and we have some decent test coverage but the code hasn't yet been stressed by a variety of databases. Individual DB's may have quirks we are not aware of. Please use this in first development and pass along your experiences/bug fixes. @@ -71,7 +93,19 @@ selected algorithm. The default algorithm is random weighted. The consistancy betweeen master and replicants is database specific. The Pool gives you a method to validate it's replicants, removing and replacing them when they fail/pass predefined criteria. Please make careful use of the ways -to force a query to run against Master when needed. +to force a query to run against Master when needed. + +=head1 REQUIREMENTS + +Replicated Storage has additional requirements not currently part of L + + Moose => 1.54 + MooseX::AttributeHelpers => 0.12 + Moose::Util::TypeConstraints => 0.54 + Class::MOP => 0.63 + +You will need to install these modules manually via CPAN or make them part of the +Makefile for your distribution. =head1 ATTRIBUTES @@ -275,6 +309,7 @@ has 'write_handler' => ( txn_scope_guard sth deploy + with_deferred_fk_checks reload_row _prep_for_execute @@ -415,8 +450,6 @@ inserted something and need to get a resultset including it, etc. =cut -use Benchmark; - sub execute_reliably { my ($self, $coderef, @args) = @_; @@ -540,6 +573,7 @@ sub limit_dialect { foreach my $source ($self->all_storages) { $source->limit_dialect(@_); } + return $self->master->quote_char; } =head2 quote_char @@ -553,6 +587,7 @@ sub quote_char { foreach my $source ($self->all_storages) { $source->quote_char(@_); } + return $self->master->quote_char; } =head2 name_sep @@ -566,6 +601,7 @@ sub name_sep { foreach my $source ($self->all_storages) { $source->name_sep(@_); } + return $self->master->name_sep; } =head2 set_schema @@ -589,9 +625,12 @@ set a debug flag across all storages sub debug { my $self = shift @_; - foreach my $source ($self->all_storages) { - $source->debug(@_); + if(@_) { + foreach my $source ($self->all_storages) { + $source->debug(@_); + } } + return $self->master->debug; } =head2 debugobj @@ -602,9 +641,12 @@ set a debug object across all storages sub debugobj { my $self = shift @_; - foreach my $source ($self->all_storages) { - $source->debugobj(@_); + if(@_) { + foreach my $source ($self->all_storages) { + $source->debugobj(@_); + } } + return $self->master->debugobj; } =head2 debugfh @@ -615,9 +657,12 @@ set a debugfh object across all storages sub debugfh { my $self = shift @_; - foreach my $source ($self->all_storages) { - $source->debugfh(@_); + if(@_) { + foreach my $source ($self->all_storages) { + $source->debugfh(@_); + } } + return $self->master->debugfh; } =head2 debugcb @@ -628,9 +673,12 @@ set a debug callback across all storages sub debugcb { my $self = shift @_; - foreach my $source ($self->all_storages) { - $source->debugcb(@_); + if(@_) { + foreach my $source ($self->all_storages) { + $source->debugcb(@_); + } } + return $self->master->debugcb; } =head2 disconnect