| Data-Model documentation | Contained in the Data-Model distribution. |
Data::Model::Driver::DBI::MasterSlave - master-slave composition for mysql
package MyDB;
use base 'Data::Model';
use Data::Model::Schema;
use Data::Model::Driver::DBI::MasterSlave;
my $dbi_connect_options = {};
my $driver = Data::Model::Driver::DBI::MasterSlave->new(
master => {
dsn => 'dbi:mysql:host=master.server:database=test',
username => 'master',
password => 'master',
connect_options => $dbi_connect_options,
},
slave => {
dsn => 'dbi:mysql:host=slave.server:database=test',
username => 'slave',
password => 'slave',
connect_options => $dbi_connect_options,
},
);
base_driver $driver;
install_model model_name => schema {
....
};
It can use with standard master-slave composition.
Kazuhiro Osawa <yappo <at> shibuya <döt> pl>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Data-Model documentation | Contained in the Data-Model distribution. |
package Data::Model::Driver::DBI::MasterSlave; use strict; use warnings; use base 'Data::Model::Driver::DBI'; use Carp (); $Carp::Internal{(__PACKAGE__)}++; sub init { my $self = shift; my $master = $self->{master} or Carp::croak "'master' configuration is required"; my $slave = $self->{slave} || $master; if (my($type) = $master->{dsn} =~ /^dbi:(\w*)/i) { $self->{dbd} = Data::Model::Driver::DBI::DBD->new($type); } $self->{dbi_config} = +{ master => +{ %{ $master } }, slave => +{ %{ $slave } }, }; } sub rw_handle { shift->_get_dbh('master', @_) }; # ãã©ã³ã¶ã¯ã·ã§ã³ä¸ã¯ master ã®ã¿ãè¿ã sub r_handle { my $self = shift;$self->_get_dbh( ($self->{active_transaction} ? 'master' : 'slave'), @_ ) }; 1;