#!/usr/bin/perl
use strict;
use warnings;
no warnings 'redefine';
use lib qw(. t lib .. ../t ../lib);
use RDF::Query::Util;
use RDF::Query::Federate;
use List::Util qw(first);
################################################################################
# Log::Log4perl::init( \q[
# log4perl.category.rdf.query.util = DEBUG, Screen
# log4perl.category.rdf.query.federate = TRACE, Screen
# log4perl.category.rdf.query.plan.service = DEBUG, Screen
# log4perl.category.rdf.query.plan.triple = TRACE, Screen
# log4perl.category.rdf.query.model = DEBUG, Screen
# log4perl.category.rdf.query.servicedescription = DEBUG, Screen
# log4perl.appender.Screen = Log::Log4perl::Appender::Screen
# log4perl.appender.Screen.stderr = 0
# log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
# ] );
################################################################################
unless (@ARGV) {
print <<"END";
USAGE: perl $0 [-F path/to/service_description.ttl] query.rq
Attempts to optimize a federated SPARQL query using the endpoints described in
the specified service descriptions. Each optimized query plan is printed as
output.
END
exit;
}
my $query = &RDF::Query::Util::cli_make_query or die RDF::Query->error;
my $model = &RDF::Query::Util::cli_make_model;
my $context = RDF::Query::ExecutionContext->new(
bound => {},
model => $model,
query => $query,
optimize => 1,
);
my @plans = $query->query_plan( $context );
my %plans;
foreach my $i (0 .. $#plans) {
my $name = "plan $i";
print "$name: " . $plans[$i]->sse( {}, ' 'x8 ) . "\n";
}