File Coverage

blib/lib/SQL/OOP/Array.pm
Criterion Covered Total %
statement 51 54 94.4
branch 10 12 83.3
condition 5 6 83.3
subroutine 11 11 100.0
pod 7 7 100.0
total 84 90 93.3


line stmt bran cond sub pod time code
1             ### ---
2             ### Array of SQL snippets
3             ### ---
4             package SQL::OOP::Array;
5 19     19   728 use strict;
  19         34  
  19         668  
6 19     19   95 use warnings;
  19         30  
  19         475  
7 19     19   91 use Scalar::Util qw(blessed);
  19         31  
  19         1216  
8 19     19   119 use base qw(SQL::OOP::Base);
  19         33  
  19         12483  
9              
10             ### ---
11             ### Constructor
12             ### ---
13             sub new {
14 269     269 1 12379 my ($class, @array) = @_;
15 269         1061 my $self = bless {
16             sepa => ' ',
17             gen => undef,
18             array => undef,
19             }, $class;
20            
21 269         784 return $self->append(@array);
22             }
23              
24             ### ---
25             ### Set separator for join array
26             ### ---
27             sub set_sepa {
28 264     264 1 428 my ($self, $sepa) = @_;
29 264         387 $self->{sepa} = $sepa;
30 264         1176 return $self;
31             }
32              
33             ### ---
34             ### Append snippet
35             ### ---
36             sub append {
37 85     85 1 146 my ($self, @array) = @_;
38 85         341 $self->_init_gen;
39 85 50 66     389 if (ref $array[0] && ref $array[0] eq 'ARRAY') {
40 0         0 @array = @{$array[0]};
  0         0  
41             }
42 85         128 foreach my $elem (@array) {
43 153 100       316 if ($elem) {
44 140         149 push(@{$self->{array}}, SQL::OOP::Base->new($elem));
  140         510  
45             }
46             }
47            
48 85         358 return $self;
49             }
50              
51             ### ---
52             ### generate SQL snippet
53             ### ---
54             sub generate {
55 92     92 1 115 my $self = shift;
56 202         646 my @array = map {
57 204 100 100     542 if ($_->to_string && (scalar @{$self->{array}}) >= 2) {
  92         181  
58 185         430 $self->fix_element_in_list_context($_);
59             } else {
60 19         47 $_->to_string;
61             }
62 92         102 } @{$self->{array}};
63 92         191 $self->{gen} = join($self->{sepa}, grep {$_} @array);
  204         417  
64            
65 92         249 return $self;
66             }
67              
68             ### ---
69             ### fix generated string in list context
70             ### ---
71             sub fix_element_in_list_context {
72 123     123 1 161 my ($self, $obj) = @_;
73 123 100       590 if ($obj->isa(__PACKAGE__)) {
74 15         47 return '('. $obj->to_string. ')';
75             }
76 108         288 return $obj->to_string;
77             }
78              
79             ### ---
80             ### Get binded values in array
81             ### ---
82             sub bind {
83 86     86 1 126 my $self = shift;
84 196         192 my @out = map {
85 86         168 my @a;
86 196 100       378 if ($_) {
87 181         492 @a = $_->bind;
88             }
89 196         380 @a;
90 86         97 } @{$self->{array}};
91 86 50       379 return @out if (wantarray);
92 0         0 return scalar @out;
93             }
94              
95             sub values {
96 2     2 1 18 my $self = shift;
97 2         3 return @{$self->{array}};
  2         13  
98             }
99              
100             1;
101              
102             __END__