| line | % | coverage | condition |
| 136 | 67 | | $self->param("per_page") // $DEFAULT_PER_PAGE |
| 139 | 100 | | $self->param("page") // 1 |
| 189 | 80 | | A | B | C | D | dec |
|---|
| 0 | 0 | 0 | 0 | 0 | | 0 | 0 | 0 | 1 | 1 | | 0 | 0 | 1 | X | 1 | | 0 | 1 | X | X | 1 | | 1 | X | X | X | 1 |
| $host eq "localhost" or $host =~ /\A127\./u or $host eq "0.0.0.0" or $host eq "::1" |
| 224 | 100 | | defined $url and length $url |
| 272 | 33 | | $platform // $fallback |
| 446 | 100 | | $c && $all{$c} |
| 488 | 100 | | $col // "" |
| 100 | | length($col // "") and defined $op and length $op |
| 489 | 100 | | $val //= "" |
| 492 | 100 | | $_->{$col} // "" |
| 546 | 100 | | $row->{$_} // "" |
| 586 | 100 | | $source && $source->can('dbi_source') && $source->dbi_source |
| 596 | 50 | | $col // "" |
| 25 | | length($col // "") and defined $op and length $op |
| 597 | 50 | | $val //= "" |
| 605 | 100 | | $op eq "eq" or $op eq "ne" |
| 674 | 67 | | defined $v and length $v |
| 677 | 67 | | $is_acct_neg and $n =~ /\A\d/u |
| 698 | 33 | | $source and $source->can("aggregate") |
| 699 | 67 | | $fn eq "count" or $fn eq "count_distinct" |
| 713 | 50 | | $records // [] |
| 715 | 67 | | defined $v and length $v |
| 729 | 33 | | defined $str and length $str |
| 731 | 20 | | A | B | C | D | dec |
|---|
| 0 | X | X | X | 0 | | 1 | 0 | X | X | 0 | | 1 | 1 | 0 | X | 0 | | 1 | 1 | 1 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 |
| defined $fn and defined $as and length $fn and length $as |
| 1005 | 50 | | $row->{$_} // "" |
| 1022 | 100 | | $_ // "" |
| 1638 | 67 | | defined $table and $table =~ /$TABLE_NAME_RE/u |
| 1649 | 50 | | $source and $source->sqlite_tables and @{$source->sqlite_tables;} > 1 |
| 1673 | 50 | | $records //= [] |
| 1683 | 100 | | $self->param("back2_label") // "Back" |
| 1753 | 50 | | ($self->param("path") // $ENV{'HOME'}) // "/" |
| 67 | | $self->param("path") // $ENV{'HOME'} |
| 1755 | 100 | | defined $dir and -d $dir |
| 1909 | 0 | | $records //= [] |
| 1914 | 0 | | $self->param("back2_label") // "Back" |
| 0 | | _safe_back_url($self->param("back")) // "/" |
| 0 | | $self->param("back_label") // "Home" |
| 1969 | 50 | | $records //= [] |
| 1974 | 50 | | $self->param("back2_label") // "Back" |
| 2004 | 100 | | defined $file and -f $file and $file->basename =~ /$EXT_RE/u |
| 2020 | 50 | | $self->param("back_label") // "Back" |
| 2028 | 80 | | A | B | C | D | dec |
|---|
| 0 | X | X | X | 0 | | 1 | 0 | X | X | 0 | | 1 | 1 | 0 | X | 0 | | 1 | 1 | 1 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 |
| not defined $it and $source and $source->sqlite_tables and @{$source->sqlite_tables;} > 1 |
| 2045 | 50 | | $self->param("back2_label") // "Back" |
| 2064 | 50 | | $records //= [] |
| 2071 | 100 | | $self->param("back2_label") // "Back" |
| 2140 | 100 | | $self->param("url") // "" |
| 2141 | 100 | | $self->param("table_index") // 0 |
| 2162 | 67 | | $@ or not $source |
| 50 | | $@ // "unknown error" |
| 2165 | 50 | | $@ // "empty result" |
| 2177 | 100 | | $self->param("back2_label") // "Back" |
| 2251 | 100 | | defined $table_name or defined $path |
| 2252 | 100 | | $self->param("spec") // "" |
| 2261 | 100 | | defined $table_name and $table_name =~ /$TABLE_NAME_RE/u |
| 2262 | 50 | | $self->app->config->{'data_dir'} // "data" |
| 2269 | 50 | | $2 // "" |
| 2278 | 50 | | defined $file and -f $file and $file->basename =~ /$EXT_RE/u |
| 2289 | 0 | | eval {
do {
$source->fetch_all
}
} // [] |
| 2349 | 100 | | $self->param("l") // "" |
| 2358 | 33 | | $self->app->config("join_max_rows") // $DEFAULT_JOIN_MAX_ROWS |
| 2359 | 50 | | $self->param("jtype") // "left" |
| 2365 | 25 | | defined $right_spec and defined $left_key and defined $right_key |
| 2395 | 100 | | $self->param("dir") // "asc" |
| 2414 | 50 | | $records //= [] |
| 2417 | 67 | | defined $sort and not grep({$_ eq $sort;} @columns) |
| 2431 | 100 | | $self->param("back2_label") // "Back" |
| 2514 | 100 | | $self->param("l") // "" |
| 2529 | 50 | | $left_recs //= [] |
| 2540 | 50 | | eval {
do {
$csrc->fetch_all
}
} // [] |
| 2553 | 50 | | $self->every_param("f") // [] |
| 2561 | 100 | | $self->param("dir") // "asc" |
| 2562 | 67 | | defined $sort and grep {$_ eq $sort;} @columns |
| 2564 | 50 | | $Database::BI::Controller::Dashboard::b->{$sort} // "" |
| 50 | | $Database::BI::Controller::Dashboard::a->{$sort} // "" |
| 2587 | 100 | | $self->param("back2_label") // "Back" |
| 2680 | 50 | | $self->stash("schema_warnings") // [] |
| 2686 | 100 | | $self->param("format") // "csv" |
| 2766 | 50 | | $self->param("dir") // "" |
| 2767 | 50 | | $self->param("filename") // "" |
| 2770 | 100 | | defined $dest_dir and -d $dest_dir |
| 2780 | 67 | | $filename and $filename =~ /\.json\z/iu |
| 100 | | $filename and $filename =~ /\.csv\z/iu |
| 100 | | $filename and $filename =~ /\.sql\z/iu |
| 2855 | 50 | | ($self->param("path") // $ENV{'HOME'}) // "/" |
| 67 | | $self->param("path") // $ENV{'HOME'} |
| 2857 | 100 | | defined $dir and -d $dir |
| 2923 | 100 | | defined $path and length $path |
| 2933 | 100 | | defined $file and -f $file and $file->basename =~ /$EXT_RE/u |
| 2953 | 50 | | $tbls // [] |
| 3029 | 67 | | $upload and $upload->filename |
| 3041 | 67 | | $self->req->is_limit_exceeded or $upload->size > $MAX_UPLOAD_BYTES |
| 3051 | 67 | | $filename and $filename =~ /$EXT_RE/u |
| 3074 | 100 | | $ok and -f $dest |
| 3104 | 50 | | -s $file // 0 |
| 3109 | 0 | | -s $entry // 0 |
| 3133 | 100 | | $self->param("x") // "" |
| 3134 | 100 | | $self->param("y") // "" |
| 3135 | 100 | | $self->param("series") // "" |
| 3136 | 100 | | _safe_back_url($self->param("back")) // "/" |
| 3138 | 50 | | $self->param("back2_label") // "" |
| 3140 | 100 | | length $x_col and length $y_col |
| 3170 | 50 | | $row->{$x_col} // "" |
| 3171 | 50 | | $row->{$y_col} // "" |
| 3172 | 50 | | $row->{$series_col} // "" |
| 3173 | 25 | | length $x and length $y and length $grp |
| 3204 | 50 | | $row->{$x_col} // "" |
| 3205 | 100 | | $row->{$y_col} // "" |
| 3206 | 67 | | length $x and length $y |
| 3224 | 50 | | $self->every_param("f") // [] |
| 3226 | 60 | | A | B | C | D | dec |
|---|
| 0 | X | X | X | 0 | | 1 | 0 | X | X | 0 | | 1 | 1 | 0 | X | 0 | | 1 | 1 | 1 | 0 | 0 | | 1 | 1 | 1 | 1 | 1 |
| not $ENV{'BI_FORCE_PERL_AGG'} and $src and not $has_filter and _measure_pushable($src, "avg", $y_col, $records) |
| 3238 | 25 | | not $@ and $ref and @$ref |
| 3262 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 3281 | 100 | | $self->param("cat") // "" |
| 3282 | 100 | | $self->param("val") // "" |
| 3284 | 100 | | _safe_back_url($self->param("back")) // "/" |
| 3286 | 50 | | $self->param("back2_label") // "" |
| 3288 | 100 | | length $cat_col and length $val_col |
| 3310 | 67 | | $count_mode or $col_set{$val_col} |
| 3318 | 50 | | $row->{$val_col} // "" |
| 3339 | 50 | | $self->param("topn") // 0 |
| 3340 | 33 | | $topn_n > 0 and @$agg_rows > $topn_n |
| 3341 | 0 | | $Database::BI::Controller::Dashboard::a->{'value'} // 0 |
| 0 | | $Database::BI::Controller::Dashboard::b->{'value'} // 0 |
| 3343 | 0 | | $_->{$cat_col} // "" |
| 3345 | 0 | | $_->{$cat_col} // "" |
| 3354 | 0 | | @$other and defined $other->[0]{'value'} |
| 3369 | 50 | | $self->param("scheme") // "tableau10" |
| 3385 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 3458 | 100 | | $self->param("x") // "" |
| 3459 | 100 | | $self->param("y") // "" |
| 3460 | 100 | | $self->param("val") // "" |
| 3461 | 50 | | $self->param("scheme") // "YlOrRd" |
| 3463 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 3465 | 50 | | $self->param("back2_label") // "" |
| 3467 | 100 | | length $x_col and length $y_col |
| 3488 | 67 | | length $val_col and not $col_set{$val_col} |
| 3496 | 100 | | $row->{$x_col} // (next) |
| 3497 | 50 | | $row->{$y_col} // (next) |
| 3498 | 33 | | length $x and length $y |
| 3522 | 100 | | $grid{$raw_x}{$_} // 0 |
| 3549 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 3619 | 100 | | $self->param("cat") // "" |
| 3620 | 100 | | $self->param("val") // "" |
| 3621 | 100 | | $self->param("orient") // "vertical" |
| 3622 | 100 | | $self->param("sort") // "none" |
| 3623 | 50 | | $self->param("max") // 0 |
| 3624 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 3626 | 50 | | $self->param("back2_label") // "" |
| 3648 | 100 | | $val_col eq '__count__' || !length($val_col) |
| 3650 | 100 | | $count_mode or $col_set{$val_col} |
| 3664 | 100 | | $self->param("topn") // 0 |
| 3665 | 67 | | $topn_n > 0 and @$agg_rows > $topn_n |
| 3666 | 50 | | $Database::BI::Controller::Dashboard::a->{'value'} // 0 |
| 50 | | $Database::BI::Controller::Dashboard::b->{'value'} // 0 |
| 3668 | 50 | | $_->{$cat_col} // "" |
| 3670 | 50 | | $_->{$cat_col} // "" |
| 3679 | 33 | | @$other and defined $other->[0]{'value'} |
| 3692 | 67 | | $sort eq 'value' || $sort eq 'label' |
| 3715 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 3794 | 100 | | $self->param("col") // "" |
| 3795 | 100 | | $self->param("prefix") // "" |
| 3796 | 100 | | $self->param("l") // "" |
| 3808 | 33 | | _safe_back_url($self->param('back')) || $self->_spec_to_url($left_spec) |
| 3821 | 50 | | $row->{$col} // "" |
| 3827 | 67 | | $key_col ||= $columns->[0] // "" |
| 3834 | 100 | | $row->{$key_col} // "" |
| 3911 | 100 | | $prefix_to_rows{$prefix} // [] |
| 3915 | 50 | | $Database::BI::Controller::Dashboard::a->{$key_col} // "" |
| 3916 | 50 | | $Database::BI::Controller::Dashboard::b->{$key_col} // "" |
| 3918 | 50 | | $bn // 0 |
| 0 | | $Database::BI::Controller::Dashboard::a->{$key_col} // "" |
| 0 | | $Database::BI::Controller::Dashboard::b->{$key_col} // "" |
| 50 | | $an // 0 |
| 3970 | 100 | | defined $spec and length $spec |
| 3978 | 50 | | $self->app->config->{'data_dir'} // "data" |
| 3993 | 75 | | defined $file and -f $file and $file->basename =~ /\.(?:sql|sqlite|sqlite3|db)\z/iu |
| 4006 | 0 | | $hostport //= "localhost:6379" |
| 4028 | 0 | | defined $password and length $password |
| 4029 | 0 | | defined $db_idx and int $db_idx > 0 |
| 4034 | 0 | | $cursor ne 0 and @all_keys < 200 |
| 4037 | 0 | | $batch // [] |
| 4062 | 50 | | $tnames // [] |
| 4112 | 50 | | $self->param("l") // "" |
| 4116 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 4118 | 50 | | $self->param("back2_label") // "" |
| 4120 | 100 | | $self->param("rows") // "" |
| 4124 | 50 | | $self->every_param("m") // [] |
| 4131 | 100 | | $self->param("cols") // "" |
| 4144 | 100 | | $self->param("totals") // "" |
| 4145 | 50 | | $self->param("scheme") // "" |
| 4146 | 50 | | $self->param("max_cols") // 0 |
| 4147 | 100 | | $self->param("format") // "" |
| 4176 | 67 | | defined $m->{'col'} and length $m->{'col'} |
| 4194 | 67 | | defined $m->{'col'} && length $m->{'col'} |
| 4202 | 50 | | $row->{$_} // "" |
| 4203 | 50 | | $row->{$_} // "" |
| 4206 | 50 | | $row->{$_} // "" |
| 4210 | 50 | | $row->{$_} // "" |
| 4220 | 50 | | $self->every_param("h") // [] |
| 4253 | 100 | | $self->param("topn") // 0 |
| 4254 | 100 | | $self->param("topn_col") // "" |
| 4256 | 67 | | $topn_n > 0 and @row_key_order > $topn_n |
| 4258 | 67 | | length $topn_col and not $m_aliases{$topn_col} |
| 4268 | 50 | | $cells{$b}{$_}{$sort_as} // 0 |
| 4270 | 50 | | $cells{$a}{$_}{$sort_as} // 0 |
| 4281 | 50 | | $r->{$_} // "" |
| 4288 | 33 | | defined $m->{'col'} && length $m->{'col'} |
| 4294 | 0 | | $row->{$_} // "" |
| 4316 | 33 | | defined $m->{'col'} && length $m->{'col'} |
| 4326 | 50 | | $r->{$_} // "" |
| 4339 | 50 | | $c->{$_} // "" |
| 4359 | 33 | | $max_cols_n > 0 and @col_key_order > $max_cols_n |
| 4364 | 0 | | $cells{$_}{$b}{$first_as} // 0 |
| 4369 | 0 | | $cells{$_}{$a}{$first_as} // 0 |
| 0 | | $col_subtotals{$b}{$first_as} // 0 |
| 0 | | $col_subtotals{$a}{$first_as} // 0 |
| 4396 | 67 | | $format and $format =~ /\A(?:csv|sqlite|sql|json|xlsx)\z/u |
| 4401 | 50 | | $row_combos{$rk}{$_} // "" |
| 4402 | 0 | | $col_combos{$ck}{$_} // "" |
| 4403 | 50 | | $cells{$rk}{$ck}{$_->{'as'}} // "" |
| 4410 | 0 | | $format eq "sqlite" or $format eq "sql" |
| 4424 | 0 | | $rec->{$_} // "" |
| 4460 | 50 | | $col_combos{$ck}{$_} // "" |
| 4468 | 50 | | $cells{$rk}{$ck} // {} |
| 4473 | 50 | | $row_subtotals{$rk} // {} |
| 4480 | 0 | | $self->param("back_label") // "Back to table" |
| 33 | | $back2 // $back |
| 0 | | $back2_lbl || 'Back' |
| 50 | | $self->param("back_label") // "Back to table" |
| 4521 | 100 | | $self->param("l") // "" |
| 4525 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 4527 | 50 | | $self->param("back2_label") // "" |
| 4590 | 0 | | $self->param("back_label") // "Back to table" |
| 33 | | $back2 // $back |
| 0 | | $back2_lbl || 'Back' |
| 50 | | $self->param("back_label") // "Back to table" |
| 4613 | 100 | | $self->param("l") // "" |
| 4614 | 50 | | $self->param("name") // "" |
| 4615 | 100 | | $self->param("expr") // "" |
| 4633 | 50 | | $self->param("l") // "" |
| 4634 | 50 | | $self->param("name") // "" |
| 4646 | 100 | | $self->param("l") // "" |
| 4651 | 100 | | $models->{'fields'}{$spec} // {} |
| 4659 | 50 | | $self->param("l") // "" |
| 4660 | 50 | | $self->param("col") // "" |
| 4661 | 50 | | $self->param("group") // "" |
| 4662 | 50 | | $self->every_param("values") // [] |
| 4678 | 50 | | $self->param("l") // "" |
| 4679 | 50 | | $self->param("col") // "" |
| 4680 | 50 | | $self->param("group") // "" |
| 4686 | 33 | | length $col and length $group_name |
| 4698 | 50 | | $self->param("l") // "" |
| 4703 | 50 | | $models->{'groups'}{$spec} // {} |
| 4714 | 100 | | $self->param("l") // "" |
| 4715 | 50 | | $self->param("col") // "" |
| 4716 | 50 | | $self->param("pattern") // "" |
| 4736 | 50 | | $self->param("l") // "" |
| 4737 | 100 | | $self->param("col") // "" |
| 4755 | 100 | | $self->param("l") // "" |
| 4760 | 100 | | $models->{'date_patterns'}{$spec} // {} |
| 4768 | 100 | | $self->param("x") // "" |
| 4769 | 100 | | $self->param("y") // "" |
| 4770 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 4772 | 50 | | $self->param("back2_label") // "" |
| 4793 | 50 | | $row->{$x_col} // "" |
| 4794 | 50 | | $row->{$y_col} // "" |
| 4795 | 33 | | defined $xv and defined $yv |
| 4796 | 0 | | $row->{$_} // "" |
| 4821 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 4843 | 100 | | $self->param("cat") // "" |
| 4844 | 100 | | $self->param("seg") // "" |
| 4845 | 100 | | $self->param("val") // "" |
| 4846 | 50 | | $self->param("orient") // "v" |
| 4847 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 4849 | 50 | | $self->param("back2_label") // "" |
| 4868 | 67 | | !length($val_col) || $val_col eq '__count__' |
| 4870 | 67 | | $count_mode or $col_set{$val_col} |
| 4875 | 50 | | $row->{$cat_col} // "" |
| 4876 | 50 | | $row->{$seg_col} // "" |
| 4877 | 33 | | length $cat and length $seg |
| 4883 | 50 | | $row->{$val_col} // "" |
| 4884 | 50 | | $v // 0 |
| 4891 | 50 | | $totals{$cat}{$seg} // 0 |
| 4915 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 4935 | 100 | | $self->param("x") // "" |
| 4936 | 100 | | $self->param("bar") // "" |
| 4937 | 100 | | $self->param("line") // "" |
| 4938 | 50 | | $self->param("bar_label") // "" |
| 4939 | 50 | | $self->param("line_label") // "" |
| 4940 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 4942 | 50 | | $self->param("back2_label") // "" |
| 4966 | 50 | | $row->{$x_col} // "" |
| 4969 | 50 | | $row->{$bar_col} // "" |
| 4970 | 50 | | $row->{$line_col} // "" |
| 4971 | 50 | | $bv // 0 |
| 4972 | 50 | | $lv // 0 |
| 4978 | 50 | | $line_sum{$_} // 0 |
| 50 | | $bar_sum{$_} // 0 |
| 4989 | 33 | | $bar_label || $bar_col |
| 4990 | 33 | | $line_label || $line_col |
| 5002 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 5022 | 100 | | $self->param("cat") // "" |
| 5023 | 50 | | $self->param("val") // "" |
| 5024 | 50 | | $self->param("scheme") // "tableau10" |
| 5025 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 5027 | 50 | | $self->param("back2_label") // "" |
| 5044 | 33 | | !length($val_col) || $val_col eq '__count__' |
| 5046 | 33 | | $count_mode or $col_set{$val_col} |
| 5059 | 50 | | $self->param("topn") // 0 |
| 5060 | 33 | | $topn_n > 0 and @$agg_rows > $topn_n |
| 5061 | 0 | | $Database::BI::Controller::Dashboard::a->{'value'} // 0 |
| 0 | | $Database::BI::Controller::Dashboard::b->{'value'} // 0 |
| 5063 | 0 | | $_->{$cat_col} // "" |
| 5065 | 0 | | $_->{$cat_col} // "" |
| 5074 | 0 | | @$other and defined $other->[0]{'value'} |
| 5101 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |
| 5123 | 100 | | $self->param("col") // "" |
| 5124 | 100 | | $self->param("bins") // 20 |
| 5125 | 50 | | _safe_back_url($self->param("back")) // "/" |
| 5127 | 50 | | $self->param("back2_label") // "" |
| 5146 | 50 | | $row->{$col} // "" |
| 5173 | 0 | | $back2_lbl || 'Back' |
| 33 | | $back2 // $back |