Hide bulk inserts from DBIx::Class
[scpubgit/Q-Branch.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   return if defined $bindargs && defined $bindargs->[0] &&
29     $bindargs->[0] eq q('__BULK_INSERT__');
30
31   my $use_placeholders = !!$self->_sqlat->fill_in_placeholders;
32
33   # DBIC pre-quotes bindargs
34   $bindargs = [map { s/^'//; s/'$//; $_ } @{$bindargs}] if $use_placeholders;
35
36   my $formatted = $self->_sqlat->format($string, $bindargs) . "\n";
37
38   $formatted = "$formatted: " . join ', ', @{$bindargs}
39      unless $use_placeholders;
40
41   $self->next::method($formatted, @_);
42 }
43
44 sub query_start {
45   my ($self, $string, @bind) = @_;
46
47   if(defined $self->callback) {
48     $string =~ m/^(\w+)/;
49     $self->callback->($1, "$string: ".join(', ', @bind)."\n");
50     return;
51   }
52
53   $self->print($string, \@bind);
54 }
55
56 1;
57
58 =pod
59
60 =head1 SYNOPSIS
61
62  package MyApp::Schema;
63
64  use parent 'DBIx::Class::Schema';
65
66  use DBIx::Class::Storage::Debug::PrettyPrint;
67
68  __PACKAGE__->load_namespaces;
69
70  my $pp = DBIx::Class::Storage::Debug::PrettyPrint->new({
71    profile => 'console',
72  });
73
74  sub connection {
75    my $self = shift;
76
77    my $ret = $self->next::method(@_);
78
79    $self->storage->debugobj($pp);
80
81    $ret
82  }
83