private void processProbe(LookupSource lookupSource) { verify(probe != null); DriverYieldSignal yieldSignal = operatorContext.getDriverContext().getYieldSignal(); while (!yieldSignal.isSet()) { if (probe.getPosition() >= 0) { if (!joinCurrentPosition(lookupSource, yieldSignal)) { break; } if (!currentProbePositionProducedRow) { currentProbePositionProducedRow = true; if (!outerJoinCurrentPosition()) { break; } } } currentProbePositionProducedRow = false; if (!advanceProbePosition(lookupSource)) { break; } statisticsCounter.recordProbe(joinSourcePositions); joinSourcePositions = 0; } }
@Override public Page getOutput() { if (lookupSource == null) { return null; } // join probe page with the lookup source if (probe != null) { while (joinCurrentPosition()) { if (!advanceProbePosition()) { break; } if (!outerJoinCurrentPosition()) { break; } } } // only flush full pages unless we are done if (pageBuilder.isFull() || (finishing && !pageBuilder.isEmpty() && probe == null)) { Page page = pageBuilder.build(); pageBuilder.reset(); return page; } return null; }