File Coverage

File:t/17-minisql-select.t
Coverage:93.6%

linestmtbrancondsubpodtimecode
1# vi:filetype=
2
3
1
1
1
32
4
12
use Test::Base;
4
5
1
1
1
16
4
12
use Smart::Comments;
6
1
1
1
16
4
12
use lib 'lib';
7
1
1
1
14
4
18
use MiniSQL::Select;
8
9#plan tests => 3 * blocks();
10
11
1
13
plan 'no_plan';
12
13sub quote {
14
35
200
    my $s = shift;
15
35
0
233
0
    if (!defined $s) { $s = '' }
16
35
167
    $s =~ s/\n/{NEW_LINE}/g;
17
35
151
    $s =~ s/\r/{RETURN}/g;
18
35
143
    $s =~ s/\t/{TAB}/g;
19
35
369
    '$y$' . $s . '$y$';
20}
21
22sub quote_ident {
23
96
992
    qq/"$_[0]"/
24}
25
26run {
27
41
211
    my $block = shift;
28
41
275
    my $name = $block->name;
29
30
41
1711
    my %in_vars;
31
41
292
    my $in_vars = $block->in_vars;
32
41
1825
    if (defined $in_vars) {
33
7
91
        my @ln = split /\n+/, $in_vars;
34
14
120
        map {
35
7
47
            my ($var, $val) = split /=/, $_, 2;
36
14
125
            $in_vars{$var} = $val;
37        } @ln;
38    }
39
40
41
480
    my $select = MiniSQL::Select->new;
41
41
292
    my $sql = $block->sql or die "$name - No --- sql section found.\n";
42
41
1838
    my $res;
43
41
155
    eval {
44
41
798
        $res = $select->parse(
45            $sql,
46            {
47                quote => \&quote,
48                quote_ident => \&quote_ident,
49                vars => \%in_vars,
50            }
51        );
52    };
53
41
469
    my $error = $block->error || '';
54
41
2161
    $error =~ s/^\s+$//g;
55
41
404
    is $@, $error, "$name - parse ok";
56
41
39070
    my (@models, @cols, @vars, @unbound);
57
41
436
    if ($res) {
58
34
39
34
217
1170
411
        @models = grep { defined $_ && $_ ne '' } @{ $res->{models} };
59
34
46
34
270
1327
437
        @cols = grep { defined $_ && $_ ne '' } @{ $res->{columns} };
60
34
28
34
275
700
444
        @vars = grep { defined $_ && $_ ne '' } @{ $res->{vars} };
61
34
8
34
244
129
433
        @unbound = grep { defined $_ && $_ ne '' } @{ $res->{unbound} };
62    }
63
41
501
    my $ex_models = $block->models;
64
41
2578
    if (defined $ex_models) {
65
26
290
        is join(' ', @models), $block->models, "$name - model list ok";
66    }
67
41
24537
    my $ex_cols = $block->cols;
68
41
2843
    if (defined $ex_cols) {
69
26
461
        is join(' ', @cols), $block->cols, "$name - model cols ok";
70    }
71
41
23972
    if (defined $block->out) {
72
34
2529
        is $res->{sql}, $block->out, "$name - sql emittion ok";
73    }
74
41
31858
    my $ex_vars = $block->vars;
75
41
2851
    if (defined $ex_vars) {
76
8
160
        is join(' ', @vars), $ex_vars, "$name - var list ok";
77    }
78
41
7858
    my $ex_unbound = $block->unbound;
79
41
885
    if (defined $ex_unbound) {
80
10
176
        is join(' ', @unbound), $ex_unbound, "$name - unbound var list ok";
81    }
82
1
168
};
83