This file is indexed.

/usr/share/perl5/AtteanX/Plan/LDF/Triple.pm is in libatteanx-store-ldf-perl 0.04-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
=pod

=head1 NAME

AtteanX::Plan::LDF::Triple - Plan for evaluation of Linked Data Fragments

=head1 SYNOPSIS

This is typically only constructed by planning hacks deep in the code,
but might look like e.g.:

  use v5.14;
  use AtteanX::Plan::LDF::Triple;
  my $ldf_plan = AtteanX::Plan::LDF::Triple->new(subject => $subject,
                                                        predicate => $predicate,
                                                        object => $object);


=head1 DESCRIPTION

This plan class will aid a query planner that seeks to incorporate
Linked Data Fragments into the query planning.

=cut


package AtteanX::Plan::LDF::Triple;
# Most of the code is shamelessly stolen from Attean::API::Quad, since
# it has very much in common with that module. Unfortunately, this has
# just triple semantics, so it cannot just simply be extended. This
# probably implies that the quad plan should be refactored into some
# roles.

use v5.14;
use warnings;

our $AUTHORITY = 'cpan:KJETILK';
our $VERSION = '0.04';

use Moo;
use Class::Method::Modifiers;
use Attean;
use Carp;
use Scalar::Util qw(blessed reftype);
use namespace::clean;

has 'subject'	=> (is => 'ro', required => 1);
has 'predicate'	=> (is => 'ro', required => 1);
has 'object'	=> (is => 'ro', required => 1);

with 'Attean::API::BindingSubstitutionPlan', 'Attean::API::NullaryQueryTree';
with 'Attean::API::TriplePattern';

around 'BUILDARGS' => sub {
	my $orig		= shift;
	my $class		= shift;
	my $args		= $orig->( $class, @_ );
	if (exists $args->{in_scope_variables}) {
		Carp::confess "in_scope_variables is computed automatically, and must not be specified in the $class constructor";
	}
	
	my %vars;
	foreach my $pos (qw(subject predicate object)) {
		my $term	= $args->{$pos};
		if (blessed($term) and $term->does('Attean::API::Variable')) {
			$vars{$term->value}	= $term;
		}
	}
	
	my @vars	= keys %vars;
	$args->{in_scope_variables}	= [@vars];
	
	return $args;
};

sub plan_as_string {
	my $self	= shift;
	my @nodes	= $self->values;
	my @strings;
	foreach my $t (@nodes) {
		if (ref($t) eq 'ARRAY') {
			my @tstrings	= map { $_->ntriples_string } @$t;
			if (scalar(@tstrings) == 1) {
				push(@strings, @tstrings);
			} else {
				push(@strings, '[' . join(', ', @tstrings) . ']');
			}
		} elsif ($t->does('Attean::API::TermOrVariable')) {
			push(@strings, $t->ntriples_string);
		} else {
			use Data::Dumper;
			die "Unrecognized node in quad pattern: " . Dumper($t);
		}
	}
	return sprintf('LDFTriple { %s }', join(', ', @strings));
}
	
sub substitute_impl {
	my $self	= shift;
	my $model	= shift;
	my $b		= shift;
	my @values	= $self->values;
	foreach my $i (0 .. $#values) {
		my $value	= $values[$i];
		if (reftype($value) eq 'ARRAY') {
			my @values;
			foreach my $value (@{ $value }) {
				my $name	= $value->value;
				if (my $node = $b->value($name)) {
					push(@values, $node);
				} else {
					push(@values, $value);
				}
				$values[$i]	= \@values;
			}
		} elsif ($value->does('Attean::API::Variable')) {
			my $name	= $value->value;
			if (my $node = $b->value($name)) {
				$values[$i]	= $node;
			}
		}
	}
	
	return sub {
		return $model->get_bindings( @values );
	}
}

sub impl {
	my $self	= shift;
	my $model	= shift;
	my @values	= $self->values;
	return sub {
		return $model->get_bindings( @values );
	}
}


1;