File Coverage

blib/lib/SQL/Composer/Delete.pm
Criterion Covered Total %
statement 39 39 100.0
branch 7 8 87.5
condition 1 3 33.3
subroutine 9 9 100.0
pod 0 4 0.0
total 56 63 88.8


line stmt bran cond sub pod time code
1             package SQL::Composer::Delete;
2              
3 3     3   12864 use strict;
  3         3  
  3         76  
4 3     3   11 use warnings;
  3         4  
  3         141  
5              
6             require Carp;
7 3     3   318 use SQL::Composer::Quoter;
  3         5  
  3         46  
8 3     3   338 use SQL::Composer::Expression;
  3         3  
  3         675  
9              
10             sub new {
11 6     6 0 2931 my $class = shift;
12 6         16 my (%params) = @_;
13              
14 6         15 my $self = { table => $params{from} };
15 6         10 bless $self, $class;
16              
17             $self->{quoter} =
18 6   33     44 $params{quoter} || SQL::Composer::Quoter->new(driver => $params{driver});
19              
20 6         12 my $sql = '';
21 6         8 my @bind;
22              
23 6         8 $sql .= 'DELETE FROM ';
24              
25 6         17 $sql .= $self->_quote($params{from});
26              
27 6 100       17 if ($params{where}) {
28             my $expr = SQL::Composer::Expression->new(
29             quoter => $self->{quoter},
30             expr => $params{where}
31 1         6 );
32 1         3 $sql .= ' WHERE ' . $expr->to_sql;
33 1         3 push @bind, $expr->to_bind;
34             }
35              
36 6 100       14 if (defined(my $limit = $params{limit})) {
37 2         3 $sql .= ' LIMIT ' . $limit;
38             }
39              
40 6 100       16 if (defined(my $offset = $params{offset})) {
41 1         2 $sql .= ' OFFSET ' . $offset;
42             }
43              
44 6         9 $self->{sql} = $sql;
45 6         9 $self->{bind} = \@bind;
46              
47 6         13 return $self;
48             }
49              
50 2     2 0 667 sub table { shift->{table} }
51              
52 5     5 0 19 sub to_sql { shift->{sql} }
53 5 50   5 0 1835 sub to_bind { @{shift->{bind} || []} }
  5         20  
54              
55             sub _quote {
56 6     6   8 my $self = shift;
57 6         5 my ($column) = @_;
58              
59 6         18 return $self->{quoter}->quote($column);
60             }
61              
62             1;
63             __END__