Class BaseForExecOpBindJoinWithRequestOps<QueryType extends Query,MemberType extends FederationMember>

All Implemented Interfaces:
StatsProvider, ExecutableOperator, UnaryExecutableOp
Direct Known Subclasses:
BaseForExecOpBindJoinSPARQL, ExecOpBindJoinBRTPF

public abstract class BaseForExecOpBindJoinWithRequestOps<QueryType extends Query,MemberType extends FederationMember> extends BaseForExecOpBindJoin<QueryType,MemberType>
A generic implementation of the bind join algorithm that uses executable request operators for performing the requests to the federation member. The implementation is generic in the sense that it works with any type of request operator. Each concrete implementation that extends this base class needs to implement the createExecutableRequestOperator(Iterable) function to create the request operators with the types of requests that are specific to that concrete implementation. This implementation is capable of separating out each input solution mapping that assigns a blank node to any of the join variables. Then, such solution mappings are not even considered when creating the requests because they cannot have any join partners in the results obtained from the federation member. Of course, in case the algorithm is used under outer-join semantics these solution mappings are still returned to the output (without joining them with anything). Another capability of this implementation is that, instead of simply using every input block of solution mappings to directly create a corresponding bind-join request, this implementation can split the input block into smaller blocks for the requests. On top of that, in case a request operator fails, this implementation automatically reduces the block size for requests and, then, tries to re-process (with the reduced request block size) the input solution mappings for which the request operator failed. A potential downside of the latter capability is that, if this algorithm has to execute multiple requests per input block, then these requests are executed sequentially.
  • Field Details

    • useOuterJoinSemantics

      protected final boolean useOuterJoinSemantics
    • varsInPatternForFM

      protected final Set<org.apache.jena.sparql.core.Var> varsInPatternForFM
    • requestBlockSize

      protected int requestBlockSize
      The number of solution mappings that this operator uses for each of the bind join requests. This number may be adapted at runtime.
    • minimumRequestBlockSize

      protected static final int minimumRequestBlockSize
      The minimum value to which requestBlockSize can be reduced.
      See Also:
    • requestBlockSizeWasReduced

      protected boolean requestBlockSizeWasReduced
    • numberOfRequestOpsUsed

      protected int numberOfRequestOpsUsed
    • statsOfFirstReqOp

      protected ExecutableOperatorStats statsOfFirstReqOp
    • statsOfLastReqOp

      protected ExecutableOperatorStats statsOfLastReqOp
  • Constructor Details

    • BaseForExecOpBindJoinWithRequestOps

      public BaseForExecOpBindJoinWithRequestOps(QueryType query, MemberType fm, boolean useOuterJoinSemantics, Set<org.apache.jena.sparql.core.Var> varsInPatternForFM, boolean collectExceptions)
      Parameters:
      varsInPatternForFM - may be used by sub-classes to provide the set of variables that occur in the graph pattern that the bind join evaluates at the federation member; sub-classes that cannot extract this set in their constructor may pass null as value for this argument; if provided, this implementation can filter out input solution mappings that contain blank nodes for the join variables and, thus, cannot be joined with the solution mappings obtained via the requests
    • BaseForExecOpBindJoinWithRequestOps

      public BaseForExecOpBindJoinWithRequestOps(QueryType query, MemberType fm, boolean useOuterJoinSemantics, boolean collectExceptions)
  • Method Details