@Override public long getNextJoinPosition(long currentPosition) { return values.getNextJoinPosition(currentPosition, -1, EMPTY_PAGE); }
@Override public long getNextJoinPosition(long currentJoinPosition, int probePosition, Page allProbeChannelsPage) { return lookupSource.getNextJoinPosition(currentJoinPosition, probePosition, allProbeChannelsPage); }
@Override public long getNextJoinPosition(long currentJoinPosition, int probePosition, Page allProbeChannelsPage) { int partition = decodePartition(currentJoinPosition); long joinPosition = decodeJoinPosition(currentJoinPosition); LookupSource lookupSource = lookupSources[partition]; long nextJoinPosition = lookupSource.getNextJoinPosition(joinPosition, probePosition, allProbeChannelsPage); if (nextJoinPosition < 0) { return nextJoinPosition; } return encodePartitionedJoinPosition(partition, toIntExact(nextJoinPosition)); }
/** * Produce rows matching join condition for the current probe position. If this method was called previously * for the current probe position, calling this again will produce rows that wasn't been produced in previous * invocations. * * @return true if all eligible rows have been produced; false otherwise */ private boolean joinCurrentPosition(LookupSource lookupSource, DriverYieldSignal yieldSignal) { // while we have a position on lookup side to join against... while (joinPosition >= 0) { if (lookupSource.isJoinPositionEligible(joinPosition, probe.getPosition(), probe.getPage())) { currentProbePositionProducedRow = true; pageBuilder.appendRow(probe, lookupSource, joinPosition); joinSourcePositions++; } // get next position on lookup side for this probe row joinPosition = lookupSource.getNextJoinPosition(joinPosition, probe.getPosition(), probe.getPage()); if (yieldSignal.isSet() || tryBuildPage()) { return false; } } return true; }
@Override public long getNextJoinPosition(long currentPosition) { return values.getNextJoinPosition(currentPosition); }
@Override public long getNextJoinPosition(long currentPosition) { return lookupSource.getNextJoinPosition(currentPosition); }
@Override public long getNextJoinPosition(long currentPosition) { return lookupSource.getNextJoinPosition(currentPosition); }
@Override public long getNextJoinPosition(long partitionedJoinPosition) { int partition = (int) (partitionedJoinPosition & partitionMask); long joinPosition = partitionedJoinPosition >>> lookupSources.length; LookupSource lookupSource = lookupSources[partition]; long nextJoinPosition = lookupSource.getNextJoinPosition(joinPosition); if (nextJoinPosition < 0) { return nextJoinPosition; } return encodePartitionedJoinPosition(partition, nextJoinPosition); }
private boolean joinCurrentPosition() { // while we have a position to join against... while (joinPosition >= 0) { pageBuilder.declarePosition(); // write probe columns probe.appendTo(pageBuilder); // write build columns lookupSource.appendTo(joinPosition, pageBuilder, probe.getChannelCount()); // get next join position for this row joinPosition = lookupSource.getNextJoinPosition(joinPosition); if (pageBuilder.isFull()) { return false; } } return true; }