File Coverage

blib/lib/WQS/SPARQL/Query/Count.pm
Criterion Covered Total %
statement 25 28 89.2
branch 3 6 50.0
condition n/a
subroutine 7 7 100.0
pod 3 3 100.0
total 38 44 86.3


line stmt bran cond sub pod time code
1             package WQS::SPARQL::Query::Count;
2              
3 5     5   348979 use strict;
  5         49  
  5         139  
4 5     5   26 use warnings;
  5         10  
  5         160  
5              
6 5     5   2263 use Class::Utils qw(set_params);
  5         62543  
  5         98  
7 5     5   345 use Error::Pure qw(err);
  5         12  
  5         1500  
8              
9             sub new {
10 3     3 1 267 my ($class, @params) = @_;
11              
12             # Create object.
13 3         12 my $self = bless {}, $class;
14              
15             # Process parameters.
16 3         18 set_params($self, @params);
17              
18 3         28 return $self;
19             }
20              
21             sub count_item {
22 1     1 1 11 my ($self, $property, $item) = @_;
23              
24 1 50       7 if ($property !~ m/^P\d+$/ms) {
25 0         0 err "Bad property '$property'.";
26             }
27 1 50       5 if ($item !~ m/^Q\d+$/ms) {
28 0         0 err "Bad item '$item'.";
29             }
30              
31 1         5 my $sparql = <<"END";
32             SELECT (COUNT(?item) as ?count) WHERE {
33             ?item wdt:$property wd:$item
34             }
35             END
36              
37 1         3 return $sparql;
38             }
39              
40             sub count_value {
41 1     1 1 10 my ($self, $property, $value) = @_;
42              
43 1 50       6 if ($property !~ m/^P\d+$/ms) {
44 0         0 err "Bad property '$property'.";
45             }
46              
47 1         6 my $sparql = <<"END";
48             SELECT (COUNT(?item) as ?count) WHERE {
49             ?item wdt:$property '$value'
50             }
51             END
52              
53 1         2 return $sparql;
54             }
55              
56             1;
57              
58             __END__