File Coverage

blib/lib/Data/Model/Driver/DBI/MasterSlave.pm
Criterion Covered Total %
statement 23 23 100.0
branch 4 6 66.6
condition 1 3 33.3
subroutine 7 7 100.0
pod 0 2 0.0
total 35 41 85.3


line stmt bran cond sub pod time code
1             package Data::Model::Driver::DBI::MasterSlave;
2 1     1   138392 use strict;
  1         2  
  1         23  
3 1     1   4 use warnings;
  1         3  
  1         20  
4 1     1   6 use base 'Data::Model::Driver::DBI';
  1         1  
  1         582  
5              
6 1     1   9 use Carp ();
  1         1  
  1         296  
7             $Carp::Internal{(__PACKAGE__)}++;
8              
9             sub init {
10 1     1 0 2 my $self = shift;
11 1 50       15 my $master = $self->{master}
12             or Carp::croak "'master' configuration is required";
13 1   33     5 my $slave = $self->{slave} || $master;
14              
15 1 50       102 if (my($type) = $master->{dsn} =~ /^dbi:(\w*)/i) {
16 1         12 $self->{dbd} = Data::Model::Driver::DBI::DBD->new($type);
17             }
18 1         5 $self->{dbi_config} = +{
19 1         12 master => +{ %{ $master } },
20 1         3 slave => +{ %{ $slave } },
21             };
22             }
23              
24 24     24 0 104 sub rw_handle { shift->_get_dbh('master', @_) };
25             # トランザクション中は master のみを返す
26 12 100   12   21 sub r_handle { my $self = shift;$self->_get_dbh( ($self->{active_transaction} ? 'master' : 'slave'), @_ ) };
  12         81  
27              
28             1;
29              
30             =head1 NAME
31              
32             Data::Model::Driver::DBI::MasterSlave - master-slave composition for mysql
33              
34             =head1 SYNOPSIS
35              
36             package MyDB;
37             use base 'Data::Model';
38             use Data::Model::Schema;
39             use Data::Model::Driver::DBI::MasterSlave;
40            
41             my $dbi_connect_options = {};
42             my $driver = Data::Model::Driver::DBI::MasterSlave->new(
43             master => {
44             dsn => 'dbi:mysql:host=master.server:database=test',
45             username => 'master',
46             password => 'master',
47             connect_options => $dbi_connect_options,
48             },
49             slave => {
50             dsn => 'dbi:mysql:host=slave.server:database=test',
51             username => 'slave',
52             password => 'slave',
53             connect_options => $dbi_connect_options,
54             },
55             );
56              
57             base_driver $driver;
58             install_model model_name => schema {
59             ....
60             };
61              
62             =head1 DESCRIPTION
63              
64             It can use with standard master-slave composition.
65              
66             =head1 SEE ALSO
67              
68             L,
69             L,
70             L
71              
72             =head1 AUTHOR
73              
74             Kazuhiro Osawa Eyappo shibuya plE
75              
76             =head1 LICENSE
77              
78             This library is free software; you can redistribute it and/or modify
79             it under the same terms as Perl itself.
80              
81             =cut