Condition Coverage

lib/DB/Handy.pm
Criterion Covered Total %
condition 334 603 55.3


and 3 conditions

line !l l&&!r l&&r condition
167 0 0 3 $size and $size > 0
199 0 0 3 $sch and $sch->{'indexes'}
306 1169 11 14 !defined($row->{$cn}) || $row->{$cn} eq '' and defined $sch->{'defaults'}{$cn}
311 6 1 32 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
707 0 4 28 defined $n and $n == $recsize
728 3 0 0 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
781 24 0 26 $sql =~ /\(\s*SELECT\b/i and $iter++ < $max_depth
926 24 4 1458 $j < $len and $depth > 0
940 0 1 2 $depth > 1 and $p2 =~ /^SELECT\b/i
948 0 2 26 $depth == 0 and not $has_nested
1086 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
1126 0 0 6 $conds and @$conds
1145 28 6 2 $plain_sub and not &$plain_sub($row)
1152 0 0 28 $res && $res->{'type'} eq 'rows'
1166 0 0 0 $col_val =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
1172 0 0 0 $found and $op eq "NOT_IN"
1173 0 0 0 not $found and $op eq "IN"
1188 0 0 4 $lhs =~ /^-?\d+\.?\d*$/ && $rhs =~ /^-?\d+\.?\d*$/
1313 0 0 17 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
1340 0 0 0 $w =~ /^$alias\.(\w+)$/ and exists $r->{$1}
1392 204 0 0 $ch eq "'" and not $in_str
204 0 0 $ch eq "'" and $in_str
1476 0 388 23429 defined $n and $n == $entry_size
1519 9 0 9 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1540 0 0 17 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1561 12 0 10 not $lo_inc and $lo_pos < @$entries
12 5 5 not $lo_inc and $lo_pos < @$entries and $entries->[$lo_pos][0] eq $lo_key
1567 3 1 16 $hi_inc and $p < @$entries
4 8 8 $hi_inc and $p < @$entries and $entries->[$p][0] eq $hi_key
1589 0 18 79 defined $n and $n == $recsize
1604 0 0 131 $conds and @$conds
1618 3 9 15 $pos < @$entries and $entries->[$pos][0] eq $key_bytes
1742 0 0 29 $js->{'on_left'} and $js->{'on_right'}
1753 0 0 29 defined $on_r_alias and defined $on_r_col
1781 127 0 0 $use_hash == 0 and not _join_row_matches($lr, $rr, $on_l_alias, $on_l_col, $on_r_alias, $on_r_col)
1858 0 0 54 defined $va && $va =~ /^-?\d+\.?\d*$/ && defined $vb && $vb =~ /^-?\d+\.?\d*$/
1880 0 2 25 $col_specs and @$col_specs
1952 0 56 311 defined $n and $n == $recsize
1992 0 0 0 defined $lv and defined $rv
1995 0 0 0 $lv =~ /^-?\d+\.?\d*$/ and $rv =~ /^-?\d+\.?\d*$/
2013 0 0 15 $conds and @$conds
2063 0 0 8 $lhs_val =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
2069 4 4 0 $found and $op eq "NOT_IN"
2070 4 0 4 not $found and $op eq "IN"
2074 38 0 51 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
2175 0 24 5 defined $type_kw and $type_kw =~ /LEFT/i
0 23 1 defined $type_kw and $type_kw =~ /RIGHT/i
0 22 1 defined $type_kw and $type_kw =~ /CROSS/i
2224 0 0 15 defined $expr and $expr =~ /\S/
2230 7 0 10 $part =~ /^((?:\w+\.)?\w+)\s*(=|!=|<>|<=|>=|<|>)\s*((?:\w+\.)?\w+)$/i and not $part =~ /'/
2440 2017 0 99 $ch eq "," and $depth == 0
2554 0 4 2 $conds and @$conds
2570 0 0 0 $rv =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
2576 0 0 0 $found and $op eq "NOT_IN"
2577 0 0 0 not $found and $op eq "IN"
2584 0 0 0 defined $$row{$c->{'col'}} and $$row{$c->{'col'}} ne ""
2590 0 0 8 $rv =~ /^-?\d+\.?\d*$/ && defined $cv && $cv =~ /^-?\d+\.?\d*$/
2638 2686 0 0 $expr =~ /^\((.+)\)$/s and not $1 =~ /^\s*SELECT\b/i
2647 0 2 4 defined $v and $v ne ""
2655 0 0 2 defined $va and defined $vb
2656 0 0 2 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
2747 0 0 22 defined $lv and defined $rv
2752 0 6 0 $opsym eq '/' || $opsym eq '%' and $r == 0
2784 0 0 0 defined $bv && defined $wv && ($bv =~ /^-?\d+\.?\d*$/ && $wv =~ /^-?\d+\.?\d*$/ ? $bv == $wv : $bv eq $wv)
2800 0 0 34 defined $lv and defined $rv
2801 0 0 34 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
2811 0 0 0 defined $v && $v ne ''
2824 2370 17 17 $ch eq "'" and not $in_q
2370 0 17 $ch eq "'" and $in_q
2116 6 87 $ch eq "," and $d == 0
2863 28441 2 2 $ch eq "'" and not $in_q
28441 0 2 $ch eq "'" and $in_q
2 28439 0 not $in_q and $ch eq "("
2 28439 0 not $in_q and $ch eq ")"
2 0 28439 not $in_q and $d == 0
2 7955 20484 not $in_q and $d == 0 and $i > 0
2889 0 0 234 defined $expr and $expr =~ /\S/
2901 263 0 1 $expr =~ /^\((.+)\)$/s and not $1 =~ /^\s*SELECT\b/i
2918 6514 80 80 $ch eq "'" and not $in_q
6514 0 80 $ch eq "'" and $in_q
194 0 5933 $d == 0 and not $in_q
194 5876 57 $d == 0 and not $in_q and uc substr($expr, $i, $kl) eq $kw
5876 6 51 $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 51 $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 35 $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/
3065 0 0 30 $v =~ /^-?\d+\.?\d*$/ && $lo =~ /^-?\d+\.?\d*$/ && $hi =~ /^-?\d+\.?\d*$/
3066 6 2 22 $v >= $lo && $v <= $hi
0 0 0 $v ge $lo && $v le $hi
3077 0 0 93 $rv =~ /^-?\d+\.?\d*$/ && $cv =~ /^-?\d+\.?\d*$/
3100 162 1059 0 $rhs_expr =~ /^[\w.]+$/ && !($rhs_expr =~ /^-?\d+\.?\d*$/)
3102 151 0 1070 $lv =~ /^-?\d+\.?\d*$/ && $rv =~ /^-?\d+\.?\d*$/
3188 0 0 0 $col =~ /^(\w+)\.(\w+)$/ && defined $row->{$2}
3227 3 0 0 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3233 1 0 0 defined $opts->{'offset'} and $opts->{'offset'} > 0
3255 58 0 131 $where_expr =~ /^(\w+)\s*(=|!=|<>|<=|>=|<|>)\s*(?:'([^']*)'|(-?\d+\.?\d*))$/ and not $where_expr =~ /\b(?:OR|AND|NOT|BETWEEN|IN)\b/i
3273 0 0 53 defined $n and $n == $rs
3299 0 0 71 defined $n and $n == $rs
3319 0 199 1169 defined $n and $n == $rs
3336 0 0 262 defined $col_str and defined $rest
3342 35 227 0 $rest =~ /^\s+(\w+)/ and not $1 =~ /^(?:WHERE|GROUP|ORDER|HAVING|LIMIT|OFFSET|INNER|LEFT|RIGHT|JOIN|ON|UNION)$/i
3381 2652 8 8 $ch eq "'" and not $in_q
2652 0 8 $ch eq "'" and $in_q
27 2580 45 not $in_q and $ch eq "("
27 2535 45 not $in_q and $ch eq ")"
27 154 2381 not $in_q and $d == 0
181 2119 262 not $in_q and $d == 0 and uc substr($str, $i, 4) eq "FROM"
2273 0 262 not $in_q and $d == 0 and uc substr($str, $i, 4) eq "FROM" and $i == 0 || substr($str, $i - 1, 1) =~ /\s/
0 262 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/
3428 50 144 36 @$col_specs == 1 && $col_specs->[0][0] eq '*'
3441 65 0 192 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3501 0 25 141 defined $n and $n == $rs
3543 14 0 8 $va =~ /^-?\d+\.?\d*$/ && $vb =~ /^-?\d+\.?\d*$/
3586 0 0 4 $a =~ /^-?\d+\.?\d*$/ && $b =~ /^-?\d+\.?\d*$/
3589 0 0 13 $a =~ /^-?\d+\.?\d*$/ && $b =~ /^-?\d+\.?\d*$/
3608 14743 43 43 $ch eq "'" and not $in_q
14743 0 43 $ch eq "'" and $in_q
246 0 14179 $d == 0 and not $in_q
246 14177 2 $d == 0 and not $in_q and uc substr($sql, $i, 5) eq "UNION"
14177 0 2 $d == 0 and not $in_q and uc substr($sql, $i, 5) eq "UNION" and $i == 0 || substr($sql, $i - 1, 1) =~ /\s/
0 0 2 $d == 0 and not $in_q and uc substr($sql, $i, 5) eq "UNION" and $i == 0 || substr($sql, $i - 1, 1) =~ /\s/ and $i + 5 < $len
0 0 2 $d == 0 and not $in_q and uc substr($sql, $i, 5) eq "UNION" and $i == 0 || substr($sql, $i - 1, 1) =~ /\s/ and $i + 5 < $len and substr($sql, $i + 5, 1) =~ /[\s(]/
3635 0 2 2 $i < $len and substr($sql, $i, 1) =~ /\s/
3638 0 1 1 $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL"
1 0 1 $i + 3 <= $len and uc substr($sql, $i, 3) eq "ALL" and $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
3642 0 1 1 $i < $len and substr($sql, $i, 1) =~ /\s/
3719 0 17 77 defined $x and $x == $rs
3730 5 1 4 $ix->{'unique'} and exists $$set_exprs{$ix->{'col'}}
3754 0 1 0 defined $row->{$cn} and $row->{$cn} ne ""
3834 0 23 0 $database and !defined($opts->{'AutoUse'}) || $opts->{'AutoUse'}
3853 0 21 2 defined $dsn and $dsn =~ /[=;]/
3875 0 0 132 defined $sql and $sql =~ /\S/
4018 14 120 2 not @bind and @{$self->{'_bind_params'};}
4058 0 17 56 defined $res->{'message'} and $res->{'message'} =~ /(\d+)\s+row/
4088 0 1 54 $data && @$data
4105 584 2 35 $ch eq "," and $depth == 0

or 2 conditions

line l !l condition
73 31 0 $args{'base_dir'} || 'simpledbms_data'
0 31 $args{'db_name'} || ''
776 28 0 $outer_row ||= {}
1131 4 2 $c->{'type'} || ''
1264 0 1 $2 || 'ASC'
1305 1 0 $outer_opts{'order_dir'} || 'asc'
1313 0 0 $va || ''
0 0 $vb || ''
1322 0 4 $outer_opts{'offset'} || 0
1426 352 1 $val || 0
1711 27 0 $opts ||= {}
1712 27 0 $where_conds ||= []
1738 29 0 $js->{'type'} || 'INNER'
1779 121 24 $right_hash{$lkey} || []
1792 27 5 $right_hash{$lkey} || []
1852 5 0 $opts->{'order_dir'} || 'asc'
1858 0 0 $va || ''
0 0 $vb || ''
1869 1 26 $opts->{'offset'} || 0
2141 1 5 $2 || 'ASC'
2380 851 18 $v || 0
2694 0 0 eval_expr($a[1], $row) || 0
2721 1 0 eval_expr($ste, $row) || 1
2723 1 0 eval_expr($le, $row) || 0
3223 1 0 $opts->{'order_dir'} || 'asc'
3829 23 0 $database || ''
1 22 $opts->{'RaiseError'} || 0
3855 1 0 $p{'base_dir'} || $p{'dir'} || '.'
4052 54 1 $n || '0E0'
4066 56 17 $affected || '0E0'

or 3 conditions

line l !l&&r !l&&!r condition
306 22 3 1169 !defined($row->{$cn}) || $row->{$cn} eq ''
357 0 12 53 not $where_sub or &$where_sub($row)
498 10 1 55 %nn or %defs
11 0 55 %nn or %defs or %chks
1 0 55 %nn or %defs or %chks or defined $pk
810 0 0 22 not $inner_res or $inner_res->{'type'} eq "error"
819 11 0 11 $prefix =~ /\bIN\s*$/i or $prefix =~ /\bNOT\s+IN\s*$/i
1154 0 0 8 $op eq "IN" or $op eq "NOT_IN"
1189 0 0 4 $cop eq "!=" or $cop eq "<>"
1275 0 0 4 not $inner_res or $inner_res->{'type'} eq "error"
1350 0 0 0 $k =~ /\.\Q$w\E$/ or $k eq $w
1674 2 4 1 $op1 eq ">" or $op1 eq ">="
1731 27 0 0 defined $cur_rows[0] or not $self->{'_last_err'}
1765 1 0 28 $join_type eq "CROSS" or not defined $on_l_alias
1922 0 0 0 $k =~ /\.\Q$ck\E$/ or $k eq $ck
2027 0 0 0 $k =~ /\.\Q$c->{'lhs_col'}\E$/ or $k eq $c->{'lhs_col'}
2043 0 0 0 $k =~ /\.\Q$c->{'rhs_col'}\E$/ or $k eq $c->{'rhs_col'}
2058 8 0 89 $op eq "IN" or $op eq "NOT_IN"
2076 0 0 12 $op eq "!=" or $op eq "<>"
2561 0 0 8 $op eq "IN" or $op eq "NOT_IN"
2581 0 0 0 not defined $$row{$c->{'col'}} or $$row{$c->{'col'}} eq ""
2591 0 0 4 $op eq "!=" or $op eq "<>"
2752 0 6 0 $opsym eq '/' || $opsym eq '%'
2811 0 0 0 !defined($v) || $v eq ''
2918 12 39 6 $i == 0 || substr($expr, $i - 1, 1) =~ /\s/
3060 5 1 250 $op eq "BETWEEN" or $op eq "NOT_BETWEEN"
3070 8 3 239 $op eq "IN" or $op eq "NOT_IN"
3086 4 1 234 $op eq "LIKE" or $op eq "NOT_LIKE"
3136 1 0 26 @gb_join || $having_join ne '' || $has_agg
3248 11 14 237 @$gb || $having ne '' || grep({$_->[0] =~ /\b(?:COUNT|SUM|AVG|MIN|MAX)\s*\(/is;} @$col_specs)
3276 0 53 0 not $wsub or &$wsub($row)
3302 0 71 0 not $wsub or &$wsub($row)
3322 186 272 700 not $ws or &$ws($row)
3381 0 262 0 $i == 0 || substr($str, $i - 1, 1) =~ /\s/
0 262 0 $i + 4 >= $len || substr($str, $i + 4, 1) =~ /\s/
3504 107 10 15 not $ws or &$ws($row)
3608 0 2 0 $i == 0 || substr($sql, $i - 1, 1) =~ /\s/
3638 0 1 0 $i + 3 >= $len || substr($sql, $i + 3, 1) =~ /\s/
3722 4 31 41 not $ws or &$ws($row)
3834 22 0 1 !defined($opts->{'AutoUse'}) || $opts->{'AutoUse'}
3841 0 0 0 $DB::Handy::errstr || $res->{'message'}
3856 1 0 0 $p{'database'} || $p{'db'} || $database