| File: | t/17-minisql-select.t |
| Coverage: | 93.6% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 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 | |||||||
| 13 | sub 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 | |||||||
| 22 | sub quote_ident { | ||||||
| 23 | 96 | 992 | qq/"$_[0]"/ | ||||
| 24 | } | ||||||
| 25 | |||||||
| 26 | run { | ||||||
| 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 => \"e, | ||||||
| 48 | quote_ident => \"e_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 | |||||||