53de0026047c724fd0925af66f21dbdac131d910
[dbsrgits/SQL-Abstract.git] / lib / DBIx / Class / Storage / Debug / PrettyPrint.pm
1 package DBIx::Class::Storage::Debug::PrettyPrint;
2
3 use strict;
4 use warnings;
5
6 use base 'DBIx::Class::Storage::Statistics';
7
8 use SQL::Abstract::Tree;
9
10 __PACKAGE__->mk_group_accessors( simple => '_sqlat' );
11
12 sub new {
13    my $class = shift;
14
15    my $sqlat = SQL::Abstract::Tree->new(shift @_);
16    my $self = $class->next::method(@_);
17
18    $self->_sqlat($sqlat);
19
20    return $self
21 }
22
23 sub print {
24   my $self = shift;
25   my $string = shift;
26   my $bindargs = shift || [];
27
28   my $use_placeholders = !!$self->_sqlat->fill_in_placeholders;
29
30   # DBIC pre-quotes bindargs
31   $bindargs = [map { s/^'//; s/'$//; $_ } @{$bindargs}] if $use_placeholders;
32
33   my $formatted = $self->_sqlat->format($string, $bindargs) . "\n";
34
35   $formatted = "$formatted: " . join ', ', @{$bindargs}
36      unless $use_placeholders;
37
38   $self->next::method($formatted, @_);
39 }
40
41 sub query_start {
42   my ($self, $string, @bind) = @_;
43
44   if(defined $self->callback) {
45     $string =~ m/^(\w+)/;
46     $self->callback->($1, "$string: ".join(', ', @bind)."\n");
47     return;
48   }
49
50   $self->print($string, \@bind);
51 }
52
53 1;
54
55 =pod
56
57 =head1 SYNOPSIS
58
59  package MyApp::Schema;
60
61  use parent 'DBIx::Class::Schema';
62
63  use DBIx::Class::Storage::Debug::PrettyPrint;
64
65  __PACKAGE__->load_namespaces;
66
67  my $pp = DBIx::Class::Storage::Debug::PrettyPrint->new({
68    profile => 'console',
69  });
70
71  sub connection {
72    my $self = shift;
73
74    my $ret = $self->next::method(@_);
75
76    $self->storage->debugobj($pp);
77
78    $ret
79  }
80