Class JoinExecutorBase<T>

  • All Implemented Interfaces:
    AutoCloseable, org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>, org.eclipse.rdf4j.common.iteration.Iteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>

    public abstract class JoinExecutorBase<T>
    extends org.eclipse.rdf4j.common.iteration.LookAheadIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>
    Base class for any join parallel join executor. Note that this class extends LookAheadIteration and thus any implementation of this class is applicable for pipelining when used in a different thread (access to shared variables is synchronized).
    Author:
    Andreas Schwarte
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected org.eclipse.rdf4j.query.BindingSet bindings  
      protected boolean closed
      Deprecated.
      Use AbstractCloseableIteration.isClosed() instead.
      protected boolean finished
      Deprecated.
      Use isFinished() instead.
      protected org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> leftIter  
      protected static int NEXT_JOIN_ID
      Deprecated.
      No replacement, don't use static shared int variables.
      protected org.eclipse.rdf4j.query.algebra.TupleExpr rightArg  
      protected org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> rightIter  
      protected QueueCursor<org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>> rightQueue  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected JoinExecutorBase​(org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> leftIter, org.eclipse.rdf4j.query.algebra.TupleExpr rightArg, org.eclipse.rdf4j.query.BindingSet bindings)  
    • Field Detail

      • NEXT_JOIN_ID

        protected static int NEXT_JOIN_ID
        Deprecated.
        No replacement, don't use static shared int variables.
      • rightArg

        protected final org.eclipse.rdf4j.query.algebra.TupleExpr rightArg
      • bindings

        protected final org.eclipse.rdf4j.query.BindingSet bindings
      • leftIter

        protected final org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> leftIter
      • rightIter

        protected volatile org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> rightIter
      • closed

        protected volatile boolean closed
        Deprecated.
        Use AbstractCloseableIteration.isClosed() instead.
      • finished

        protected volatile boolean finished
        Deprecated.
        Use isFinished() instead.
      • rightQueue

        protected final QueueCursor<org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>> rightQueue
    • Constructor Detail

      • JoinExecutorBase

        protected JoinExecutorBase​(org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> leftIter,
                                   org.eclipse.rdf4j.query.algebra.TupleExpr rightArg,
                                   org.eclipse.rdf4j.query.BindingSet bindings)
                            throws org.eclipse.rdf4j.query.QueryEvaluationException
        Throws:
        org.eclipse.rdf4j.query.QueryEvaluationException
    • Method Detail

      • run

        public final void run()
      • handleBindings

        protected abstract void handleBindings()
                                        throws Exception
        Implementations must implement this method to handle bindings. Use the following as a template while (!closed && leftIter.hasNext()) { // your code } and add results to rightQueue. Note that addResult() is implemented synchronized and thus thread safe. In case you can guarantee sequential access, it is also possible to directly access rightQueue
        Throws:
        Exception
      • addResult

        public void addResult​(org.eclipse.rdf4j.common.iteration.CloseableIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException> res)
      • done

        public void done()
      • getNextElement

        public T getNextElement()
                         throws org.eclipse.rdf4j.query.QueryEvaluationException
        Specified by:
        getNextElement in class org.eclipse.rdf4j.common.iteration.LookAheadIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>
        Throws:
        org.eclipse.rdf4j.query.QueryEvaluationException
      • handleClose

        public void handleClose()
                         throws org.eclipse.rdf4j.query.QueryEvaluationException
        Overrides:
        handleClose in class org.eclipse.rdf4j.common.iteration.LookAheadIteration<T,​org.eclipse.rdf4j.query.QueryEvaluationException>
        Throws:
        org.eclipse.rdf4j.query.QueryEvaluationException
      • isFinished

        public boolean isFinished()
        Gets whether this executor is finished or aborted.
        Returns:
        true if this executor is finished or aborted