Catalyst::Model::DBIC::Schema::Types;
use MooseX::Types -declare => [qw/
- ConnectInfo ConnectInfos Replicants SchemaClass CursorClass
- CreateOption
+ ConnectInfo ConnectInfos Replicants LoadedClass CreateOption
/];
use Carp::Clan '^Catalyst::Model::DBIC::Schema';
class_type 'DBIx::Class::Schema';
-subtype SchemaClass,
+subtype LoadedClass,
as ClassName;
-coerce SchemaClass,
- from Str,
- via { Class::MOP::load_class($_); $_ };
-
-subtype CursorClass,
- as ClassName;
-
-coerce CursorClass,
+coerce LoadedClass,
from Str,
via { Class::MOP::load_class($_); $_ };
use Moose::Autobox;
use Carp::Clan '^Catalyst::Model::DBIC::Schema';
-use Catalyst::Model::DBIC::Schema::Types 'ConnectInfos';
+use Catalyst::Model::DBIC::Schema::Types qw/ConnectInfos LoadedClass/;
+use MooseX::Types::Moose qw/Str HashRef/;
=head1 NAME
__PACKAGE__->config({
traits => ['Replicated']
- connect_info =>
+ connect_info =>
['dbi:mysql:master', 'user', 'pass'],
replicants => [
['dbi:mysql:slave1', 'user', 'pass'],
Array of connect_info settings for every replicant.
+The following can be set via L<Catalyst::Model::DBIC::Schema/connect_info>, or
+as their own parameters. If set via separate parameters, they will override the
+settings in C<connect_info>.
+
+=head2 pool_type
+
+See L<DBIx::Class::Storage::DBI::Replicated/pool_type>.
+
+=head2 pool_args
+
+See L<DBIx::Class::Storage::DBI::Replicated/pool_args>.
+
+=head2 balancer_type
+
+See L<DBIx::Class::Storage::DBI::Replicated/balancer_type>.
+
+=head2 balancer_args
+
+See L<DBIx::Class::Storage::DBI::Replicated/balancer_args>.
+
=cut
has replicants => (
is => 'ro', isa => ConnectInfos, coerce => 1, required => 1
);
+has pool_type => (is => 'ro', isa => LoadedClass);
+has pool_args => (is => 'ro', isa => HashRef);
+has balancer_type => (is => 'ro', isa => Str);
+has balancer_args => (is => 'ro', isa => HashRef);
+
after setup => sub {
my $self = shift;
$self->storage_type('::DBI::Replicated');
}
- $self->connect_info->{balancer_type} ||= '::Random'
- unless $self->connect_info->{balancer_type};
+ my $connect_info = $self->connect_info;
- unless ($self->connect_info->{balancer_args} &&
- exists $self->connect_info->{balancer_args}{master_read_weight}) {
- $self->connect_info->{balancer_args}{master_read_weight} = 1;
- }
+ $connect_info->{pool_type} = $self->pool_type
+ if $self->pool_type;
+
+ $connect_info->{pool_args} = $self->pool_args
+ if $self->pool_args;
+
+ $connect_info->{balancer_type} = $self->balancer_type ||
+ $connect_info->{balancer_type} || '::Random';
+
+ $connect_info->{balancer_args} = $self->balancer_args ||
+ $connect_info->{balancer_args} || {};
+
+ $connect_info->{balancer_args}{master_read_weight} = 1
+ unless exists $connect_info->{balancer_args}{master_read_weight};
};
sub BUILD {}
+
after BUILD => sub {
my $self = shift;