package org.aksw.jena_sparql_api.concept_cache.core; import java.util.Iterator; import java.util.stream.Stream; import org.aksw.commons.collections.utils.StreamUtils; import org.aksw.jena_sparql_api.core.QueryExecutionFactory; import org.aksw.jena_sparql_api.util.collection.RangedSupplier; import org.aksw.jena_sparql_api.utils.IteratorResultSetBinding; import org.aksw.jena_sparql_api.utils.QueryUtils; import org.apache.jena.query.Query; import org.apache.jena.query.QueryExecution; import org.apache.jena.query.ResultSet; import org.apache.jena.sparql.algebra.Algebra; import org.apache.jena.sparql.algebra.Op; import org.apache.jena.sparql.engine.binding.Binding; import com.google.common.collect.Range; public class RangedSupplierQuery implements RangedSupplier<Long, Binding>, OpAttribute { protected QueryExecutionFactory qef; protected Query query; public RangedSupplierQuery(QueryExecutionFactory qef, Query query) { super(); this.qef = qef; this.query = query; } @Override public Stream<Binding> apply(Range<Long> range) { Query clone = query.cloneQuery(); QueryUtils.applyRange(clone, range); QueryExecution qe = qef.createQueryExecution(clone); ResultSet rs = qe.execSelect(); Iterator<Binding> it = new IteratorResultSetBinding(rs); Stream<Binding> result = StreamUtils.stream(it); result.onClose(qe::close); return result; // // ClosableIterator<Binding> result = new IteratorClosable<>(it, () -> qe.close()); // return result; } @Override public Op getOp() { Op result = Algebra.compile(query); return result; } // @Override // public <X> X unwrap(Class<X> clazz, boolean reflexive) { // @SuppressWarnings("unchecked") // X result = reflexive && this.getClass().isAssignableFrom(clazz) // ? (X)this // : null; // // return result; // } }