| RDF-Query documentation | Contained in the RDF-Query distribution. |
RDF::Query::Algebra::Sequence - Algebra class for a sequence of algebra operations
This document describes RDF::Query::Algebra::Sequence version 2.907.
Beyond the methods documented below, this class inherits methods from the RDF::Query::Algebra class.
new ( @patterns )Returns a new Sequence structure.
construct_argsReturns a list of arguments that, passed to this class' constructor, will produce a clone of this algebra pattern.
patternsReturns a list of patterns belonging to this sequence.
sseReturns the SSE string for this algebra expression.
as_sparqlReturns the SPARQL string for this algebra expression.
as_hashReturns the query as a nested set of plain data structures (no objects).
typeReturns the type of this algebra expression.
referenced_variablesReturns a list of the variable names used in this algebra expression.
potentially_boundReturns a list of the variable names used in this algebra expression that will bind values during execution.
definite_variablesReturns a list of the variable names that will be bound after evaluating this algebra expression.
clonebind_variables ( \%bound )Returns a new algebra pattern with variables named in %bound replaced by their corresponding bound values.
Gregory Todd Williams <gwilliams@cpan.org>
| RDF-Query documentation | Contained in the RDF-Query distribution. |
# RDF::Query::Algebra::Sequence # -----------------------------------------------------------------------------
package RDF::Query::Algebra::Sequence; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Query::Algebra); use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(refaddr reftype); use Carp qw(carp croak confess); use Time::HiRes qw(gettimeofday tv_interval); use RDF::Trine::Iterator qw(smap swatch); ###################################################################### our ($VERSION); my %AS_SPARQL; BEGIN { $VERSION = '2.907'; } ######################################################################
sub new { my $class = shift; my @patterns = @_; return bless( [ @patterns ] ); }
sub construct_args { my $self = shift; return ($self->patterns); }
sub patterns { my $self = shift; return @$self; }
sub sse { my $self = shift; my $context = shift; my $prefix = shift || ''; my $indent = $context->{indent} || ' '; my @patterns = map { $_->sse( $context ) } $self->patterns; return sprintf( "(sequence\n${prefix}${indent}%s\n${prefix})", join("\n${prefix}${indent}", @patterns) ); }
sub as_sparql { my $self = shift; if (exists $AS_SPARQL{ refaddr( $self ) }) { return $AS_SPARQL{ refaddr( $self ) }; } else { my $context = shift; # if (ref($context)) { # $context = { %$context }; # } my $indent = shift || ''; my @patterns; foreach my $t ($self->patterns) { push(@patterns, $t->as_sparql( $context, $indent )); } my $string = join(" ;\n${indent}", @patterns); $AS_SPARQL{ refaddr( $self ) } = $string; return $string; } }
sub as_hash { my $self = shift; my $context = shift; return { type => lc($self->type), patterns => [ map { $_->as_hash } $self->patterns ], }; }
sub type { return 'SEQUENCE'; }
sub referenced_variables { my $self = shift; return RDF::Query::_uniq(map { $_->referenced_variables } $self->patterns); }
sub potentially_bound { my $self = shift; my @patterns = $self->patterns; return $patterns[ $#patterns ]->potentially_bound; }
sub definite_variables { my $self = shift; my @patterns = $self->patterns; return $patterns[ $#patterns ]->potentially_bound; }
sub clone { my $self = shift; my $class = ref($self); return $class->new( map { $_->clone } $self->patterns ); }
sub bind_variables { my $self = shift; my $class = ref($self); my $bound = shift; return $class->new( map { $_->bind_variables( $bound ) } $self->patterns ); } sub DESTROY { my $self = shift; delete $AS_SPARQL{ refaddr( $self ) }; } 1; __END__