Attean
view release on metacpan or search on metacpan
lib/Attean/API/Query.pm view on Meta::CPAN
=item * L<Attean::API::BinaryQueryTree>
=cut
package Attean::API::BinaryQueryTree 0.038 {
use Moo::Role;
sub arity { return 2 }
with 'Attean::API::QueryTree';
}
=item * L<Attean::API::PropertyPath>
=cut
package Attean::API::PropertyPath 0.038 {
use Moo::Role;
with 'Attean::API::QueryTree';
requires 'as_string';
requires 'as_sparql';
}
=item * L<Attean::API::UnaryPropertyPath>
=cut
package Attean::API::UnaryPropertyPath 0.038 {
use Types::Standard qw(ConsumerOf);
use Moo::Role;
sub arity { return 1 }
# has 'path' => (is => 'ro', isa => ConsumerOf['Attean::API::PropertyPath'], required => 1);
sub prefix_name { "" }
sub postfix_name { "" }
sub as_string {
my $self = shift;
my ($path) = @{ $self->children };
my $pstr = $path->as_string;
if ($path->does('Attean::API::UnaryPropertyPath')) {
$pstr = "($pstr)";
}
my $str = sprintf("%s%s%s", $self->prefix_name, $pstr, $self->postfix_name);
return $str;
}
sub algebra_as_string {
my $self = shift;
return "Property Path " . $self->prefix_name . $self->postfix_name;
}
with 'Attean::API::PropertyPath', 'Attean::API::UnaryQueryTree';
}
=item * L<Attean::API::NaryPropertyPath>
=cut
package Attean::API::NaryPropertyPath 0.038 {
use Types::Standard qw(ArrayRef ConsumerOf);
use Moo::Role;
# has 'children' => (is => 'ro', isa => ArrayRef[ConsumerOf['Attean::API::PropertyPath']], required => 1);
requires 'separator';
sub as_string {
my $self = shift;
my @children = @{ $self->children };
if (scalar(@children) == 1) {
return $children[0]->as_string;
} else {
return sprintf("(%s)", join($self->separator, map { $_->as_string } @children));
}
}
sub algebra_as_string {
my $self = shift;
return "Property Path " . $self->separator;
}
with 'Attean::API::PropertyPath';
}
=item * L<Attean::API::UnionScopeVariables>
=cut
package Attean::API::UnionScopeVariables 0.038 {
use Moo::Role;
sub in_scope_variables {
my $self = shift;
my $set = Set::Scalar->new();
foreach my $c (@{ $self->children }) {
$set->insert( $c->in_scope_variables );
}
return $set->elements;
}
}
=item * L<Attean::API::IntersectionScopeVariables>
=cut
package Attean::API::IntersectionScopeVariables 0.038 {
use Moo::Role;
sub in_scope_variables {
my $self = shift;
my @c = @{ $self->children };
return unless scalar(@c);
my $set = Set::Scalar->new(shift(@c)->in_scope_variables);
foreach my $c (@c) {
my $rhs = Set::Scalar->new($c->in_scope_variables);
$set = $set->intersection($rhs);
}
return $set->elements;
}
}
1;
=back
=head1 BUGS
Please report any bugs or feature requests to through the GitHub web interface
at L<https://github.com/kasei/attean/issues>.
( run in 0.607 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )