From: Brandon L. Black Date: Sun, 26 Mar 2006 17:20:45 +0000 (+0000) Subject: 0.11 released, fixes to the connect_info extra options support X-Git-Tag: v0.12~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7db6da78de5059053f339d7bedc0fbc2cd08dc91;hp=4bd6775c3865b9b941cf1a7c7bef4c6cadf5e4c8;p=catagits%2FCatalyst-Model-DBIC-Schema.git 0.11 released, fixes to the connect_info extra options support --- diff --git a/Build.PL b/Build.PL index b91de6c..d5067e4 100644 --- a/Build.PL +++ b/Build.PL @@ -5,7 +5,7 @@ my %arguments = ( license => 'perl', module_name => 'Catalyst::Model::DBIC::Schema', requires => { - 'DBIx::Class' => 0.05006, + 'DBIx::Class' => 0.05007, 'Catalyst' => 5.64, 'UNIVERSAL::require' => 0.10, 'Class::Data::Accessor' => 0.02, diff --git a/Changes b/Changes index f297971..bab135c 100644 --- a/Changes +++ b/Changes @@ -1,12 +1,10 @@ Revision history for Perl extension Catalyst::Model::DBIC::Schema -0.11 Not yet released - - Removed on_connect_do config setting +0.11 Sun Mar 26 17:22:31 UTC 2006 + - Removed on_connect_do config setting (it was only out + in public for 4 days...). - Support for on_connect_do and sql_maker options as part - of connect_info in the same way DBIx::Class will, with - compat for current DBIx::Class - - Changed resultset shortcuts to use COMPONENT instead of - ACCEPT_CONTEXT, should be more efficient. + of connect_info 0.10 Wed Mar 22 07:06:02 UTC 2006 - Added on_connect_do config setting diff --git a/lib/Catalyst/Model/DBIC/Schema.pm b/lib/Catalyst/Model/DBIC/Schema.pm index 710388a..3bc64bd 100644 --- a/lib/Catalyst/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Model/DBIC/Schema.pm @@ -5,6 +5,7 @@ use base qw/Catalyst::Model Class::Accessor::Fast Class::Data::Accessor/; use NEXT; use UNIVERSAL::require; use Carp; +require DBIx::Class; our $VERSION = '0.11'; @@ -92,14 +93,47 @@ C. This parameter is required. =item connect_info This is an arrayref of connection parameters, which are specific to your -C. For C<::DBI>, which is the only supported C -in L at the time of this writing, the 4 parameters are your -dsn, username, password, and connect options hashref. +C (see your storage type documentation for more details). This is not required if C already has connection information defined in itself (which would be the case for a Schema defined by L, for instance). +For L, which is the only supported +C in L at the time of this writing, the +parameters are your dsn, username, password, and connect options hashref. + +If you need to specify the L specific parameter +C, or the related C options C, +C, or C, you can place these options into a hashref +as the final element of the C arrayref. If in doubt, don't +specify these options. You would know it if you needed them. + +Examples: + + connect_info => [ 'dbi:Pg:dbname=mypgdb', 'postgres', '' ], + connect_info => [ + 'dbi:SQLite:dbname=foo.db', + { + on_connect_do => [ + 'some SQL statement', + 'another SQL statement', + ], + } + ], + connect_info => [ + 'dbi:Pg:dbname=mypgdb', + 'postgres', + '', + { AutoCommit => 0 }, + { + on_connect_do => [ + 'some SQL statement', + 'another SQL statement', + ], + } + ], + =item storage_type Allows the use of a different C than what is set in your @@ -192,26 +226,51 @@ sub new { $self->schema->storage_type($self->{storage_type}) if $self->{storage_type}; - $self->schema->connection(@{$self->{connect_info}}); - - # This is temporary, until DBIx::Class supports the same syntax and we - # switch our requisite to that version somewhere down the line. - my $last_info = $self->{connect_info}->[-1]; - if(ref $last_info eq 'HASH') { - if(my $on_connect_do = $last_info->{on_connect_do}) { - $self->schema->storage->on_connect_do($self->{on_connect_do}); - } - foreach my $sql_maker_opt (qw/limit_dialect quote_char name_sep/) { - if(my $opt_val = $last_info->{$sql_maker_opt}) { - $self->schema->storage->sql_maker->$sql_maker_opt($opt_val); + + # XXX This is temporary, until DBIx::Class::Storage::DBI supports the + # same syntax and we switch our requisite to that version somewhere + # down the line. This syntax is already committed into DBIx::Class + # dev branch post-0.06. + # At that time, this whole block can revert back to just being: + # $self->schema->connection(@{$self->{connect_info}}); + + my $connect_info = [ @{$self->{connect_info}} ]; + my ($on_connect_do, %sql_maker_opts); + if($DBIx::Class::VERSION < 0.069) { + my $used; + my $last_info = $self->{connect_info}->[-1]; + if(ref $last_info eq 'HASH') { + if($on_connect_do = $last_info->{on_connect_do}) { + $used = 1; + } + for my $sql_maker_opt (qw/limit_dialect quote_char name_sep/) { + if(my $opt_val = $last_info->{$sql_maker_opt}) { + $used = 1; + $sql_maker_opts{$sql_maker_opt} = $opt_val; + } } + pop(@$connect_info) if $used; } } + $self->schema->connection(@$connect_info); + + if($DBIx::Class::VERSION < 0.069) { + $self->schema->storage->on_connect_do($on_connect_do) + if $on_connect_do; + foreach my $sql_maker_opt (keys %sql_maker_opts) { + $self->schema->storage->sql_maker->$sql_maker_opt( + $sql_maker_opts{$sql_maker_opt} + ); + } + } + + # XXX end of compatibility block referenced above + no strict 'refs'; foreach my $moniker ($self->schema->sources) { my $classname = "${class}::$moniker"; - *{"${classname}::COMPONENT"} = sub { + *{"${classname}::ACCEPT_CONTEXT"} = sub { shift; shift->model($model_name)->resultset($moniker); }