Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.facebook.presto.operator.index;
 
 
 
 import java.util.List;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 public class StreamingIndexedData
         implements IndexedData
 {
     private final List<TypeoutputTypes;
     private final List<TypeindexKeyTypes;
     private final Page indexKeyTuple;
     private final PageBuffer pageBuffer;
     private final Driver driver;
 
     private boolean started;
     private Page currentPage;
 
     public StreamingIndexedData(List<TypeoutputTypesList<TypeindexKeyTypesPage indexKeyTuplePageBuffer pageBufferDriver driver)
     {
         this. = ImmutableList.copyOf(checkNotNull(outputTypes"outputTypes is null"));
         this. = ImmutableList.copyOf(checkNotNull(indexKeyTypes"indexKeyTypes is null"));
         this. = checkNotNull(indexKeyTuple"indexKeyTuple is null");
         checkArgument(indexKeyTuple.getPositionCount() == 1, "indexKeyTuple Page should only have one position");
         checkArgument(indexKeyTypes.size() == indexKeyTuple.getChannelCount(), "indexKeyTypes doesn't match indexKeyTuple columns");
         this. = checkNotNull(pageBuffer"pageBuffer is null");
         this. = checkNotNull(driver"driver is null");
     }
 
     @Override
     public long getJoinPosition(int positionPage page)
     {
         checkArgument(page.getChannelCount() == .size(), "Number of blocks does not match the number of key columns");
         if ( || !matchesExpectedKey(positionpage)) {
             return .;
         }
          = true;
         if (!loadNextPage()) {
             return .;
         }
         return 0;
     }
 
     // TODO: use the code generator here
     private boolean matchesExpectedKey(int positionPage page)
     {
         for (int i = 0; i < .size(); i++) {
             if (!.get(i).equalTo(page.getBlock(i), position.getBlock(i), 0)) {
                 return false;
             }
         }
         return true;
     }
 
     @Override
     public long getNextJoinPosition(long currentPosition)
     {
         checkState( != null"getJoinPosition not called first");
         long nextPosition = currentPosition + 1;
         if (nextPosition >= .getPositionCount()) {
             if (!loadNextPage()) {
                 return .;
             }
             nextPosition = 0;
         }
         return nextPosition;
     }
 
     private boolean loadNextPage()
     {
         Page nextPage = extractNonEmptyPage();
         while (nextPage == null) {
            if (.isFinished()) {
                return false;
            }
            .process();
            nextPage = extractNonEmptyPage();
        }
         = nextPage;
        return true;
    }

    
Return the next page from pageBuffer that has a non-zero position count, or null if none available
    private static Page extractNonEmptyPage(PageBuffer pageBuffer)
    {
        Page page = pageBuffer.poll();
        while (page != null && page.getPositionCount() == 0) {
            page = pageBuffer.poll();
        }
        return page;
    }
    @Override
    public void appendTo(long positionPageBuilder pageBuilderint outputChannelOffset)
    {
        // TODO: use the code generator here
        checkState( != null"getJoinPosition not called first");
        int intPosition = Ints.checkedCast(position);
        for (int i = 0; i < .size(); i++) {
            Type type = .get(i);
            Block block = .getBlock(i);
            BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(i + outputChannelOffset);
            type.appendTo(blockintPositionblockBuilder);
        }
    }
    @Override
    public void close()
    {
        .close();
         = null;
    }
New to GrepCode? Check out our FAQ X