Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,77 +21,74 @@

package org.apache.jena.sparql.engine.iterator;

import org.apache.jena.atlas.io.IndentedWriter ;
import org.apache.jena.atlas.lib.Lib ;
import org.apache.jena.sparql.engine.ExecutionContext ;
import org.apache.jena.sparql.engine.Plan ;
import org.apache.jena.sparql.engine.QueryIterator ;
import org.apache.jena.sparql.serializer.SerializationContext ;
import org.apache.jena.atlas.io.IndentedWriter;
import org.apache.jena.atlas.lib.Lib;
import org.apache.jena.sparql.engine.ExecutionContext;
import org.apache.jena.sparql.engine.Plan;
import org.apache.jena.sparql.engine.QueryIterator;
import org.apache.jena.sparql.serializer.SerializationContext;

/**
* This class marks a QueryIter that takes two QueryIterators as input. */
public abstract class QueryIter2 extends QueryIter
{
private QueryIterator leftInput ;
private QueryIterator rightInput ;

public QueryIter2(QueryIterator left, QueryIterator right, ExecutionContext execCxt)
{
super(execCxt) ;
this.leftInput = left ;
this.rightInput = right ;
* This class marks a QueryIter that takes two QueryIterators as input.
*/
public abstract class QueryIter2 extends QueryIter {
private QueryIterator leftInput;
private QueryIterator rightInput;

public QueryIter2(QueryIterator left, QueryIterator right, ExecutionContext execCxt) {
super(execCxt);
this.leftInput = left;
this.rightInput = right;
}
protected QueryIterator getLeft() { return leftInput ; }
protected QueryIterator getRight() { return rightInput ; }

protected QueryIterator getLeft() { return leftInput ; }
protected QueryIterator getRight() { return rightInput ; }

@Override
protected final
void closeIterator()
{
closeSubIterator() ;
performClose(leftInput) ;
performClose(rightInput) ;
leftInput = null ;
rightInput = null ;
protected final void closeIterator() {
closeSubIterator();
performClose(leftInput);
performClose(rightInput);
leftInput = null;
rightInput = null;
}

@Override
protected final
void requestCancel()
{
requestSubCancel() ;
performRequestCancel(leftInput) ;
performRequestCancel(rightInput) ;
protected final void requestCancel() {
requestSubCancel();
performRequestCancel(leftInput);
performRequestCancel(rightInput);
}

/** Cancellation of the query execution is happening */
protected abstract void requestSubCancel() ;

/** Pass on the close method - no need to close the left or right QueryIterators passed to the QueryIter2 constructor */
protected abstract void closeSubIterator() ;

protected abstract void requestSubCancel();

/**
* Pass on the close method - no need to close the left or right QueryIterators
* passed to the QueryIter2 constructor
*/
protected abstract void closeSubIterator();

// Do better
@Override
public void output(IndentedWriter out, SerializationContext sCxt)
{
out.println(Lib.className(this)) ;
out.incIndent() ;

out.print(Plan.startMarker) ;
out.incIndent() ;
getLeft().output(out, sCxt) ;
out.decIndent() ;
//out.ensureStartOfLine() ;
out.println(Plan.finishMarker) ;

out.print(Plan.startMarker) ;
out.incIndent() ;
getRight().output(out, sCxt) ;
out.decIndent() ;
//out.ensureStartOfLine() ;
out.println(Plan.finishMarker) ;

out.decIndent() ;
public void output(IndentedWriter out, SerializationContext sCxt) {
out.println(Lib.className(this));
out.incIndent();

out.print(Plan.startMarker);
out.incIndent();
getLeft().output(out, sCxt);
out.decIndent();
// out.ensureStartOfLine() ;
out.println(Plan.finishMarker);

out.print(Plan.startMarker);
out.incIndent();
getRight().output(out, sCxt);
out.decIndent();
// out.ensureStartOfLine() ;
out.println(Plan.finishMarker);

out.decIndent();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,30 @@
import org.apache.jena.sparql.engine.binding.Binding;

/** QueryIterator that calls a list of abort actions when a cancel happens. */
public class QueryIterAbortable extends QueryIterPlainWrapper
{
final private QueryIterator originalInput ;
private List<Abortable> killList ;
public class QueryIterAbortable extends QueryIterPlainWrapper {
final private QueryIterator originalInput;
private List<Abortable> killList;

// The original input needs closing as well.
public QueryIterAbortable(Iterator<Binding> iterBinding, List<Abortable> killList, QueryIterator originalInput, ExecutionContext execCxt)
{
super(iterBinding, execCxt) ;
this.originalInput = originalInput ;
this.killList = killList ;
public QueryIterAbortable(Iterator<Binding> iterBinding, List<Abortable> killList, QueryIterator originalInput,
ExecutionContext execCxt) {
super(iterBinding, execCxt);
this.originalInput = originalInput;
this.killList = killList;
}

@Override
protected void closeIterator()
{
protected void closeIterator() {
if ( originalInput != null )
originalInput.close();
super.closeIterator() ;
super.closeIterator();
}

@Override
protected void requestCancel()
{
protected void requestCancel() {
if ( killList != null )
for ( Abortable it : killList )
it.abort() ;
it.abort();
if ( originalInput != null )
originalInput.cancel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,4 @@ private static Binding convert(Var var, Triple triple, Binding binding) {
protected void details(IndentedWriter out, SerializationContext sCxt) {
out.print(this.getClass().getSimpleName()+": ["+var+"] " + triple);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,63 +21,59 @@

package org.apache.jena.sparql.engine.iterator;

import java.util.Iterator ;
import java.util.Iterator;

import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.graph.Node ;
import org.apache.jena.sparql.ARQInternalErrorException ;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.engine.ExecutionContext ;
import org.apache.jena.sparql.engine.QueryIterator ;
import org.apache.jena.sparql.engine.binding.Binding ;
import org.apache.jena.atlas.logging.Log;
import org.apache.jena.graph.Node;
import org.apache.jena.sparql.ARQInternalErrorException;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.engine.ExecutionContext;
import org.apache.jena.sparql.engine.QueryIterator;
import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.binding.BindingBuilder;

/**
* Yield new bindings, with a fixed parent, with values from an iterator.
* Parent must not have variables in common with the iterator stream.
* Yield new bindings, with a fixed parent, with values from an iterator. Parent must
* not have variables in common with the iterator stream.
*/
public class QueryIterCommonParent extends QueryIterConvert
{
public QueryIterCommonParent(QueryIterator input, Binding binding, ExecutionContext execCxt)
{
super(input, new ConverterExtend(binding) , execCxt) ;
public class QueryIterCommonParent extends QueryIterConvert {
public QueryIterCommonParent(QueryIterator input, Binding binding, ExecutionContext execCxt) {
super(input, new ConverterExtend(binding), execCxt);
}

// Extend (with checking) an iterator stream of binding to have a common parent.
static class ConverterExtend implements QueryIterConvert.Converter
{
private Binding parentBinding ;
static class ConverterExtend implements QueryIterConvert.Converter {
private Binding parentBinding;

ConverterExtend(Binding parent) { parentBinding = parent ; }
ConverterExtend(Binding parent) {
parentBinding = parent;
}

@Override
public Binding convert(Binding b)
{
public Binding convert(Binding b) {
if ( parentBinding == null || parentBinding.isEmpty() )
return b ;
return b;

// This is the result.
BindingBuilder b2 = Binding.builder(parentBinding) ;
BindingBuilder b2 = Binding.builder(parentBinding);

// Copy the resultSet bindings to the combined result binding with checking.
for ( Iterator<Var> iter = b.vars() ; iter.hasNext(); )
{
// Copy the resultSet bindings to the combined result binding with
// checking.
for ( Iterator<Var> iter = b.vars() ; iter.hasNext() ; ) {
Var v = iter.next();
Node n = b.get(v) ;
if ( b2.contains(v) )
{
Node n2 = b2.get(v) ;
Node n = b.get(v);
if ( b2.contains(v) ) {
Node n2 = b2.get(v);
if ( n2.equals(n) )
Log.warn(this, "Binding already for "+v+" (same value)" ) ;
else
{
Log.error(this, "Binding already for "+v+" (different values)" ) ;
throw new ARQInternalErrorException("Incompatible bindings for "+v) ;
Log.warn(this, "Binding already for " + v + " (same value)");
else {
Log.error(this, "Binding already for " + v + " (different values)");
throw new ARQInternalErrorException("Incompatible bindings for " + v);
}
}
b2.add(v, n) ;
b2.add(v, n);
}
return b2.build() ;
return b2.build();
}
}
}
Loading
Loading