File Coverage

blib/lib/Rose/DBx/CannedQuery/Glycosylated.pm
Criterion Covered Total %
statement 55 55 100.0
branch 16 16 100.0
condition 6 8 75.0
subroutine 10 10 100.0
pod 3 3 100.0
total 90 92 97.8


line stmt bran cond sub pod time code
1             #!perl
2             #
3              
4 4     4   35809 use strict;
  4         6  
  4         119  
5 4     4   15 use warnings;
  4         4  
  4         164  
6              
7             package Rose::DBx::CannedQuery::Glycosylated;
8              
9             our ($VERSION) = '1.01';
10              
11 4     4   12 use Carp;
  4         4  
  4         233  
12 4     4   16 use Scalar::Util;
  4         5  
  4         132  
13              
14 4     4   1723 use Moo 2;
  4         28915  
  4         19  
15 4     4   5509 use Types::Standard qw/ Str /;
  4         165350  
  4         41  
16              
17             extends 'Rose::DBx::CannedQuery';
18             with 'MooX::Role::Chatty';
19              
20             has 'name' => ( is => 'ro', isa => Str, lazy => 1, builder => '_build_name' );
21              
22             sub _build_name {
23 1     1   469 my $self = shift;
24 1         15 substr( $self->sql, 0, 32 );
25             }
26              
27             sub do_one_query_ref {
28 16     16 1 23 my ( $self, $bind_vals, $opts ) = @_;
29 16   50     35 $bind_vals ||= [];
30 16   100     62 $opts ||= [ {} ];
31 16 100       34 $opts = [ {}, $opts ] unless ref $opts;
32 16         45 my $verbose = $self->verbose;
33 16         795 my ($rslt);
34              
35 16 100       44 if ( $verbose > 2 ) {
36 5         23 require Data::Dumper;
37 5         25 my $optstr = Data::Dumper->new($opts)->Terse(1)->Pad("\t")->Dump;
38 5         279 $optstr =~ s/\n+$//;
39 5         11 $optstr =~ s/\n\s*/, /g;
40 4         50 $self->remark(
41             'Executing '
42             . $self->name
43             . (
44             @$bind_vals
45             ? " with bind values:\n"
46 5 100       78 . join( "\n", map { "\t$_" } @$bind_vals ) . "\n"
47             : ' '
48             )
49             . "with query modifiers:\n$optstr"
50             );
51             }
52              
53 16         478 $rslt = $self->resultref( $bind_vals, $opts );
54 16 100       11539 $self->remark( 'Got ' . scalar(@$rslt) . ' results' ) if $verbose > 2;
55              
56 16         599 return $rslt;
57             }
58              
59             sub do_one_query {
60 3     3 1 7886 return @{ shift->do_one_query_ref( \@_ ) };
  3         13  
61             }
62              
63             sub do_many_queries {
64 6     6 1 24411 my ( $self, $param_sets ) = @_;
65 6   100     29 $param_sets ||= [ [] ];
66 6         26 my $array_of_sets = Scalar::Util::reftype($param_sets) eq 'ARRAY';
67 6         27 my $verbose = $self->verbose;
68 6         950 my (%rslt);
69              
70 6 100       21 if ($array_of_sets) {
71 4         9 my $i = 'Element0000';
72 4         12 $param_sets = { map { $i++ => $_ } @$param_sets };
  6         27  
73             }
74              
75 6         39 foreach my $bind_name ( sort keys %$param_sets ) {
76 10   50     36 my $bind_vals = $param_sets->{$bind_name} || [];
77 10 100       88 $self->remark(
78             "Executing bind set $bind_name for query " . $self->name )
79             if $verbose > 1;
80 10 100       4313 if ( ref $bind_vals->[0] eq 'ARRAY' ) {
81              
82             # We actually have a tuple of $bind_values, $fetch_values
83 5         18 $rslt{$bind_name} = $self->do_one_query_ref(@$bind_vals);
84             }
85             else {
86             # Just plain old bind values; don't dereference further
87 5         18 $rslt{$bind_name} = $self->do_one_query_ref($bind_vals);
88             }
89             }
90              
91 6         44 return $array_of_sets
92 6 100       39 ? [ map { $rslt{$_} } sort keys %rslt ]
93             : \%rslt;
94             }
95              
96             1;
97              
98             __END__