Github user kumarvishal09 commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/2467#discussion_r201292476
  
    --- Diff: 
core/src/main/java/org/apache/carbondata/core/scan/filter/FilterUtil.java ---
    @@ -251,6 +273,137 @@ private static FilterExecuter 
getIncludeFilterExecuter(
         }
       }
     
    +  /**
    +   * check if current need to be replaced with TrueFilter expression. This 
will happen in case
    +   * filter column min/max is not cached in the driver
    +   *
    +   * @param dimColEvaluatorInfoList
    +   * @param msrColEvaluatorInfoList
    +   * @param segmentProperties
    +   * @param minMaxCacheColumns
    +   * @return
    +   */
    +  private static boolean 
checkIfCurrentNodeToBeReplacedWithTrueFilterExpression(
    +      List<DimColumnResolvedFilterInfo> dimColEvaluatorInfoList,
    +      List<MeasureColumnResolvedFilterInfo> msrColEvaluatorInfoList,
    +      SegmentProperties segmentProperties, List<CarbonColumn> 
minMaxCacheColumns) {
    +    boolean replaceCurrentNodeWithTrueFilter = false;
    +    ColumnResolvedFilterInfo columnResolvedFilterInfo = null;
    +    if (!msrColEvaluatorInfoList.isEmpty()) {
    +      columnResolvedFilterInfo = msrColEvaluatorInfoList.get(0);
    +      replaceCurrentNodeWithTrueFilter =
    +          checkIfFilterColumnIsCachedInDriver(columnResolvedFilterInfo, 
segmentProperties,
    +              minMaxCacheColumns, true);
    +    } else {
    +      columnResolvedFilterInfo = dimColEvaluatorInfoList.get(0);
    +      if 
(!columnResolvedFilterInfo.getDimension().hasEncoding(Encoding.IMPLICIT)) {
    +        replaceCurrentNodeWithTrueFilter =
    +            checkIfFilterColumnIsCachedInDriver(columnResolvedFilterInfo, 
segmentProperties,
    +                minMaxCacheColumns, false);
    +      }
    +    }
    +    return replaceCurrentNodeWithTrueFilter;
    +  }
    +
    +  /**
    +   * check if current need to be replaced with TrueFilter expression. This 
will happen in case
    +   * filter column min/max is not cached in the driver
    +   *
    +   * @param filterExpressionResolverTree
    +   * @param segmentProperties
    +   * @param minMaxCacheColumns
    +   * @return
    +   */
    +  private static boolean 
checkIfCurrentNodeToBeReplacedWithTrueFilterExpression(
    +      FilterResolverIntf filterExpressionResolverTree, SegmentProperties 
segmentProperties,
    +      List<CarbonColumn> minMaxCacheColumns) {
    +    boolean replaceCurrentNodeWithTrueFilter = false;
    +    ColumnResolvedFilterInfo columnResolvedFilterInfo = null;
    +    if (null != 
filterExpressionResolverTree.getMsrColResolvedFilterInfo()) {
    +      columnResolvedFilterInfo = 
filterExpressionResolverTree.getMsrColResolvedFilterInfo();
    +      replaceCurrentNodeWithTrueFilter =
    +          checkIfFilterColumnIsCachedInDriver(columnResolvedFilterInfo, 
segmentProperties,
    +              minMaxCacheColumns, true);
    +    } else {
    +      columnResolvedFilterInfo = 
filterExpressionResolverTree.getDimColResolvedFilterInfo();
    +      if 
(!columnResolvedFilterInfo.getDimension().hasEncoding(Encoding.IMPLICIT)) {
    +        replaceCurrentNodeWithTrueFilter =
    +            checkIfFilterColumnIsCachedInDriver(columnResolvedFilterInfo, 
segmentProperties,
    +                minMaxCacheColumns, false);
    +      }
    +    }
    +    return replaceCurrentNodeWithTrueFilter;
    +  }
    +
    +  /**
    +   * Method to check whether current node needs to be replaced with true 
filter to avoid pruning
    +   * for case when filter column is not cached in the min/max cached 
dimension
    +   *
    +   * @param columnResolvedFilterInfo
    +   * @param segmentProperties
    +   * @param minMaxCacheColumns
    +   * @param isMeasure
    +   * @return
    +   */
    +  private static boolean checkIfFilterColumnIsCachedInDriver(
    +      ColumnResolvedFilterInfo columnResolvedFilterInfo, SegmentProperties 
segmentProperties,
    +      List<CarbonColumn> minMaxCacheColumns, boolean isMeasure) {
    +    boolean replaceCurrentNodeWithTrueFilter = false;
    +    CarbonColumn columnFromCurrentBlock = null;
    +    if (isMeasure) {
    +      columnFromCurrentBlock = segmentProperties
    +          
.getMeasureFromCurrentBlock(columnResolvedFilterInfo.getMeasure().getColumnId());
    +    } else {
    +      columnFromCurrentBlock =
    +          
segmentProperties.getDimensionFromCurrentBlock(columnResolvedFilterInfo.getDimension());
    +    }
    +    if (null != columnFromCurrentBlock) {
    +      // check for filter dimension in the cached column list
    +      if (null != minMaxCacheColumns) {
    +        int columnIndexInMinMaxByteArray =
    +            getFilterDimensionIndexInCachedColumns(minMaxCacheColumns, 
columnFromCurrentBlock);
    +        if (columnIndexInMinMaxByteArray != -1) {
    +          
columnResolvedFilterInfo.setColumnIndexInMinMaxByteArray(columnIndexInMinMaxByteArray);
    +        } else {
    +          // will be true only if column caching is enabled and current 
filter column is not cached
    +          replaceCurrentNodeWithTrueFilter = true;
    +        }
    +      } else {
    +        // if columns to be cached are not specified then in that case all 
columns will be cached
    +        // and  then the ordinal of column will be its index in the 
min/max byte array
    +        if (isMeasure) {
    +          columnResolvedFilterInfo.setColumnIndexInMinMaxByteArray(
    +              segmentProperties.getLastDimensionColOrdinal() + 
columnFromCurrentBlock.getOrdinal());
    +        } else {
    +          columnResolvedFilterInfo
    +              
.setColumnIndexInMinMaxByteArray(columnFromCurrentBlock.getOrdinal());
    +        }
    +      }
    +    }
    +    return replaceCurrentNodeWithTrueFilter;
    +  }
    +
    +  /**
    +   * Method to check whether the filter dimension exists in the cached 
dimensions for a table
    +   *
    +   * @param carbonDimensionsToBeCached
    +   * @param filterColumn
    +   * @return
    +   */
    +  private static int getFilterDimensionIndexInCachedColumns(
    --- End diff --
    
    Change method name as it will be called for both dimension and measure 
columns


---

Reply via email to