From: Nigel Metheringham Date: Wed, 25 Jan 2006 16:37:06 +0000 (+0000) Subject: Debugging/trace output control. Allows redirection to different filehandle, more... X-Git-Tag: v0.05005~109 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=92b858c9bac109da404a6ee1471920bb3d99ccb3;p=dbsrgits%2FDBIx-Class.git Debugging/trace output control. Allows redirection to different filehandle, more magic on env variables --- diff --git a/lib/DBIx/Class/Manual/Troubleshooting.pod b/lib/DBIx/Class/Manual/Troubleshooting.pod index 41f55ff..6d7dc86 100644 --- a/lib/DBIx/Class/Manual/Troubleshooting.pod +++ b/lib/DBIx/Class/Manual/Troubleshooting.pod @@ -15,6 +15,13 @@ Alternatively use the Cdebug> class method:- $class->storage->debug(1); +To send the output somewhere else set debugfh:- + + $class->storage->debugfh(IO::File->new('/tmp/trace.out', 'w'); + +Alternatively you can do this with the environment variable too:- + + export DBIX_CLASS_STORAGE_DBI_DEBUG="1=/tmp/trace.out" =cut diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index c533fec..9b04706 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -5,6 +5,7 @@ use warnings; use DBI; use SQL::Abstract::Limit; use DBIx::Class::Storage::DBI::Cursor; +use IO::File; BEGIN { @@ -138,12 +139,17 @@ use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Exception AccessorGroup/); __PACKAGE__->mk_group_accessors('simple' => - qw/connect_info _dbh _sql_maker debug cursor on_connect_do transaction_depth/); + qw/connect_info _dbh _sql_maker debug debugfh cursor on_connect_do transaction_depth/); sub new { my $new = bless({}, ref $_[0] || $_[0]); $new->cursor("DBIx::Class::Storage::DBI::Cursor"); $new->transaction_depth(0); + if ($ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} =~ /=(.+)$/) { + $new->debugfh(IO::File->new($1, 'w')||die "Cannot open trace file $1"); + } else { + $new->debugfh(IO::File->new('>&STDERR')); + } $new->debug(1) if $ENV{DBIX_CLASS_STORAGE_DBI_DEBUG}; return $new; } @@ -166,6 +172,18 @@ This class represents the connection to the database Executes the sql statements given as a listref on every db connect. +=head2 debug + +Causes SQL trace information to be emitted on C filehandle +(or C if C has not specifically been set). + +=head2 debugfh + +Sets or retrieves the filehandle used for trace/debug output. This +should be an IO::Handle compatible object (only the C method is +used). Initially set to be STDERR - although see information on the +L environment variable. + =cut sub dbh { @@ -248,7 +266,7 @@ sub _execute { my ($self, $op, $extra_bind, $ident, @args) = @_; my ($sql, @bind) = $self->sql_maker->$op($ident, @args); unshift(@bind, @$extra_bind) if $extra_bind; - warn "$sql: @bind" if $self->debug; + $self->debugfh->print("$sql: @bind\n") if $self->debug; my $sth = $self->sth($sql,$op); @bind = map { ref $_ ? ''.$_ : $_ } @bind; # stringify args my $rv = $sth->execute(@bind); @@ -340,6 +358,16 @@ sub columns_info_for { 1; +=head1 ENVIRONMENT VARIABLES + +=head2 DBIX_CLASS_STORAGE_DBI_DEBUG + +If C is set then SQL trace information +is produced (as when the L method is set). + +If the value is of the form C<1=/path/name> then the trace output is +written to the file C. + =head1 AUTHORS Matt S. Trout