Class ExecOpNaiveNestedLoopsJoin
java.lang.Object
se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BaseForExecOps
se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BinaryExecutableOpBase
se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.ExecOpNaiveNestedLoopsJoin
- All Implemented Interfaces:
StatsProvider
,BinaryExecutableOp
,ExecutableOperator
Attention, this is a purely local implementation of the nested loops
join algorithm---nothing fancy, no requests to federation members or
anything. Instead, this algorithm first consumes the whole first input
and materializes it into a list. Thereafter, it performs a local nested
loops join in which the outer loop iterates over the second input and
the inner loop (repeatedly) iterates over the list with the first input.
It is certainly better to use the
ExecOpHashJoin
instead. Instead
of simply putting all left-input solution mappings into a list, the hash
join puts them into a hash index which can than be probed into for each
right-input solution mapping.-
Field Summary
Fields inherited from class se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BinaryExecutableOpBase
timeAtCurrentLeftProcStart, timeAtCurrentRightProcStart
Fields inherited from class se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BaseForExecOps
collectExceptions
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
_processBlockFromChild1
(IntermediateResultBlock input, IntermediateResultElementSink sink, ExecutionContext execCxt) Implementations of this function need to process the given input block coming from the first operand and send the produced result elements (if any) to the given sink.protected void
_processBlockFromChild2
(IntermediateResultBlock input, IntermediateResultElementSink sink, ExecutionContext execCxt) Implementations of this function need to process the given input block coming from the second operand and send the produced result elements (if any) to the given sink.protected void
_wrapUpForChild1
(IntermediateResultElementSink sink, ExecutionContext execCxt) Implementations of this function need to finish up any processing related to the input coming from the first operand and send the remaining result elements (if any) to the given sink.protected void
_wrapUpForChild2
(IntermediateResultElementSink sink, ExecutionContext execCxt) Implementations of this function need to finish up any processing related to the input coming from the second operand and send the remaining result elements (if any) to the given sink.int
Returns the preferred block size of input blocks that are passed to this executable operator from the first operand.int
Returns the preferred block size of input blocks that are passed to this executable operator from the second operand.boolean
Returns true if this operator is implemented based on the assumption that the COMPLETE input from the first operand has been sent to it before input from the second operand is sent.Methods inherited from class se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BinaryExecutableOpBase
createStats, getStats, processBlockFromChild1, processBlockFromChild2, resetStats, wrapUpForChild1, wrapUpForChild2
Methods inherited from class se.liu.ida.hefquin.engine.queryplan.executable.impl.ops.BaseForExecOps
getExceptionsCaughtDuringExecution, recordExceptionCaughtDuringExecution
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface se.liu.ida.hefquin.engine.queryplan.executable.ExecutableOperator
getExceptionsCaughtDuringExecution
-
Field Details
-
inputLHS
-
-
Constructor Details
-
ExecOpNaiveNestedLoopsJoin
public ExecOpNaiveNestedLoopsJoin(boolean collectExceptions)
-
-
Method Details
-
preferredInputBlockSizeFromChild1
public int preferredInputBlockSizeFromChild1()Description copied from interface:BinaryExecutableOp
Returns the preferred block size of input blocks that are passed to this executable operator from the first operand. A query planner may use this number as an optimization hint but it does not have to use it. -
preferredInputBlockSizeFromChild2
public int preferredInputBlockSizeFromChild2()Description copied from interface:BinaryExecutableOp
Returns the preferred block size of input blocks that are passed to this executable operator from the second operand. A query planner may use this number as an optimization hint but it does not have to use it. -
requiresCompleteChild1InputFirst
public boolean requiresCompleteChild1InputFirst()Description copied from interface:BinaryExecutableOp
Returns true if this operator is implemented based on the assumption that the COMPLETE input from the first operand has been sent to it before input from the second operand is sent. An example of an operator that may return true here is a hash join (which first needs to add all result elements from the first operand into its hash table and, then, can start consuming the result elements from the second operand by probing into the hash table). In contrast, a symmetric hash join (which has two hash tables and can consume result elements from both inputs in any order) would return false. Operators that return true here may throw anIllegalStateException
if their methodsBinaryExecutableOp.processBlockFromChild2(IntermediateResultBlock, IntermediateResultElementSink, ExecutionContext)
orBinaryExecutableOp.wrapUpForChild2(IntermediateResultElementSink, ExecutionContext)
are called beforeBinaryExecutableOp.wrapUpForChild1(IntermediateResultElementSink, ExecutionContext)
has been called. -
_processBlockFromChild1
protected void _processBlockFromChild1(IntermediateResultBlock input, IntermediateResultElementSink sink, ExecutionContext execCxt) Description copied from class:BinaryExecutableOpBase
Implementations of this function need to process the given input block coming from the first operand and send the produced result elements (if any) to the given sink. If an exception occurs while processing the input block, this exception needs to either be collected or be thrown, depending on whetherBaseForExecOps.collectExceptions
is set totrue
.- Specified by:
_processBlockFromChild1
in classBinaryExecutableOpBase
-
_wrapUpForChild1
Description copied from class:BinaryExecutableOpBase
Implementations of this function need to finish up any processing related to the input coming from the first operand and send the remaining result elements (if any) to the given sink. If an exception occurs during this process, then this exception needs to either be collected or be thrown, depending on whetherBaseForExecOps.collectExceptions
is set totrue
.- Specified by:
_wrapUpForChild1
in classBinaryExecutableOpBase
-
_processBlockFromChild2
protected void _processBlockFromChild2(IntermediateResultBlock input, IntermediateResultElementSink sink, ExecutionContext execCxt) Description copied from class:BinaryExecutableOpBase
Implementations of this function need to process the given input block coming from the second operand and send the produced result elements (if any) to the given sink. If an exception occurs while processing the input block, this exception needs to either be collected or be thrown, depending on whetherBaseForExecOps.collectExceptions
is set totrue
.- Specified by:
_processBlockFromChild2
in classBinaryExecutableOpBase
-
_wrapUpForChild2
Description copied from class:BinaryExecutableOpBase
Implementations of this function need to finish up any processing related to the input coming from the second operand and send the remaining result elements (if any) to the given sink. If an exception occurs during this process, then this exception needs to either be collected or be thrown, depending on whetherBaseForExecOps.collectExceptions
is set totrue
.- Specified by:
_wrapUpForChild2
in classBinaryExecutableOpBase
-