@Override public long getJoinPosition(int position, Page hashChannelsPage, Page allChannelsPage, long rawHash) { int partition = partitionGenerator.getPartition(rawHash); LookupSource lookupSource = lookupSources[partition]; long joinPosition = lookupSource.getJoinPosition(position, hashChannelsPage, allChannelsPage, rawHash); if (joinPosition < 0) { return joinPosition; } return encodePartitionedJoinPosition(partition, toIntExact(joinPosition)); }
@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)); }
@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); }
@Override public long getJoinPosition(int position, Page page, int rawHash) { int partition = murmurHash3(rawHash) & partitionMask; LookupSource lookupSource = lookupSources[partition]; long joinPosition = lookupSource.getJoinPosition(position, page, rawHash); if (joinPosition < 0) { return joinPosition; } return encodePartitionedJoinPosition(partition, joinPosition); }