content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You 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 org.apache.carbondata.core.scan.collector.impl;
  
  import java.util.ArrayList;
  import java.util.List;
  
  import org.apache.carbondata.common.annotations.InterfaceAudience;
  import org.apache.carbondata.core.scan.executor.infos.BlockExecutionInfo;
  import org.apache.carbondata.core.scan.result.BlockletScannedResult;
  
  /**
   * This class append blocklet id, page id and row id to each row.
   */
  @InterfaceAudience.Internal
  public class RowIdBasedResultCollector extends DictionaryBasedResultCollector {
  
    public RowIdBasedResultCollector(BlockExecutionInfo blockExecutionInfos) {
      super(blockExecutionInfos);
    }
  
    @Override
    public List<Object[]> collectResultInRow(BlockletScannedResult scannedResult, int batchSize) {
  
      // scan the record and add to list
      List<Object[]> listBasedResult = new ArrayList<>(batchSize);
      int rowCounter = 0;
      int[] surrogateResult;
      byte[][] noDictionaryKeys;
      byte[][] complexTypeKeyArray;
      int columnCount = queryDimensions.length + queryMeasures.length;
      while (scannedResult.hasNext() && rowCounter < batchSize) {
        scannedResult.incrementCounter();
        if (scannedResult.containsDeletedRow(scannedResult.getCurrentRowId())) {
          continue;
        }
        Object[] row = new Object[columnCount + 3];
        row[columnCount] = scannedResult.getBlockletNumber();
        row[columnCount + 1] = scannedResult.getCurrentPageCounter();
        if (isDimensionExists) {
          surrogateResult = scannedResult.getDictionaryKeyIntegerArray();
          noDictionaryKeys = scannedResult.getNoDictionaryKeyArray();
          complexTypeKeyArray = scannedResult.getComplexTypeKeyArray();
          dictionaryColumnIndex = 0;
          noDictionaryColumnIndex = 0;
          complexTypeColumnIndex = 0;
          for (int i = 0; i < queryDimensions.length; i++) {
            fillDimensionData(scannedResult, surrogateResult, noDictionaryKeys, complexTypeKeyArray,
                complexDimensionInfoMap, row, i, queryDimensions[i].getDimension().getOrdinal());
          }
        }
        row[columnCount + 2] = scannedResult.getCurrentRowId();
        fillMeasureData(scannedResult, row);
        listBasedResult.add(row);
        rowCounter++;
      }
      return listBasedResult;
  
    }
  
  }
  