Branch Coverage

blib/lib/Attean/SimpleQueryEvaluator.pm
Criterion Covered Total %
branch 131 490 26.7


line true false branch
89 0 65 unless $algebra
95 0 65 if ($algebra->isa('Attean::Algebra::Query') or $algebra->isa('Attean::Algebra::Update')) { }
21 44 elsif ($algebra->isa('Attean::Algebra::BGP')) { }
1 43 elsif ($algebra->isa('Attean::Algebra::Distinct') or $algebra->isa('Attean::Algebra::Reduced')) { }
2 41 elsif ($algebra->isa('Attean::Algebra::Extend')) { }
1 40 elsif ($algebra->isa('Attean::Algebra::Filter')) { }
3 37 elsif ($algebra->isa('Attean::Algebra::OrderBy')) { }
1 36 elsif ($algebra->isa('Attean::Algebra::Service')) { }
3 33 elsif ($algebra->isa('Attean::Algebra::Graph')) { }
0 33 elsif ($algebra->isa('Attean::Algebra::Group')) { }
2 31 elsif ($algebra->isa('Attean::Algebra::Join')) { }
0 31 elsif ($algebra->isa('Attean::Algebra::LeftJoin')) { }
0 31 elsif ($algebra->isa('Attean::Algebra::Minus')) { }
24 7 elsif ($algebra->isa('Attean::Algebra::Path')) { }
3 4 elsif ($algebra->isa('Attean::Algebra::Project')) { }
3 1 elsif ($algebra->isa('Attean::Algebra::Slice')) { }
0 1 elsif ($algebra->isa('Attean::Algebra::Union')) { }
0 1 elsif ($algebra->isa('Attean::Algebra::Ask')) { }
1 0 elsif ($algebra->isa('Attean::Algebra::Construct')) { }
0 0 elsif ($algebra->isa('Attean::Algebra::Table')) { }
99 0 21 if (scalar @triples == 0) { }
121 2 2 !$seen{$str} ? :
143 0 8 if ($val->does("Attean::API::Binding"))
148 8 0 if $val
159 4 0 $t ? :
175 0 13 if (&blessed($av) and $av->does('Attean::API::Binding') and not defined $bv && $bv->does('Attean::API::Binding')) { }
0 13 elsif (&blessed($bv) and $bv->does('Attean::API::Binding') and not defined $av && $av->does('Attean::API::Binding')) { }
180 13 0 $av ? :
181 0 13 if ($@)
185 5 8 if $dirs[$i] == 0
186 12 1 unless $c == 0
199 1 0 if (&blessed($response) and $response->is_success) { }
0 0 elsif ($algebra->silent) { }
201 0 1 unless my $pclass = "Attean"->get_parser("media_type", $type)
214 2 1 if $graph->does("Attean::API::Term")
220 1 1 if $g->value eq $self->default_graph->value
222 4 0 if (my $result = (shift())->join($gr)) { }
237 0 0 &blessed($_) ? :
241 0 0 if (&blessed($v) and $v->isa("Attean::ValueExpression") and $v->value->does("Attean::API::Variable") and $group_terms[$i])
245 0 0 unless exists $groups{$key}
249 0 0 if scalar @keys == 0
263 0 0 if $term
280 0 0 if (my $j = $lhs->join($rhs))
281 0 0 if ($expr_eval->evaluate_expression($expr, $j, $active_graph, {})->ebv)
287 0 0 unless $joined
298 0 0 if (my $j = $lhs->join($rhs)) { }
307 0 0 if (exists $lhs_dom{$rvar})
317 0 0 unless $compatible[$i] == 0 or $disjoint[$i] == 1
320 0 0 if $keep
330 13 11 if $path->isa("Attean::Algebra::PredicatePath")
331 0 11 if ($path->isa('Attean::Algebra::InversePath')) { }
0 11 elsif ($path->isa('Attean::Algebra::AlternativePath')) { }
1 10 elsif ($path->isa('Attean::Algebra::NegatedPropertySet')) { }
1 9 elsif ($path->isa('Attean::Algebra::SequencePath')) { }
4 5 elsif ($path->isa('Attean::Algebra::ZeroOrMorePath') or $path->isa('Attean::Algebra::OneOrMorePath')) { }
5 0 elsif ($path->isa('Attean::Algebra::ZeroOrOnePath')) { }
348 0 1 if $s->does("Attean::API::Variable")
349 1 0 if $o->does("Attean::API::Variable")
352 0 1 unless $q
357 0 1 if (scalar @children == 1) { }
368 1 0 $i == $#children ? :
381 3 1 if ($s->does('Attean::API::TermOrTriple') and $o->does('Attean::API::Variable')) { }
1 0 elsif ($s->does('Attean::API::Variable') and $o->does('Attean::API::Variable')) { }
0 0 elsif ($s->does('Attean::API::Variable') and $o->does('Attean::API::TermOrTriple')) { }
383 3 0 if ($path->isa('Attean::Algebra::ZeroOrMorePath')) { }
415 0 0 if $v->equals($o)
438 9 0 $t ? :
443 2 1 if $algebra->offset > 0
444 2 1 if $algebra->limit >= 0
456 0 0 $result ? :
465 1 1 unless $r
466 2 0 $t ? :
471 0 3 $_->does('Attean::API::TriplePattern') ? :
475 0 1 unless (&all(sub {
514 2 94 if (not $self->ground_blanks and $v->does('Attean::API::Blank')) { }
515 1 1 unless (exists $$blanks{$v->value})
533 0 6 if exists $$v{$term->as_string}
561 2 3 if ($s_term and $o_term) { }
1 2 elsif ($s_term) { }
1 1 elsif ($o_term) { }
563 1 1 if $s->equals($o)
621 0 127 if ($expr->isa('Attean::ExistsExpression')) { }
88 39 elsif ($expr->isa('Attean::ValueExpression')) { }
0 39 elsif ($expr->isa('Attean::UnaryExpression')) { }
35 4 elsif ($expr->isa('Attean::BinaryExpression')) { }
0 4 elsif ($expr->isa('Attean::FunctionExpression')) { }
0 4 elsif ($expr->isa('Attean::AggregateExpression')) { }
4 0 elsif ($expr->isa('Attean::CastExpression')) { }
629 0 0 $iter->next ? :
633 29 59 if ($node->does('Attean::API::Variable')) { }
641 0 0 if ($op eq '!') { }
0 0 elsif ($op eq '-' or $op eq '+') { }
644 0 0 $term->ebv ? :
649 0 0 unless &blessed($term) and $term->does("Attean::API::NumericLiteral")
658 9 26 if ($op eq '&&') { }
9 17 elsif ($op eq '||') { }
17 0 elsif ($op =~ m[^(?:[-+*/])$]u) { }
0 0 elsif ($op =~ /^!?=$/u) { }
0 0 elsif ($op =~ /^[<>]=?$/u) { }
663 1 8 unless $lbv or $rbv
664 1 1 unless $lbv or $rbv->ebv
665 1 1 unless $rbv or $lbv->ebv
666 2 4 unless $lbv and $rbv
667 1 3 $lbv->ebv && $rbv->ebv ? :
673 3 6 if $lbv and $lbv->ebv
675 2 4 unless $rbv
676 2 2 if $rbv->ebv
677 1 1 if $lbv
684 1 31 unless &blessed($_) and $_->does("Attean::API::NumericLiteral")
693 0 0 unless &blessed($_) and $_->does("Attean::API::TermOrTriple")
695 0 0 if ($lhs->does('Attean::API::Binding')) { }
700 0 0 if $op eq "!="
701 0 0 $ok ? :
708 0 0 unless $_->does("Attean::API::TermOrTriple")
709 0 0 if $_->does("Attean::API::IRI")
713 0 0 if $c < 0 and $op =~ /<=?/u or $c > 0 and $op =~ />=?/u or $c == 0 and $op =~ /=/u
727 0 0 if ($func eq 'IF') { }
0 0 elsif ($func eq 'IN' or $func eq 'NOTIN') { }
0 0 elsif ($func eq 'COALESCE') { }
729 0 0 $term->ebv ? :
731 0 0 if $func eq "NOTIN"
735 0 0 if (my $value = eval {
736 0 0 if $term->equals($value)
743 0 0 if $@
744 0 0 if $t
750 0 0 if ($func =~ /^(STR)$/u) { }
0 0 elsif ($func =~ /^(SUBJECT|PREDICATE|OBJECT)$/u) { }
0 0 elsif ($func =~ /^([UI]RI)$/u) { }
0 0 elsif ($func eq 'BNODE') { }
0 0 elsif ($func eq 'LANG') { }
0 0 elsif ($func eq 'LANGMATCHES') { }
0 0 elsif ($func eq 'DATATYPE') { }
0 0 elsif ($func eq 'BOUND') { }
0 0 elsif ($func eq 'RAND') { }
0 0 elsif ($func eq 'ABS') { }
0 0 elsif ($func =~ /^(?:CEIL|FLOOR)$/u) { }
0 0 elsif ($func eq 'ROUND') { }
0 0 elsif ($func eq 'CONCAT') { }
0 0 elsif ($func eq 'SUBSTR') { }
0 0 elsif ($func eq 'STRLEN') { }
0 0 elsif ($func eq 'REPLACE') { }
0 0 elsif ($func =~ /^[UL]CASE$/u) { }
0 0 elsif ($func eq 'ENCODE_FOR_URI') { }
0 0 elsif ($func eq 'CONTAINS') { }
0 0 elsif ($func eq 'STRSTARTS' or $func eq 'STRENDS') { }
0 0 elsif ($func eq 'STRBEFORE' or $func eq 'STRAFTER') { }
0 0 elsif ($func =~ /^(?:YEAR|MONTH|DAY|HOURS|MINUTES)$/u) { }
0 0 elsif ($func eq 'SECONDS') { }
0 0 elsif ($func eq 'TZ' or $func eq 'TIMEZONE') { }
0 0 elsif ($func eq 'NOW') { }
0 0 elsif ($func =~ /^(?:STR)?UUID$/u) { }
0 0 elsif ($func =~ /^(MD5|SHA1|SHA256|SHA384|SHA512)$/u) { }
0 0 elsif ($func eq 'STRLANG') { }
0 0 elsif ($func eq 'STRDT') { }
0 0 elsif ($func eq 'SAMETERM') { }
0 0 elsif ($func =~ /^IS([UI]RI|BLANK|LITERAL|NUMERIC|TRIPLE)$/u) { }
0 0 elsif ($func eq 'REGEX') { }
0 0 elsif ($func eq 'INVOKE') { }
757 0 0 $expr->has_base ? :
760 0 0 if (scalar @operands)
762 0 0 if (my $b = $row_cache->{'bnodes'}{$name}) { }
772 0 0 unless $operands[0]->does("Attean::API::Literal")
776 0 0 if ($match eq '*') { }
778 0 0 $lang ? :
780 0 0 I18N::LangTags::is_dialect_of($lang, $match) ? :
785 0 0 $operands[0] ? :
792 0 0 $func eq 'CEIL' ? :
800 0 0 unless $n->does("Attean::API::Literal")
801 0 0 if ($n->datatype->value ne 'http://www.w3.org/2001/XMLSchema#string') { }
0 0 elsif ($n->language) { }
805 0 0 if (defined $lang and $lang ne $n->language) { }
816 0 0 if ($all_lang and $lang) { }
0 0 elsif ($all_str) { }
825 0 0 scalar(@args == 1) ? :
831 0 0 unless &blessed($node) and $node->does("Attean::API::Literal")
832 0 0 unless &blessed($pat) and $pat->does("Attean::API::Literal")
833 0 0 unless &blessed($rep) and $rep->does("Attean::API::Literal")
834 0 0 if $node->datatype and $node->datatype->value ne "http://www.w3.org/2001/XMLSchema#string"
836 0 0 if index($pattern, "(?{") != -1 or index($pattern, "(??{") != -1
837 0 0 if index($replace, "(?{") != -1 or index($replace, "(??{") != -1
847 0 0 $func eq 'UCASE' ? :
853 0 0 if $node->language and $pat->language and $node->language ne $pat->language
854 0 0 index($lit, $plit) >= 0 ? :
857 0 0 if ($func eq 'STRENDS') { }
859 0 0 rindex($lit, $plit) == $pos ? :
861 0 0 index($lit, $plit) == 0 ? :
866 0 0 unless &blessed($node) and $node->does("Attean::API::Literal")
867 0 0 unless &blessed($substr) and $substr->does("Attean::API::Literal")
868 0 0 if $node->datatype and $node->datatype->value ne "http://www.w3.org/2001/XMLSchema#string"
872 0 0 if ($lhs_simple and $rhs_simple) { }
0 0 elsif ($node->language and $substr->language and $node->language eq $substr->language) { }
0 0 elsif ($node->language and $rhs_simple) { }
885 0 0 if ($i < 0) { }
888 0 0 if ($func eq 'STRBEFORE') { }
904 0 0 if ($tz->is_floating)
905 0 0 if $func eq "TZ"
908 0 0 if $func eq "TZ" and $tz->is_utc
909 0 0 if ($tz) { }
913 0 0 $func eq 'TZ' ? :
914 0 0 if ($offset < 0)
920 0 0 if ($offset >= 3600)
922 0 0 if $h > 0
926 0 0 if ($offset >= 60)
928 0 0 if $m > 0
934 0 0 if $s > 0 or $duration eq "PT"
936 0 0 $func eq 'TZ' ? :
940 0 0 if $func eq "TZ"
947 0 0 if $func eq "STRUUID"
956 0 0 unless &blessed($str) and $str->does("Attean::API::Literal") and &blessed($lang) and $lang->does("Attean::API::Literal")
957 0 0 unless $str->datatype->value eq "http://www.w3.org/2001/XMLSchema#string" and not $str->language
960 0 0 unless $operands[0]->does("Attean::API::Literal") and not $operands[0]->language
961 0 0 if (my $dt = $operands[0]->datatype)
962 0 0 unless $dt->value eq "http://www.w3.org/2001/XMLSchema#string"
964 0 0 unless $operands[1]->does("Attean::API::IRI")
969 0 0 unless &blessed($operands[0]) and &blessed($operands[1])
970 0 0 if ($a->compare($b))
973 0 0 if ($a->does('Attean::API::Binding')) { }
975 0 0 $ok ? :
978 0 0 $ok ? :
981 0 0 $operands[0]->does("Attean::API::$type_roles{$1}") ? :
984 0 0 $value =~ /$pattern/u ? :
988 0 0 unless (ref $func)
998 0 0 if ($agg eq 'COUNT') { }
0 0 elsif ($agg =~ /^(?:SAMPLE|MIN|MAX|SUM|AVG|GROUP_CONCAT)$/u) { }
0 0 elsif ($agg eq 'CUSTOM') { }
999 0 0 if ($child) { }
1004 0 0 if ($expr->distinct)
1018 0 0 if ($agg eq 'SAMPLE') { }
0 0 elsif ($agg eq 'MIN' or $agg eq 'MAX') { }
0 0 elsif ($agg eq 'SUM' or $agg eq 'AVG') { }
0 0 elsif ($agg eq 'GROUP_CONCAT') { }
1024 0 0 $agg eq 'MIN' ? :
1030 0 0 if not $t and $agg eq "MIN"
1031 0 0 unless $t
1032 0 0 if not $extrema or $extrema->compare($t) == $expect
1044 0 0 if ($expr->distinct)
1045 0 0 if $seen{$term->as_string}++
1047 0 0 if ($term->does('Attean::API::NumericLiteral')) { }
1054 0 0 if ($agg eq "AVG")
1055 0 0 !$count ? :
1067 0 0 if ($expr->distinct)
1068 0 0 &blessed($term) ? :
0 0 if $seen{&blessed($term) ? $term->as_string : ""}++
1078 0 0 unless ($data)
1106 4 0 if $cast->does("Attean::API::CanonicalizingLiteral")