File: | local/lib/perl5/Data/Printer/Filter/DB.pm |
Coverage: | 100.0% |
line | stmt | bran | cond | sub | time | code |
---|---|---|---|---|---|---|
1 | package Data::Printer::Filter::DB; | |||||
2 | 2 2 2 | 3 2 30 | use strict; | |||
3 | 2 2 2 | 4 1 20 | use warnings; | |||
4 | 2 2 2 | 388 106 6 | use Data::Printer::Filter; | |||
5 | 2 2 2 | 5 1 593 | use Term::ANSIColor; | |||
6 | ||||||
7 | filter 'DBI::db', sub { | |||||
8 | my ($dbh, $p) = @_; | |||||
9 | my $name = $dbh->{Driver}{Name}; | |||||
10 | ||||||
11 | my $string = "$name Database Handle (" | |||||
12 | . ($dbh->{Active} | |||||
13 | ? colored('connected', 'bright_green') | |||||
14 | : colored('disconnected', 'bright_red')) | |||||
15 | . ') {' | |||||
16 | ; | |||||
17 | indent; | |||||
18 | my %dsn = split( /[;=]/, $dbh->{Name} ); | |||||
19 | foreach my $k (keys %dsn) { | |||||
20 | $string .= newline . "$k: " . $dsn{$k}; | |||||
21 | } | |||||
22 | $string .= newline . 'Auto Commit: ' . $dbh->{AutoCommit}; | |||||
23 | ||||||
24 | my $kids = $dbh->{Kids}; | |||||
25 | $string .= newline . 'Statement Handles: ' . $kids; | |||||
26 | if ($kids > 0) { | |||||
27 | $string .= ' (' . $dbh->{ActiveKids} . ' active)'; | |||||
28 | } | |||||
29 | ||||||
30 | if ( defined $dbh->err ) { | |||||
31 | $string .= newline . 'Error: ' . $dbh->errstr; | |||||
32 | } | |||||
33 | $string .= newline . 'Last Statement: ' | |||||
34 | . colored( ($dbh->{Statement} || '-'), 'bright_yellow'); | |||||
35 | ||||||
36 | outdent; | |||||
37 | $string .= newline . '}'; | |||||
38 | return $string; | |||||
39 | }; | |||||
40 | ||||||
41 | filter 'DBI::st', sub { | |||||
42 | my ($sth, $properties) = @_; | |||||
43 | my $str = colored( ($sth->{Statement} || '-'), 'bright_yellow'); | |||||
44 | ||||||
45 | if ($sth->{NUM_OF_PARAMS} > 0) { | |||||
46 | my $values = $sth->{ParamValues}; | |||||
47 | if ($values) { | |||||
48 | $str .= ' (' | |||||
49 | . join(', ', | |||||
50 | map { | |||||
51 | my $v = $values->{$_}; | |||||
52 | $v || 'undef'; | |||||
53 | } 1 .. $sth->{NUM_OF_PARAMS} | |||||
54 | ) | |||||
55 | . ')'; | |||||
56 | } | |||||
57 | else { | |||||
58 | $str .= colored(' (bindings unavailable)', 'yellow'); | |||||
59 | } | |||||
60 | } | |||||
61 | return $str; | |||||
62 | }; | |||||
63 | ||||||
64 | # DBIx::Class filters | |||||
65 | filter '-class' => sub { | |||||
66 | my ($obj, $properties) = @_; | |||||
67 | ||||||
68 | if ( $obj->isa('DBIx::Class::Schema') ) { | |||||
69 | return ref($obj) . ' DBIC Schema with ' . p( $obj->storage->dbh ); | |||||
70 | } | |||||
71 | elsif ( grep { $obj->isa($_) } qw(DBIx::Class::ResultSet DBIx::Class::ResultSetColumn) ) { | |||||
72 | ||||||
73 | my $str = colored( ref($obj), $properties->{color}{class} ); | |||||
74 | $str .= ' (' . $obj->result_class . ')' | |||||
75 | if $obj->can( 'result_class' ); | |||||
76 | ||||||
77 | if (my $query_data = $obj->as_query) { | |||||
78 | my @query_data = @$$query_data; | |||||
79 | indent; | |||||
80 | my $sql = shift @query_data; | |||||
81 | $str .= ' {' | |||||
82 | . newline . colored($sql, 'bright_yellow') | |||||
83 | . newline . join ( newline, map { | |||||
84 | $_->[1] . ' (' . $_->[0]{sqlt_datatype} . ')' | |||||
85 | } @query_data | |||||
86 | ) | |||||
87 | ; | |||||
88 | outdent; | |||||
89 | $str .= newline . '}'; | |||||
90 | } | |||||
91 | ||||||
92 | return $str; | |||||
93 | } | |||||
94 | else { | |||||
95 | return; | |||||
96 | } | |||||
97 | }; | |||||
98 | ||||||
99 | ||||||
100 | 1; |