File Coverage

lib/SQL/QueryBuilder/Flex/Statement.pm
Criterion Covered Total %
statement 41 43 95.3
branch 5 6 83.3
condition 2 3 66.6
subroutine 11 12 91.6
pod 0 7 0.0
total 59 71 83.1


line stmt bran cond sub pod time code
1             package SQL::QueryBuilder::Flex::Statement;
2              
3 24     24   140 use strict;
  24         214  
  24         887  
4 24     24   114 use warnings;
  24         39  
  24         737  
5 24     24   11191 use SQL::QueryBuilder::Flex::Writer;
  24         64  
  24         773  
6 24     24   151 use Scalar::Util qw(weaken);
  24         47  
  24         14604  
7              
8             our $AUTOLOAD;
9              
10             sub AUTOLOAD {
11 12     12   30 my ($self, @args) = @_;
12              
13 12         123 my ($method) = $AUTOLOAD =~ /::(\w+)\z/;
14              
15 12 50       45 return if $method eq 'DESTROY';
16              
17 12         21 do {
18 26 100       231 if (my $sub = $self->can($method)) {
19 12         79 return $sub->($self, @args);
20             }
21 14         71 $self = $self->parent();
22             } while ($self);
23              
24 0         0 die "Unknown method: '$method'";
25             }
26              
27             sub new {
28 42     42 0 200 my ($class, @options) = @_;
29              
30 42         415 my $self = bless {
31             parent => undef,
32             _writer => undef,
33             @options,
34             }, $class;
35              
36 42         345 weaken( $self->{parent} );
37              
38 42         156 return $self;
39             }
40              
41             sub parent {
42 15     15 0 33 my ($self) = @_;
43 15         80 return $self->{parent};
44             }
45              
46             sub get_writer {
47 50     50 0 91 my ($self) = @_;
48 50   66     407 return $self->{_writer} ||= SQL::QueryBuilder::Flex::Writer->new();
49             }
50              
51             sub set_writer {
52 15     15 0 96 my ($self, $writer) = @_;
53 15         30 $self->{_writer} = $writer;
54 15         66 return;
55             }
56              
57             sub build {
58 40     40 0 77 my ($self, $writer, $indent) = @_;
59 40 100       134 if ($writer) {
60 15         104 $self->set_writer($writer);
61             }
62             else {
63 25         197 $writer = $self->get_writer();
64 25         111 $writer->clear();
65             }
66 40         203 $self->do_build($writer, $indent);
67 40         73 return;
68             }
69              
70             sub do_build {
71 0     0 0 0 die "Not implemented";
72             }
73              
74             sub to_sql {
75 25     25 0 189 my ($self, $indent) = @_;
76 25         171 $self->build();
77 25         65 my $writer = $self->get_writer();
78 25         248 return $writer->to_sql($indent), $writer->get_params();
79             }
80              
81             1;