Condition Coverage

lib/DB/Handy.pm
Criterion Covered Total %
condition 407 710 57.3


and 3 conditions

line !l l&&!r l&&r condition
167 0 0 7 $size and $size > 0
199 0 0 3 $sch and $sch->{'indexes'}
306 2837 12 14 !defined($row->{$cn}) || $row->{$cn} eq '' and defined $sch->{'defaults'}{$cn}
311 6 1 28 defined $row->{$cn} and $row->{$cn} ne ""
354 0 10 70 defined $n and $n == $recsize
397 0 2 17 defined $n and $n == $recsize
725 0 4 28 defined $n and $n == $recsize
746 3 0 0 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
799 25 0 27 $sql =~ /\(\s*SELECT\b/i and $iter++ < $max_depth
944 25 4 1486 $j < $len and $depth > 0
958 0 1 2 $depth > 1 and $p2 =~ /^SELECT\b/i
966 0 2 27 $depth == 0 and not $has_nested
1104 334 0 0 $ch eq "'" and not $in_str
334 0 0 $ch eq "'" and $in_str
266 60 0 $depth == 0 and substr($expr, $i, 5) =~ /^AND\s/i
1144 0 0 6 $conds and @$conds
1163 28 6 2 $plain_sub and not &$plain_sub($row)
1170 0 0 28 $res && $res->{'type'} eq 'rows'
1184 0 0 0 $col_val =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
1190 0 0 0 $found and $op eq "NOT_IN"
1191 0 0 0 not $found and $op eq "IN"
1206 0 0 4 $lhs =~ /^-?\d+\.?\d*$/ && $rhs =~ /^-?\d+\.?\d*$/
1331 0 0 17 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
1358 0 0 0 $w =~ /^$alias\.(\w+)$/ and exists $r->{$1}
1410 204 0 0 $ch eq "'" and not $in_str
204 0 0 $ch eq "'" and $in_str
1494 0 1877 296906 defined $n and $n == $entry_size
1537 29 0 9 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1558 0 0 17 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1579 21 0 19 not $lo_inc and $lo_pos < @$entries
21 10 9 not $lo_inc and $lo_pos < @$entries and $entries->[$lo_pos][0] eq $lo_key
1585 4 1 36 $hi_inc and $p < @$entries
5 18 18 $hi_inc and $p < @$entries and $entries->[$p][0] eq $hi_key
1607 0 37 79 defined $n and $n == $recsize
1622 0 0 161 $conds and @$conds
1636 4 13 26 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1773 2 8 34 $pos < @$entries and $entries->[$pos][0] eq $key
1793 0 0 3 defined $recs and not defined $best_rng
1852 9 76 100 $pos < @$entries and $entries->[$pos][0] eq $key
1924 10 42 407 $pos < @$entries and $entries->[$pos][0] eq $key
2001 0 0 32 $js->{'on_left'} and $js->{'on_right'}
2012 0 0 32 defined $on_r_alias and defined $on_r_col
2040 131 0 0 $use_hash == 0 and not _join_row_matches($lr, $rr, $on_l_alias, $on_l_col, $on_r_alias, $on_r_col)
2117 0 0 57 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
2139 0 4 26 $col_specs and @$col_specs
2211 0 62 326 defined $n and $n == $recsize
2251 0 0 0 defined $lv and defined $rv
2254 0 0 0 $lv =~ /^-?\d+\.?\d*$/ and $rv =~ /^-?\d+\.?\d*$/
2272 0 0 17 $conds and @$conds
2322 0 0 8 $lhs_val =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
2328 4 4 0 $found and $op eq "NOT_IN"
2329 4 0 4 not $found and $op eq "IN"
2333 38 0 55 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
2434 0 26 6 defined $type_kw and $type_kw =~ /LEFT/i
0 25 1 defined $type_kw and $type_kw =~ /RIGHT/i
0 24 1 defined $type_kw and $type_kw =~ /CROSS/i
2483 0 0 17 defined $expr and $expr =~ /\S/
2489 7 0 12 $part =~ /^((?:\w+\.)?\w+)\s*(=|!=|<>|<=|>=|<|>)\s*((?:\w+\.)?\w+)$/i and not $part =~ /'/
2699 2683 0 134 $ch eq "," and $depth == 0
2813 0 4 2 $conds and @$conds
2829 0 0 0 $rv =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
2835 0 0 0 $found and $op eq "NOT_IN"
2836 0 0 0 not $found and $op eq "IN"
2843 0 0 0 defined $$row{$c->{'col'}} and $$row{$c->{'col'}} ne ""
2849 0 0 8 $rv =~ /^-?\d+\.?\d*$/ && defined $cv && $cv =~ /^-?\d+\.?\d*$/
2897 4393 0 0 $expr =~ /^\((.+)\)$/s and not $1 =~ /^\s*SELECT\b/i
2906 0 2 4 defined $v and $v ne ""
2914 0 0 2 defined $va and defined $vb
2915 0 0 2 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3006 0 0 22 defined $lv and defined $rv
3011 0 6 0 $opsym eq '/' || $opsym eq '%' and $r == 0
3043 0 0 0 defined $bv && defined $wv && ($bv =~ /^-?\d+\.?\d*$/ && $wv =~ /^-?\d+\.?\d*$/ ? $bv == $wv : $bv eq $wv)
3059 0 0 35 defined $lv and defined $rv
3060 0 0 35 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
3070 0 0 0 defined $v && $v ne ''
3083 2776 17 17 $ch eq "'" and not $in_q
2776 0 17 $ch eq "'" and $in_q
2502 6 107 $ch eq "," and $d == 0
3122 40183 2 2 $ch eq "'" and not $in_q
40183 0 2 $ch eq "'" and $in_q
2 40181 0 not $in_q and $ch eq "("
2 40181 0 not $in_q and $ch eq ")"
2 0 40181 not $in_q and $d == 0
2 13076 27105 not $in_q and $d == 0 and $i > 0
3148 0 0 349 defined $expr and $expr =~ /\S/
3160 435 0 2 $expr =~ /^\((.+)\)$/s and not $1 =~ /^\s*SELECT\b/i
3177 11811 256 256 $ch eq "'" and not $in_q
11811 0 256 $ch eq "'" and $in_q
761 0 10048 $d == 0 and not $in_q
761 9897 151 $d == 0 and not $in_q and uc substr($expr, $i, $kl) eq $kw
9897 6 145 $d == 0 and not $in_q and uc substr($expr, $i, $kl) eq $kw and $i == 0 || substr($expr, $i - 1, 1) =~ /\s/
6 0 145 $d == 0 and not $in_q and uc substr($expr, $i, $kl) eq $kw and $i == 0 || substr($expr, $i - 1, 1) =~ /\s/ and $i + $kl < $len
6 16 129 $d == 0 and not $in_q and uc substr($expr, $i, $kl) eq $kw and $i == 0 || substr($expr, $i - 1, 1) =~ /\s/ and $i + $kl < $len and substr($expr, $i + $kl, 1) =~ /\s/
3324 0 0 50 $v =~ /^-?\d+\.?\d*$/ && $lo =~ /^-?\d+\.?\d*$/ && $hi =~ /^-?\d+\.?\d*$/
3325 6 8 36 $v >= $lo && $v <= $hi
0 0 0 $v ge $lo && $v le $hi
3336 36 0 1524 $rv =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
3359 622 1369 0 $rhs_expr =~ /^[\w.]+$/ && !($rhs_expr =~ /^-?\d+\.?\d*$/)
3361 611 0 1380 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
3447 0 0 0 $col =~ /^(\w+)\.(\w+)$/ && defined $row->{$2}
3486 3 0 0 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3492 1 0 0 defined $opts->{'offset'} and $opts->{'offset'} > 0
3514 143 0 161 $where_expr =~ /^(\w+)\s*(=|!=|<>|<=|>=|<|>)\s*(?:'([^']*)'|(-?\d+\.?\d*))$/ and not $where_expr =~ /\b(?:OR|AND|NOT|BETWEEN|IN)\b/i
3532 0 0 85 defined $n and $n == $rs
3558 0 0 95 defined $n and $n == $rs
3584 0 0 40 defined $n and $n == $rs
3607 0 0 90 defined $n and $n == $rs
3631 0 0 420 defined $n and $n == $rs
3651 0 281 1577 defined $n and $n == $rs
3668 0 0 426 defined $col_str and defined $rest
3674 81 345 0 $rest =~ /^\s+(\w+)/ and not $1 =~ /^(?:WHERE|GROUP|ORDER|HAVING|LIMIT|OFFSET|INNER|LEFT|RIGHT|JOIN|ON|UNION)$/i
3713 3397 8 8 $ch eq "'" and not $in_q
3397 0 8 $ch eq "'" and $in_q
27 3325 45 not $in_q and $ch eq "("
27 3280 45 not $in_q and $ch eq ")"
27 154 3126 not $in_q and $d == 0
181 2700 426 not $in_q and $d == 0 and uc substr($str, $i, 4) eq "FROM"
2854 0 426 not $in_q and $d == 0 and uc substr($str, $i, 4) eq "FROM" and $i == 0 || substr($str, $i - 1, 1) =~ /\s/
0 426 0 not $in_q and $d == 0 and uc substr($str, $i, 4) eq "FROM" and $i == 0 || substr($str, $i - 1, 1) =~ /\s/ and $i + 4 >= $len || substr($str, $i + 4, 1) =~ /\s/
3760 64 283 47 @$col_specs == 1 && $col_specs->[0][0] eq '*'
3773 65 0 229 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3833 0 25 141 defined $n and $n == $rs
3875 14 0 8 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3918 0 0 4 $a =~ /^-?\d+\.?\d*$/ && $b =~ /^-?\d+\.?\d*$/
3921 0 0 13 $a =~ /^-?\d+\.?\d*$/ && $b =~ /^-?\d+\.?\d*$/
3940 22183 101 101 $ch eq "'" and not $in_q
22183 0 101 $ch eq "'" and $in_q
488 0 21149 $d == 0 and not $in_q
488 21149 0 $d == 0 and not $in_q and $i == 0 || substr($sql, $i - 1, 1) =~ /\s/
3964 4375 0 4 uc substr($sql, $i, 5) eq "UNION" and $i + 5 < $len
4375 0 4 uc substr($sql, $i, 5) eq "UNION" and $i + 5 < $len and substr($sql, $i + 5, 1) =~ /[\s(]/
4359 0 16 uc substr($sql, $i, 9) eq "INTERSECT" and $i + 9 < $len
4359 0 16 uc substr($sql, $i, 9) eq "INTERSECT" and $i + 9 < $len and substr($sql, $i + 9, 1) =~ /[\s(]/
4347 0 12 uc substr($sql, $i, 6) eq "EXCEPT" and $i + 6 < $len
4347 0 12 uc substr($sql, $i, 6) eq "EXCEPT" and $i + 6 < $len and substr($sql, $i + 6, 1) =~ /[\s(]/
3980 0 32 32 $i < $len and substr($sql, $i, 1) =~ /\s/
3982 28 0 4 $kw eq "UNION" and $i + 3 <= $len
28 2 2 $kw eq "UNION" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL"
2 0 2 $kw eq "UNION" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL" and $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
14 0 16 $kw eq "INTERSECT" and $i + 3 <= $len
14 14 2 $kw eq "INTERSECT" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL"
14 2 0 $kw eq "INTERSECT" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL" and $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
16 0 12 $kw eq "EXCEPT" and $i + 3 <= $len
16 9 3 $kw eq "EXCEPT" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL"
9 3 0 $kw eq "EXCEPT" and $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL" and $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
3987 0 2 2 $i < $len and substr($sql, $i, 1) =~ /\s/
3994 0 2 2 $i < $len and substr($sql, $i, 1) =~ /\s/
4001 0 3 3 $i < $len and substr($sql, $i, 1) =~ /\s/
4059 20 2 33 $in_rhs{$k} and not $seen{$k}++
4139 0 17 77 defined $x and $x == $rs
4150 4 1 4 $ix->{'unique'} and exists $$set_exprs{$ix->{'col'}}
4174 0 1 0 defined $row->{$cn} and $row->{$cn} ne ""
4254 0 26 0 $database and !defined($opts->{'AutoUse'}) || $opts->{'AutoUse'}
4273 0 24 2 defined $dsn and $dsn =~ /[=;]/
4295 0 0 160 defined $sql and $sql =~ /\S/
4438 15 147 2 not @bind and @{$self->{'_bind_params'};}
4478 0 17 57 defined $res->{'message'} and $res->{'message'} =~ /(\d+)\s+row/
4518 0 2 80 $data && @$data
4533 2 0 10 $sql =~ /\bFROM\s+(\w+)(?:\s+(?:AS\s+)?(\w+))?\s*(?:WHERE|ORDER|GROUP|LIMIT|OFFSET|$)/is and not $sql =~ /\bJOIN\b/i
4584 687 2 46 $ch eq "," and $depth == 0

or 2 conditions

line l !l condition
73 38 0 $args{'base_dir'} || 'simpledbms_data'
0 38 $args{'db_name'} || ''
794 29 0 $outer_row ||= {}
1149 4 2 $c->{'type'} || ''
1282 0 1 $2 || 'ASC'
1323 1 0 $outer_opts{'order_dir'} || 'asc'
1331 0 0 $va || ''
0 0 $vb || ''
1340 0 4 $outer_opts{'offset'} || 0
1444 1292 1 $val || 0
1970 30 0 $opts ||= {}
1971 30 0 $where_conds ||= []
1997 32 0 $js->{'type'} || 'INNER'
2038 125 26 $right_hash{$lkey} || []
2051 29 6 $right_hash{$lkey} || []
2111 6 0 $opts->{'order_dir'} || 'asc'
2117 0 0 $va || ''
0 0 $vb || ''
2128 1 29 $opts->{'offset'} || 0
2400 1 6 $2 || 'ASC'
2639 1838 19 $v || 0
2953 0 0 eval_expr($a[1], $row) || 0
2980 1 0 eval_expr($ste, $row) || 1
2982 1 0 eval_expr($le, $row) || 0
3482 1 0 $opts->{'order_dir'} || 'asc'
4070 5 3 $rhs_cnt{$k} || 0
3 5 $used{$k} || 0
4095 10 4 $rhs_cnt{$k} || 0
6 8 $removed{$k} || 0
4249 26 0 $database || ''
1 25 $opts->{'RaiseError'} || 0
4275 1 0 $p{'base_dir'} || $p{'dir'} || '.'
4472 80 2 $n || '0E0'
4486 57 17 $affected || '0E0'

or 3 conditions

line l !l&&r !l&&!r condition
306 23 3 2837 !defined($row->{$cn}) || $row->{$cn} eq ''
357 0 12 53 not $where_sub or &$where_sub($row)
498 10 1 90 %nn or %defs
11 0 90 %nn or %defs or %chks
1 0 90 %nn or %defs or %chks or defined $pk
828 0 0 23 not $inner_res or $inner_res->{'type'} eq "error"
837 12 0 11 $prefix =~ /\bIN\s*$/i or $prefix =~ /\bNOT\s+IN\s*$/i
1172 0 0 8 $op eq "IN" or $op eq "NOT_IN"
1207 0 0 4 $cop eq "!=" or $cop eq "<>"
1293 0 0 4 not $inner_res or $inner_res->{'type'} eq "error"
1368 0 0 0 $k =~ /\.\Q$w\E$/ or $k eq $w
1692 2 7 1 $op1 eq ">" or $op1 eq ">="
1731 27 0 0 $part =~ /^(\w+)\s*($OP)\s*($VAL)$/ or $part =~ /^($VAL)\s*($OP)\s*(\w+)$/
1744 0 0 0 $rev{uc $2} || uc $2
1766 0 0 13 $op eq "!=" or $op eq "<>"
1916 0 0 57 $op eq "!=" or $op eq "<>"
1990 30 0 0 defined $cur_rows[0] or not $self->{'_last_err'}
2024 1 0 31 $join_type eq "CROSS" or not defined $on_l_alias
2181 0 0 0 $k =~ /\.\Q$ck\E$/ or $k eq $ck
2286 0 0 0 $k =~ /\.\Q$c->{'lhs_col'}\E$/ or $k eq $c->{'lhs_col'}
2302 0 0 0 $k =~ /\.\Q$c->{'rhs_col'}\E$/ or $k eq $c->{'rhs_col'}
2317 8 0 93 $op eq "IN" or $op eq "NOT_IN"
2335 0 0 12 $op eq "!=" or $op eq "<>"
2820 0 0 8 $op eq "IN" or $op eq "NOT_IN"
2840 0 0 0 not defined $$row{$c->{'col'}} or $$row{$c->{'col'}} eq ""
2850 0 0 4 $op eq "!=" or $op eq "<>"
3011 0 6 0 $opsym eq '/' || $opsym eq '%'
3070 0 0 0 !defined($v) || $v eq ''
3177 12 133 6 $i == 0 || substr($expr, $i - 1, 1) =~ /\s/
3319 9 1 418 $op eq "BETWEEN" or $op eq "NOT_BETWEEN"
3329 41 6 371 $op eq "IN" or $op eq "NOT_IN"
3345 4 1 366 $op eq "LIKE" or $op eq "NOT_LIKE"
3395 1 0 29 @gb_join || $having_join ne '' || $has_agg
3507 11 14 401 @$gb || $having ne '' || grep({$_->[0] =~ /\b(?:COUNT|SUM|AVG|MIN|MAX)\s*\(/is;} @$col_specs)
3535 0 85 0 not $wsub or &$wsub($row)
3561 0 95 0 not $wsub or &$wsub($row)
3587 0 25 15 not $wsub or &$wsub($row)
3610 0 90 0 not $wsub or &$wsub($row)
3634 0 420 0 not $wsub or &$wsub($row)
3654 385 337 844 not $ws or &$ws($row)
3713 0 426 0 $i == 0 || substr($str, $i - 1, 1) =~ /\s/
0 426 0 $i + 4 >= $len || substr($str, $i + 4, 1) =~ /\s/
3836 107 10 15 not $ws or &$ws($row)
3940 487 3892 16770 $i == 0 || substr($sql, $i - 1, 1) =~ /\s/
3982 0 2 0 $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
0 2 0 $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
0 3 0 $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
4039 2 0 30 $sep eq "UNION" or $sep eq ""
4084 17 2 15 $in_rhs{$k} or $seen{$k}++
4142 4 31 41 not $ws or &$ws($row)
4254 25 0 1 !defined($opts->{'AutoUse'}) || $opts->{'AutoUse'}
4261 0 0 0 $DB::Handy::errstr || $res->{'message'}
4276 1 0 0 $p{'database'} || $p{'db'} || $database
4530 12 0 70 $col_str =~ /^\*$/ or $col_str =~ /^\w+\.\*$/