X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI.pm;h=2dc005c8f08eb86d6230319b5e00dcdb4dbba2e5;hb=4190ff95124ad2b3f33067b2e7d6ccfb919dab7c;hp=62789567564c503f450dabca916c1f792d84d9f5;hpb=91d0c99f913a7d2a03a159c4f14ecde89c43a1bf;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 6278956..2dc005c 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -12,10 +12,8 @@ use DBI; use DBIx::Class::Storage::DBI::Cursor; use Scalar::Util qw/refaddr weaken reftype blessed/; use List::Util qw/first/; -use Data::Dumper::Concise 'Dumper'; use Sub::Name 'subname'; use Try::Tiny; -use File::Path 'make_path'; use overload (); use namespace::clean; @@ -24,12 +22,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 @@ -109,7 +110,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 @@ -119,6 +128,7 @@ for my $meth (@rdbms_specific_methods) { my $cref = $_[0]->can ($meth); goto $cref; } + goto $orig; }; } @@ -995,7 +1005,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 = @@ -1211,6 +1220,8 @@ sub _determine_driver { $self->_driver_determined(1); + Class::C3->reinitialize() if DBIx::Class::_ENV_::OLD_MRO; + $self->_init; # run driver-specific initializations $self->_run_connection_actions @@ -1776,10 +1787,11 @@ sub insert_bulk { $msg, $cols->[$col_idx], do { + require Data::Dumper::Concise; local $Data::Dumper::Maxdepth = 1; # don't dump objects, if any - Dumper { + Data::Dumper::Concise::Dumper ({ map { $cols->[$_] => $data->[$slice_idx][$_] } (0 .. $#$cols) - }, + }), } ); }; @@ -1920,9 +1932,10 @@ sub _execute_array { $self->throw_exception("Unexpected populate error: $err") if ($i > $#$tuple_status); + require Data::Dumper::Concise; $self->throw_exception(sprintf "%s for populate slice:\n%s", ($tuple_status->[$i][1] || $err), - Dumper { map { $cols->[$_] => $data->[$i][$_] } (0 .. $#$cols) }, + Data::Dumper::Concise::Dumper( { map { $cols->[$_] => $data->[$i][$_] } (0 .. $#$cols) } ), ); } @@ -2260,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. @@ -2572,10 +2585,10 @@ sub create_ddl_dir { } else { -d $dir or - make_path ("$dir") # make_path does not like objects (i.e. Path::Class::Dir) + (require File::Path and File::Path::make_path ("$dir")) # make_path does not like objects (i.e. Path::Class::Dir) or $self->throw_exception( - "Failed to create '$dir': " . ($! || $@ || 'error unknow') + "Failed to create '$dir': " . ($! || $@ || 'error unknown') ); } @@ -2820,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 @@ -2836,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; }