File Coverage

File:lib/SQL/Select.pm
Coverage:91.2%

linestmtbrancondsubpodtimecode
1package SQL::Select;
2
3
24
24
24
189
73
305
use strict;
4
24
24
24
267
76
287
use warnings;
5
24
24
24
274
81
285
use base 'SQL::Statement';
6#use Smart::Comments;
7
8sub new {
9
2132
0
17691
    my $class = ref $_[0] ? ref shift : shift;
10
2132
204223
    bless {
11        select => [@_],
12        from => [],
13        where => [],
14        limit => undef,
15        offset => undef,
16        order_by => [],
17        op => 'and',
18    }, $class;
19}
20
21sub select {
22
43
0
4294
    my $self = shift;
23
43
43
170
534
    push @{ $self->{select} }, @_;
24
43
223
    $self;
25}
26
27sub from {
28
2132
1
20062
    my $self = shift;
29
2132
2132
6730
20422
    push @{ $self->{from} }, @_;
30
2132
20351
    $self;
31}
32
33sub limit {
34
1896
0
12902
    $_[0]->{limit} = $_[1];
35
1896
9907
    $_[0]
36}
37
38sub offset {
39
9
0
72
    $_[0]->{offset} = $_[1];
40
9
52
    $_[0];
41}
42
43sub order_by {
44
63
0
366
    my $self = shift;
45
63
63
241
739
    push @{ $self->{order_by} }, join(" ", @_);
46
63
445
    $self;
47}
48
49sub op {
50
2
0
23
    $_[0]->{op} = lc($_[1]);
51
2
25
    $_[0];
52}
53
54sub generate {
55
2129
0
9356
    my $self = shift;
56
2129
5994
    my $sql;
57
2129
10266
    local $" = ', ';
58
2129
2129
2129
9221
23311
17457
    $sql .= "select @{ $self->{select} } from @{ $self->{from} }";
59
2129
2129
7721
16154
    my @where = @{ $self->{where} };
60
2129
2106
20830
20184
    my $where = join ' '. $self->{op} . ' ', map { join(' ', @$_) } @where;
61
2129
2034
14210
11196
    if ($where) { $sql .= " where $where" }
62
2129
11354
    my $order_by = $self->{order_by};
63
2129
59
11300
529
    if (@$order_by) { $sql .= " order by @$order_by"; }
64
2129
11135
    my $limit = $self->{limit};
65
2129
1896
12129
11344
    if (defined $limit) { $sql .= " limit $limit"; }
66
2129
11015
    my $offset = $self->{offset};
67
2129
9
9971
55
    if ($offset) { $sql .= " offset $offset"; }
68    ### $sql
69
2129
16899
    return $sql . ";\n";
70}
71
721;
73