X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI.pm;h=fccbedcd99be722fec4b7caf1c5f9fdd6a984705;hb=70c288086248e5a4008490df22a56632341f2473;hp=1448bc396b51941e92be91f24c4840009035684f;hpb=3b80fa31b60050d4c8df91457ba6fd51b579a7a6;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 1448bc3..fccbedc 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -7,9 +7,8 @@ use warnings; use base qw/DBIx::Class::Storage::DBIHacks DBIx::Class::Storage/; use mro 'c3'; -use Carp::Clan qw/^DBIx::Class|^Try::Tiny/; -use DBI; -use DBIx::Class::Storage::DBI::Cursor; +use DBIx::Class::Carp; +use DBIx::Class::Exception; use Scalar::Util qw/refaddr weaken reftype blessed/; use List::Util qw/first/; use Sub::Name 'subname'; @@ -22,12 +21,15 @@ use namespace::clean; __PACKAGE__->cursor_class('DBIx::Class::Storage::DBI::Cursor'); __PACKAGE__->mk_group_accessors('inherited' => qw/ - sql_maker_class sql_limit_dialect sql_quote_char sql_name_sep + sql_limit_dialect sql_quote_char sql_name_sep /); -__PACKAGE__->sql_name_sep('.'); +__PACKAGE__->mk_group_accessors('component_class' => qw/sql_maker_class datetime_parser_type/); __PACKAGE__->sql_maker_class('DBIx::Class::SQLMaker'); +__PACKAGE__->datetime_parser_type('DateTime::Format::MySQL'); # historic default + +__PACKAGE__->sql_name_sep('.'); __PACKAGE__->mk_group_accessors('simple' => qw/ _connect_info _dbi_connect_info _dbic_connect_attributes _driver_determined @@ -107,7 +109,15 @@ for my $meth (@rdbms_specific_methods) { no strict qw/refs/; no warnings qw/redefine/; *{__PACKAGE__ ."::$meth"} = subname $meth => sub { - if (not $_[0]->_driver_determined and not $_[0]->{_in_determine_driver}) { + if ( + # only fire when invoked on an instance, a valid class-based invocation + # would e.g. be setting a default for an inherited accessor + ref $_[0] + and + ! $_[0]->_driver_determined + and + ! $_[0]->{_in_determine_driver} + ) { $_[0]->_determine_driver; # This for some reason crashes and burns on perl 5.8.1 @@ -117,6 +127,7 @@ for my $meth (@rdbms_specific_methods) { my $cref = $_[0]->can ($meth); goto $cref; } + goto $orig; }; } @@ -993,7 +1004,6 @@ sub sql_maker { my ($self) = @_; unless ($self->_sql_maker) { my $sql_maker_class = $self->sql_maker_class; - $self->ensure_class_loaded ($sql_maker_class); my %opts = %{$self->_sql_maker_opts||{}}; my $dialect = @@ -1294,10 +1304,11 @@ sub _connect { try { if(ref $info[0] eq 'CODE') { - $dbh = $info[0]->(); + $dbh = $info[0]->(); } else { - $dbh = DBI->connect(@info); + require DBI; + $dbh = DBI->connect(@info); } if (!$dbh) { @@ -1343,7 +1354,7 @@ sub _connect { else { # the handler may be invoked by something totally out of # the scope of DBIC - croak ("DBI Exception (unhandled by DBIC, ::Schema GCed): $_[0]"); + DBIx::Class::Exception->throw("DBI Exception (unhandled by DBIC, ::Schema GCed): $_[0]"); } }, '__DBIC__DBH__ERROR__HANDLER__'; }->($self, $dbh); @@ -2262,7 +2273,7 @@ sub select_single { =head2 sql_limit_dialect This is an accessor for the default SQL limit dialect used by a particular -storage driver. Can be overriden by supplying an explicit L +storage driver. Can be overridden by supplying an explicit L to L. For a list of available limit dialects see L. @@ -2822,12 +2833,7 @@ sub datetime_parser { =head2 datetime_parser_type -Defines (returns) the datetime parser class - currently hardwired to -L - -=cut - -sub datetime_parser_type { "DateTime::Format::MySQL"; } +Defines the datetime parser class - currently defaults to L =head2 build_datetime_parser @@ -2838,7 +2844,6 @@ See L sub build_datetime_parser { my $self = shift; my $type = $self->datetime_parser_type(@_); - $self->ensure_class_loaded ($type); return $type; }