X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage.pm;h=6134b39cb8f680cd35e8795c48128bde2dedbc1a;hb=4d753fb8e9f7ec28334c93f6a798e0cb0874861a;hp=34c3eac3f25f96cd9468dc4b4edb214bd07acfc6;hpb=b6cd6478dc4f3fdf7a4fbee12bb40e2030571fcb;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage.pm b/lib/DBIx/Class/Storage.pm index 34c3eac..6134b39 100644 --- a/lib/DBIx/Class/Storage.pm +++ b/lib/DBIx/Class/Storage.pm @@ -13,7 +13,7 @@ use DBIx::Class::Storage::TxnScopeGuard; use Try::Tiny; use namespace::clean; -__PACKAGE__->mk_group_accessors('simple' => qw/debug debugobj schema/); +__PACKAGE__->mk_group_accessors('simple' => qw/debug schema/); __PACKAGE__->mk_group_accessors('inherited' => 'cursor_class'); __PACKAGE__->cursor_class('DBIx::Class::Cursor'); @@ -63,27 +63,8 @@ sub new { bless $new, $self; $new->set_schema($schema); - my $debugobj; - if (my $profile = $ENV{DBIC_TRACE_PROFILE}) { - require DBIx::Class::Storage::Debug::PrettyPrint; - if ($profile =~ /^\.?\//) { - require Config::Any; - my $cfg = Config::Any->load_files({ files => [$profile], use_ext => 1 }); - - my ($filename, $config) = %{$cfg->[0]}; - $debugobj = DBIx::Class::Storage::Debug::PrettyPrint->new($config) - } else { - $debugobj = DBIx::Class::Storage::Debug::PrettyPrint->new({ profile => $profile }) - } - } else { - $debugobj = DBIx::Class::Storage::Statistics->new - } - $new->debugobj($debugobj); - - my $debug_env = $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} - || $ENV{DBIC_TRACE}; - - $new->debug(1) if $debug_env; + $new->debug(1) + if $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} || $ENV{DBIC_TRACE}; $new; } @@ -135,7 +116,7 @@ Throws an exception - croaks. sub throw_exception { my $self = shift; - if ($self->schema) { + if (ref $self and $self->schema) { $self->schema->throw_exception(@_); } else { @@ -387,6 +368,42 @@ of L that is compatible with the original method of using a coderef as a callback. See the aforementioned Statistics class for more information. +=cut + +sub debugobj { + my $self = shift; + + if (@_) { + return $self->{debugobj} = $_[0]; + } + + $self->{debugobj} ||= do { + if (my $profile = $ENV{DBIC_TRACE_PROFILE}) { + require DBIx::Class::Storage::Debug::PrettyPrint; + if ($profile =~ /^\.?\//) { + require Config::Any; + + my $cfg = try { + Config::Any->load_files({ files => [$profile], use_ext => 1 }); + } catch { + # sanitize the error message a bit + $_ =~ s/at \s+ .+ Storage\.pm \s line \s \d+ $//x; + $self->throw_exception("Failure processing \$ENV{DBIC_TRACE_PROFILE}: $_"); + }; + + DBIx::Class::Storage::Debug::PrettyPrint->new(values %{$cfg->[0]}); + } + else { + DBIx::Class::Storage::Debug::PrettyPrint->new({ profile => $profile }); + } + } + else { + require DBIx::Class::Storage::Statistics; + DBIx::Class::Storage::Statistics->new + } + }; +} + =head2 debugcb Sets a callback to be executed each time a statement is run; takes a sub