Package org.apache.hadoop.hbase.index.coprocessor.regionserver

Source Code of org.apache.hadoop.hbase.index.coprocessor.regionserver.TestScanFilterEvaluator

/**
* Copyright 2011 The Apache Software Foundation
*
* 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.hadoop.hbase.index.coprocessor.regionserver;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MediumTests;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.FilterList.Operator;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.index.ColumnQualifier.ValueType;
import org.apache.hadoop.hbase.index.IndexSpecification;
import org.apache.hadoop.hbase.index.filter.SingleColumnRangeFilter;
import org.apache.hadoop.hbase.index.manager.IndexManager;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.experimental.categories.Category;

@Category(MediumTests.class)
public class TestScanFilterEvaluator extends TestCase {

/*  public void testCircularList() throws Exception{
    ScanFilterEvaluator.CirularDoublyLinkedList cir = new ScanFilterEvaluator.CirularDoublyLinkedList();
    cir.add(10);
    cir.add(23);
    cir.add(45);
    Node head = cir.getHead();
    //System.out.println(head);
    Node next = head;
    for(int i = 0; i< 100; i++){
      next = cir.next(next);
      System.out.println(next);
    }
   
  }*/
 
/*  public void testName1() throws Exception {
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1", "c2" }, "idx1"));
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1" }, "idx2"));
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2" }, "idx3"));
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c1" }, "idx4"));
   
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.EQUAL, "a".getBytes());
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);
   
    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c3".getBytes(), CompareOp.EQUAL, "a".getBytes());
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c4".getBytes(), CompareOp.EQUAL, "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);
   
    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c5".getBytes(), CompareOp.EQUAL, "a".getBytes());
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c6".getBytes(), CompareOp.GREATER, "K".getBytes());
    filter2.addFilter(iscvf1);
    filter2.addFilter(iscvf2);
   
    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
   // mapper.evaluate(masterFilter, indices);
  }*/
  private static final String COLUMN_FAMILY = "MyCF";

  static HRegion region = null;
  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
  private static final String DIR = TEST_UTIL.getDataTestDir("TestScanFilterEvaluator").toString();

  static String method = "TestScanFilterEvaluator";
  static byte[] tableName = Bytes.toBytes(method);
  static byte[] family = Bytes.toBytes("family");
  static byte[] qual = Bytes.toBytes("q");
  private final int MAX_VERSIONS = 2;

  private static HRegion initHRegion(byte[] tableName, String callingMethod, Configuration conf,
      byte[]... families) throws IOException {
    return initHRegion(tableName, null, null, callingMethod, conf, families);
  }

  /**
   * @param tableName
   * @param startKey
   * @param stopKey
   * @param callingMethod
   * @param conf
   * @param families
   * @throws IOException
   * @return A region on which you must call {@link HRegion#closeHRegion(HRegion)} when done.
   */
  private static HRegion initHRegion(byte[] tableName, byte[] startKey, byte[] stopKey,
      String callingMethod, Configuration conf, byte[]... families) throws IOException {
    HTableDescriptor htd = new HTableDescriptor(tableName);
    for (byte[] family : families) {
      htd.addFamily(new HColumnDescriptor(family));
    }
    HRegionInfo info = new HRegionInfo(htd.getName(), startKey, stopKey, false);
    Path path = new Path(DIR + callingMethod);
    FileSystem fs = FileSystem.get(conf);
    if (fs.exists(path)) {
      if (!fs.delete(path, true)) {
        throw new IOException("Failed delete of " + path);
      }
    }
    return HRegion.createHRegion(info, path, conf, htd);
  }

  public void testName2() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, method, conf, family);
    ArrayList<IndexSpecification> arrayList = new ArrayList<IndexSpecification>();
    List<IndexSpecification> indices = arrayList;
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1", "c2",
        "c3", "c4", "c5", "c6", "c7" }, "idx1"));
    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1" }, "idx2"));
    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2" }, "idx3"));
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c1" },
      "idx4"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    SingleColumnValueFilter iscvf3 =
        new SingleColumnValueFilter("cf1".getBytes(), "c7".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter2.addFilter(iscvf1);
    filter2.addFilter(iscvf2);
    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);
    // Will throw null pointer here.
    IndexSpecification indexSpec = new IndexSpecification("a");
    indexSpec
        .addIndexColumn(new HColumnDescriptor(family), Bytes.toString(qual), ValueType.Int, 10);
    boolean add = arrayList.add(indexSpec);
    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      arrayList);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testDiffCombinations() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "testDiffCombinations", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();

    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c3",
        "c4", "c5", "c6" }, "idx1"));

    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c1",
        "c3", "c4" }, "idx4"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    filter2.addFilter(iscvf1);

    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);

    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      indices);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testDiffCombinations1() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "testDiffCombinations1", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c3",
        "c4", }, "idx1"));

    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c1" },
      "idx2"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c5" }, "idx3"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    filter2.addFilter(iscvf1);

    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);
    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      indices);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testDiffCombinations2() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "testDiffCombinations2", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c3" },
      "idx1"));

    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c1" },
      "idx2"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c5" }, "idx3"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    filter2.addFilter(iscvf1);

    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);

    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      indices);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testDiffCombinations3() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "testDiffCombinations3", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c3" },
      "idx1"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1" }, "idx2"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c5" }, "idx3"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c4" }, "idx4"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c6" }, "idx5"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    filter2.addFilter(iscvf1);

    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);

    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      indices);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testWhenORWithSameColumnAppearsinDiffChild() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "tesWhenORWithSameColumnAppearsinDiffChild", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    List<IndexSpecification> indices = new ArrayList<IndexSpecification>();
    // create the indices.
    indices.add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c2", "c3" },
      "idx1"));

    indices
        .add(createIndexSpecification("cf1", ValueType.String, 10, new String[] { "c1" }, "idx2"));

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    SingleColumnValueFilter iscvf3 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "d".getBytes());
    // filter2.addFilter(iscvf3);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(iscvf3);
    Scan scan = new Scan();
    scan.setFilter(masterFilter);

    IndexManager.getInstance().addIndexForTable(this.region.getTableDesc().getNameAsString(),
      indices);
    mapper.evaluate(scan, indices, new byte[0], this.region, this.region.getTableDesc()
        .getNameAsString());
  }

  public void testWhenORConditionAppears() throws Exception {
    Configuration conf = HBaseConfiguration.create();
    region = initHRegion(tableName, "testWhenORConditionAppears", conf, family);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c2".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
            "a".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c4".getBytes(), CompareOp.EQUAL,
            "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c5".getBytes(), CompareOp.GREATER,
            Bytes.toBytes(10));
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c6".getBytes(), CompareOp.EQUAL,
            Bytes.toBytes(100));
    filter2.addFilter(iscvf1);
    filter2.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    // System.out.println(doFiltersRestruct);
    /*
     * if (doFiltersRestruct instanceof FilterList) { FilterList list = ((FilterList)
     * doFiltersRestruct); assertEquals(3, list.getFilters().size()); }
     */
  }

  public void testORFiltersGrouping() throws Exception {
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    SingleColumnValueFilter iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    SingleColumnValueFilter iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    Filter resultFilter = mapper.doFiltersRestruct(masterFilter);
    List<Filter> filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnValueFilter);
    assertTrue(((SingleColumnValueFilter) filterList.get(0)).getOperator().equals(CompareOp.EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));
    assertTrue(((SingleColumnRangeFilter) filterList.get(1)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));
    assertTrue(((SingleColumnRangeFilter) filterList.get(1)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));
    assertTrue(((SingleColumnRangeFilter) filterList.get(1)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));
    assertTrue(((SingleColumnRangeFilter) filterList.get(1)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "10".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "10".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(filterList.get(1) instanceof SingleColumnValueFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));
    assertTrue(((SingleColumnValueFilter) filterList.get(1)).getOperator().equals(CompareOp.EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "9".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(filterList.get(1) instanceof SingleColumnValueFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));
    assertTrue(((SingleColumnValueFilter) filterList.get(1)).getOperator().equals(CompareOp.EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "9".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 2);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(filterList.get(1) instanceof SingleColumnValueFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));
    assertTrue(((SingleColumnValueFilter) filterList.get(1)).getOperator().equals(CompareOp.EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "2".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "5".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "2".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "7".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "7".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "2".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "2".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "7".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
            "7".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getUpperBoundOp().equals(
      CompareOp.LESS_OR_EQUAL));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER));

    masterFilter = new FilterList(Operator.MUST_PASS_ONE);
    iscvf1 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "3".getBytes());
    iscvf2 =
        new SingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER_OR_EQUAL,
            "5".getBytes());
    masterFilter.addFilter(iscvf1);
    masterFilter.addFilter(iscvf2);
    resultFilter = mapper.doFiltersRestruct(masterFilter);
    filterList = ((FilterList) resultFilter).getFilters();
    assertTrue(filterList.size() == 1);
    assertTrue(filterList.get(0) instanceof SingleColumnRangeFilter);
    assertTrue(((SingleColumnRangeFilter) filterList.get(0)).getLowerBoundOp().equals(
      CompareOp.GREATER_OR_EQUAL));

  }

  /*public void testWhenColNamesAreRepeated() throws Exception {
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();

   
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.EQUAL, "a".getBytes());
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.EQUAL, "K".getBytes());
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);
   
    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c3".getBytes(), CompareOp.EQUAL, "a".getBytes());
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c4".getBytes(), CompareOp.EQUAL, "K".getBytes());
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);
       
    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
   
    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(3, list.getFilters().size());
     
      List<Filter> filters = list.getFilters();
      for (Filter filter2 : filters) {
        if(filter2 instanceof SingleColumnValueFilter){
          SingleColumnValueFilter scvf = (SingleColumnValueFilter)filter2;
          if(Bytes.equals(scvf.getQualifier(), "c1".getBytes())){
            assertTrue(Bytes.equals("K".getBytes(), scvf.getComparator().getValue()));
          }
        }
      }
    }
  }
 
  public void testWhenSameColsConditionsComeMoreThanOnce() throws Exception{

   
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.GREATER, Bytes.toBytes(20));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.LESS, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);
   
    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c3".getBytes(), CompareOp.EQUAL, Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c4".getBytes(), CompareOp.EQUAL, Bytes.toBytes(100));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);
   
    FilterList filter2 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.GREATER, Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c4".getBytes(), CompareOp.EQUAL, Bytes.toBytes(100));
    filter2.addFilter(iscvf1);
    filter2.addFilter(iscvf2);
       
    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);
    masterFilter.addFilter(filter2);
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(2, list.getFilters().size());
    }
   
  }
 
  public void testShouldTakeOnlyTheEqualConditionWhenGreaterAlsoComes() throws Exception {
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();

    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.GREATER, Bytes.toBytes(20));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(100));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);

    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(3, list.getFilters().size());
    }
  }
 
  public void testShouldTakeOnlyTheEqualConditionWhenLesserAlsoComes() throws Exception{
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
        Bytes.toBytes(100));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);

    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(3, list.getFilters().size());
      List<Filter> filters = list.getFilters();
      for (Filter filter2 : filters) {
        if (filter2 instanceof SingleColumnValueFilter) {
          SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter2;
          if (Bytes.equals(scvf.getQualifier(), "c1".getBytes())) {
            assertEquals(CompareOp.EQUAL, scvf.getOperator());
          }
        }
      }
    }
  }
 
  public void testShouldNotIncludeFilterIfTheRangeConditionIsWrong() throws Exception{
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.LESS, Bytes.toBytes(10));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
        Bytes.toBytes(100));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);

    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(2, list.getFilters().size());
    }
  }
 
  public void testShouldTakeOnlyTheHighestFilterWhenTwoGreaterConditonsAreFound() throws Exception{
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.GREATER, Bytes.toBytes(10));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.GREATER,
        Bytes.toBytes(100));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);

    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(3, list.getFilters().size());
      List<Filter> filters = list.getFilters();
      for (Filter filter2 : filters) {
        if (filter2 instanceof SingleColumnValueFilter) {
          SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter2;
          if (Bytes.equals(scvf.getQualifier(), "c1".getBytes())) {
            assertTrue(Bytes.equals(Bytes.toBytes(100), scvf.getComparator().getValue()));
          }
        }
      }
    }
  }
 
  public void testShouldTakeOnlyTheLowestFilterWhenTwoLesserConditonsAreFound() throws Exception{
    ScanFilterEvaluator mapper = new ScanFilterEvaluator();
    FilterList masterFilter = new FilterList(Operator.MUST_PASS_ALL);
    // create the filter
    FilterList filter = new FilterList(Operator.MUST_PASS_ALL);
    IndexedSingleColumnValueFilter iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c1".getBytes(), CompareOp.LESS, Bytes.toBytes(10));
    IndexedSingleColumnValueFilter iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(),
        "c2".getBytes(), CompareOp.EQUAL, Bytes.toBytes(20));
    filter.addFilter(iscvf1);
    filter.addFilter(iscvf2);

    FilterList filter1 = new FilterList(Operator.MUST_PASS_ALL);
    iscvf1 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c3".getBytes(), CompareOp.EQUAL,
        Bytes.toBytes(10));
    iscvf2 = new IndexedSingleColumnValueFilter("cf1".getBytes(), "c1".getBytes(), CompareOp.LESS,
        Bytes.toBytes(1));
    filter1.addFilter(iscvf1);
    filter1.addFilter(iscvf2);

    masterFilter.addFilter(filter);
    masterFilter.addFilter(filter1);

    Filter doFiltersRestruct = mapper.doFiltersRestruct(masterFilter);
    if (doFiltersRestruct instanceof FilterList) {
      FilterList list = ((FilterList) doFiltersRestruct);
      assertEquals(3, list.getFilters().size());
      List<Filter> filters = list.getFilters();
      for (Filter filter2 : filters) {
        if (filter2 instanceof SingleColumnValueFilter) {
          SingleColumnValueFilter scvf = (SingleColumnValueFilter) filter2;
          if (Bytes.equals(scvf.getQualifier(), "c1".getBytes())) {
            assertTrue(Bytes.equals(Bytes.toBytes(1), scvf.getComparator().getValue()));
          }
        }
      }
    }
  }
*/
  private IndexSpecification createIndexSpecification(String cf, ValueType type,
      int maxValueLength, String[] qualifiers, String name) {
    IndexSpecification index = new IndexSpecification(name.getBytes());
    for (String qualifier : qualifiers) {
      index.addIndexColumn(new HColumnDescriptor(cf), qualifier, type, maxValueLength);
    }
    return index;
  }

}
TOP

Related Classes of org.apache.hadoop.hbase.index.coprocessor.regionserver.TestScanFilterEvaluator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.