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 UnaryExecutableOpBaseWithBatching
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 createExecutableReqOp(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 with 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 batch of solution mappings to directly create a corresponding bind-join request, this implementation can split the input batch into smaller batch for the requests. On top of that, in case a request operator fails, this implementation automatically reduces the batch size for requests and, then, tries to re-process (with the reduced request batch 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 batch, then these requests are executed sequentially.