/* * Copyright Aduna (http://www.aduna-software.com/) (c) 2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.repository.sail; import java.util.ArrayList; import info.aduna.iteration.CloseableIteration; import org.openrdf.query.BindingSet; import org.openrdf.query.QueryEvaluationException; import org.openrdf.query.QueryResultUtil; import org.openrdf.query.TupleQuery; import org.openrdf.query.TupleQueryResult; import org.openrdf.query.TupleQueryResultHandler; import org.openrdf.query.TupleQueryResultHandlerException; import org.openrdf.query.algebra.TupleExpr; import org.openrdf.query.impl.TupleQueryResultImpl; import org.openrdf.query.parser.ParsedTupleQuery; import org.openrdf.sail.SailConnection; import org.openrdf.sail.SailException; /** * @author Arjohn Kampman */ public class SailTupleQuery extends SailQuery implements TupleQuery { protected SailTupleQuery(ParsedTupleQuery tupleQuery, SailRepositoryConnection sailConnection) { super(tupleQuery, sailConnection); } @Override public ParsedTupleQuery getParsedQuery() { return (ParsedTupleQuery)super.getParsedQuery(); } public TupleQueryResult evaluate() throws QueryEvaluationException { TupleExpr tupleExpr = getParsedQuery().getTupleExpr(); try { SailConnection sailCon = getConnection().getSailConnection(); CloseableIteration<? extends BindingSet, QueryEvaluationException> bindingsIter = sailCon.evaluate( tupleExpr, getActiveDataset(), getBindings(), getIncludeInferred()); return new TupleQueryResultImpl(new ArrayList<String>(tupleExpr.getBindingNames()), bindingsIter); } catch (SailException e) { throw new QueryEvaluationException(e.getMessage(), e); } } public void evaluate(TupleQueryResultHandler handler) throws QueryEvaluationException, TupleQueryResultHandlerException { TupleQueryResult queryResult = evaluate(); QueryResultUtil.report(queryResult, handler); } }