File Coverage

blib/lib/SQL/Composer/Join.pm
Criterion Covered Total %
statement 38 38 100.0
branch 8 10 80.0
condition 4 6 66.6
subroutine 8 8 100.0
pod 0 3 0.0
total 58 65 89.2


line stmt bran cond sub pod time code
1             package SQL::Composer::Join;
2              
3 4     4   12884 use strict;
  4         5  
  4         86  
4 4     4   11 use warnings;
  4         5  
  4         93  
5              
6             require Carp;
7 4     4   1109 use SQL::Composer::Quoter;
  4         6  
  4         87  
8 4     4   1219 use SQL::Composer::Expression;
  4         52  
  4         940  
9              
10             sub new {
11 15     15 0 4346 my $class = shift;
12 15         44 my (%params) = @_;
13              
14 15         18 my $self = {};
15 15         18 bless $self, $class;
16              
17             $self->{quoter} = $params{quoter}
18             || SQL::Composer::Quoter->new(
19             driver => $params{driver},
20             default_prefix => $params{as} || $params{source}
21 15   66     71 );
22              
23 15         17 my $sql = '';
24 15         12 my @bind;
25              
26 15 100       28 $sql .= uc($params{op}) . ' ' if $params{op};
27 15         17 $sql .= 'JOIN ';
28              
29 15         30 $sql .= $self->_quote($params{source}) . ' ';
30              
31 15 100       33 if (my $as = $params{as}) {
32 7         10 $sql .= 'AS ' . $self->_quote($as) . ' ';
33             }
34              
35 15 100       32 if (my $constraint = $params{on}) {
    50          
36             my $expr = SQL::Composer::Expression->new(
37             default_prefix => $params{as} || $params{source},
38             quoter => $self->{quoter},
39 14   66     60 expr => $constraint
40             );
41 14         28 $sql .= 'ON ' . $expr->to_sql;
42 14         26 push @bind, $expr->to_bind;
43             }
44             elsif (my $column = $params{using}) {
45 1         3 $sql .= 'USING ' . $self->_quote($column);
46             }
47              
48 15         17 $self->{sql} = $sql;
49 15         16 $self->{bind} = \@bind;
50              
51 15         34 return $self;
52             }
53              
54 15     15 0 38 sub to_sql { shift->{sql} }
55 15 50   15 0 1241 sub to_bind { @{shift->{bind} || []} }
  15         51  
56              
57             sub _quote {
58 23     23   20 my $self = shift;
59 23         22 my ($column) = @_;
60              
61 23         45 return $self->{quoter}->quote($column);
62             }
63              
64             1;
65             __END__