/* * 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); } } }