/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.repository.sail;
import info.aduna.iteration.CloseableIteration;
import org.openrdf.query.BindingSet;
import org.openrdf.query.BooleanQuery;
import org.openrdf.query.Dataset;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.algebra.TupleExpr;
import org.openrdf.query.parser.ParsedBooleanQuery;
import org.openrdf.sail.SailConnection;
import org.openrdf.sail.SailException;
/**
* @author Arjohn Kampman
*/
public class SailBooleanQuery extends SailQuery implements BooleanQuery {
protected SailBooleanQuery(ParsedBooleanQuery tupleQuery, SailRepositoryConnection sailConnection) {
super(tupleQuery, sailConnection);
}
@Override
public ParsedBooleanQuery getParsedQuery()
{
return (ParsedBooleanQuery)super.getParsedQuery();
}
public boolean evaluate()
throws QueryEvaluationException
{
ParsedBooleanQuery parsedBooleanQuery = getParsedQuery();
TupleExpr tupleExpr = parsedBooleanQuery.getTupleExpr();
Dataset dataset = getDataset();
if (dataset == null) {
// No external dataset specified, use query's own dataset (if any)
dataset = parsedBooleanQuery.getDataset();
}
try {
SailConnection sailCon = getConnection().getSailConnection();
CloseableIteration<? extends BindingSet, QueryEvaluationException> bindingsIter = sailCon.evaluate(
tupleExpr, dataset, getBindings(), getIncludeInferred());
try {
return bindingsIter.hasNext();
}
finally {
bindingsIter.close();
}
}
catch (SailException e) {
throw new QueryEvaluationException(e.getMessage(), e);
}
}
}