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   13006 use strict;
  4         4  
  4         85  
4 4     4   12 use warnings;
  4         4  
  4         88  
5              
6             require Carp;
7 4     4   1160 use SQL::Composer::Quoter;
  4         5  
  4         86  
8 4     4   1229 use SQL::Composer::Expression;
  4         6  
  4         909  
9              
10             sub new {
11 15     15 0 3338 my $class = shift;
12 15         30 my (%params) = @_;
13              
14 15         16 my $self = {};
15 15         16 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     53 );
22              
23 15         16 my $sql = '';
24 15         11 my @bind;
25              
26 15 100       25 $sql .= uc($params{op}) . ' ' if $params{op};
27 15         15 $sql .= 'JOIN ';
28              
29 15         24 $sql .= $self->_quote($params{source}) . ' ';
30              
31 15 100       27 if (my $as = $params{as}) {
32 7         9 $sql .= 'AS ' . $self->_quote($as) . ' ';
33             }
34              
35 15 100       26 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     86 expr => $constraint
40             );
41 14         26 $sql .= 'ON ' . $expr->to_sql;
42 14         21 push @bind, $expr->to_bind;
43             }
44             elsif (my $column = $params{using}) {
45 1         2 $sql .= 'USING ' . $self->_quote($column);
46             }
47              
48 15         17 $self->{sql} = $sql;
49 15         12 $self->{bind} = \@bind;
50              
51 15         37 return $self;
52             }
53              
54 15     15 0 34 sub to_sql { shift->{sql} }
55 15 50   15 0 1108 sub to_bind { @{shift->{bind} || []} }
  15         44  
56              
57             sub _quote {
58 23     23   19 my $self = shift;
59 23         21 my ($column) = @_;
60              
61 23         35 return $self->{quoter}->quote($column);
62             }
63              
64             1;
65             __END__