/*
   * We are testing one filter against all the partition fields.
   * The filter has the form "fieldA = valueA".
   * The partitions have the form partitionOne=valueOne/partitionTwo=ValueTwo/partitionThree=valueThree
   * 1. For a filter to match one of the partitions, lets say partitionA for example, we need:
   * fieldA = partittionOne and valueA = valueOne. If this condition occurs, we return true.
   * 2. If fieldA does not match any one of the partition fields we also return true, it means we ignore this filter
   * because it is not on a partition field.
   * 3. If fieldA = partittionOne and valueA != valueOne, then we return false.
   */
  private boolean testOneFilter(
      List<HivePartition> partitionFields, Object filter, InputData input) {
    // Let's look first at the filter
    FilterParser.BasicFilter bFilter = (FilterParser.BasicFilter) filter;

    boolean isFilterOperationEqual = (bFilter.getOperation() == FilterParser.Operation.HDOP_EQ);
    if (!isFilterOperationEqual) /* in case this is not an "equality filter" we ignore it here - in partition filtering */ {
      return true;
    }

    int filterColumnIndex = bFilter.getColumn().index();
    String filterValue = bFilter.getConstant().constant().toString();
    ColumnDescriptor filterColumn = input.getColumn(filterColumnIndex);
    String filterColumnName = filterColumn.columnName();

    for (HivePartition partition : partitionFields) {
      if (filterColumnName.equals(partition.name)) {
        /* the filter field matches a partition field, but the values do not match */
        return filterValue.equals(partition.val);
      }
    }

    /* filter field did not match any partition field, so we ignore this filter and hence return true */
    return true;
  }
 private void printOneBasicFilter(Object filter) {
   FilterParser.BasicFilter bFilter = (FilterParser.BasicFilter) filter;
   boolean isOperationEqual = (bFilter.getOperation() == FilterParser.Operation.HDOP_EQ);
   int columnIndex = bFilter.getColumn().index();
   String value = bFilter.getConstant().constant().toString();
   LOG.debug(
       "isOperationEqual: "
           + isOperationEqual
           + " columnIndex: "
           + columnIndex
           + " value: "
           + value);
 }