Package co.nubetech.crux.server

Source Code of co.nubetech.crux.server.TestHBaseFacade

/**
* Copyright 2011 Nube Technologies
*
* 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 co.nubetech.crux.server;

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

import org.apache.commons.pool.KeyedPoolableObjectFactory;
import org.apache.commons.pool.PoolUtils;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

import co.nubetech.crux.model.ColumnAlias;
import co.nubetech.crux.model.ColumnFilter;
import co.nubetech.crux.model.Connection;
import co.nubetech.crux.model.ConnectionProperty;
import co.nubetech.crux.model.FilterType;
import co.nubetech.crux.model.Function;
import co.nubetech.crux.model.Mapping;
import co.nubetech.crux.model.Report;
import co.nubetech.crux.model.ReportDesign;
import co.nubetech.crux.model.ReportDesignFunction;
import co.nubetech.crux.model.RowAlias;
import co.nubetech.crux.model.RowAliasFilter;
import co.nubetech.crux.model.TestingUtil;
import co.nubetech.crux.model.ValueType;
import co.nubetech.crux.pool.HBaseConnectionPool;
import co.nubetech.crux.pool.HBaseConnectionPoolFactory;
import co.nubetech.crux.util.CruxConstants;
import co.nubetech.crux.util.CruxException;


public class TestHBaseFacade {
 
 
  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
  // private static final HBaseRESTTestingUtility REST_TEST_UTIL = new
  // HBaseRESTTestingUtility();
  private static final String TABLE = "testTable";
  private static final byte[] COLUMN_1 = Bytes.toBytes("cf");
  private static final byte[] COLUMN_2 = Bytes.toBytes("cf1");
  private static final String TABLE_1 = "testTable1";
  private static final String TABLE_2 = "testTable2";
  private static final String TABLE_3 = "testTable3";
  private static final String TABLE_4 = "testTable4";
  private static final String TABLE_5 = "testTable5";
  private static Connection connection = null;
  private static HBaseConnectionPool pool = null;
  private final static Logger logger = Logger
      .getLogger(co.nubetech.crux.server.TestHBaseFacade.class);
 
  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    TEST_UTIL.getConfiguration().set(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY,
        "co.nubetech.crux.server.aggregate.GroupingAggregationImpl");
    TEST_UTIL.getConfiguration().set("dfs.datanode.data.dir.perm", "755");
    TEST_UTIL.startMiniCluster(3);
   
    // REST_TEST_UTIL.startServletContainer(TEST_UTIL.getConfiguration());
    HBaseAdmin admin = TEST_UTIL.getHBaseAdmin();

    //first table, two column families, one qual
    if (!admin.tableExists(TABLE)) {
      HTableDescriptor htd = new HTableDescriptor(TABLE);
      htd.addFamily(new HColumnDescriptor(COLUMN_1));
      htd.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd);
      HTable table = new HTable(TEST_UTIL.getConfiguration(), TABLE);

      for (long i = 0; i < 10; ++i) {
        Put put = new Put(Bytes.toBytes("row" + i));
        put.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        table.put(put);
      }
      table.flushCommits();
    }
    //second table, two column families, first with one qual, second with 2
    if (!admin.tableExists(TABLE_1)) {
      HTableDescriptor htd1 = new HTableDescriptor(TABLE_1);
      htd1.addFamily(new HColumnDescriptor(COLUMN_1));
      htd1.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd1);

      HTable table1 = new HTable(TEST_UTIL.getConfiguration(), TABLE_1);

      for (long i = 0; i < 10; ++i) {
        Put put1 = new Put(Bytes.toBytes(new Long(i)));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier"), Bytes.toBytes(i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier1"),
            Bytes.toBytes((int) i));

        table1.put(put1);
      }
      table1.flushCommits();
    }

    //composite table, 2 cfs, each with 2 quals
    if (!admin.tableExists(TABLE_2)) {
      HTableDescriptor htd1 = new HTableDescriptor(TABLE_2);
      htd1.addFamily(new HColumnDescriptor(COLUMN_1));
      htd1.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd1);

      HTable table1 = new HTable(TEST_UTIL.getConfiguration(), TABLE_2);
      TEST_UTIL.createMultiRegions(table1, COLUMN_2);
      for (long i = 10; i < 20; ++i) {
        byte[] longBytes = Bytes.toBytes(new Long(i));
        byte[] intBytes = Bytes.toBytes((int) i);
        byte[] stringBytes = Bytes.toBytes("I am a String" + i);

        Put put1 = new Put(Bytes.add(longBytes, intBytes, stringBytes));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier1"),
            Bytes.toBytes("I am a sub" + i*2 + " and I am a long"));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier"), Bytes.toBytes(i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier1"),
            Bytes.toBytes((int) i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier2"),
            Bytes.toBytes(i * 2.5d));
        table1.put(put1);

        /*for (int k = 0; k < put1.getRow().length; ++k) {
          logger.debug("Entered " + put1.getRow()[k]);
        }*/
      }
      table1.flushCommits();
    }

    if (!admin.tableExists(TABLE_3)) {
      HTableDescriptor htd1 = new HTableDescriptor(TABLE_3);
      htd1.addFamily(new HColumnDescriptor(COLUMN_1));
      htd1.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd1);

      HTable table1 = new HTable(TEST_UTIL.getConfiguration(), TABLE_3);

      for (long i = 0; i < 10; ++i) {
        Put put1 = new Put(Bytes.toBytes((short) i));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier"), Bytes.toBytes(i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier1"),
            Bytes.toBytes((int) i));

        table1.put(put1);
      }
      table1.flushCommits();
    }

    if (!admin.tableExists(TABLE_4)) {
      HTableDescriptor htd1 = new HTableDescriptor(TABLE_4);
      htd1.addFamily(new HColumnDescriptor(COLUMN_1));
      htd1.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd1);

      HTable table1 = new HTable(TEST_UTIL.getConfiguration(), TABLE_4);

      for (long i = 10; i < 20; ++i) {
        byte[] longBytes = Bytes.toBytes(new Long(i));
        byte[] boleanBytes = Bytes.toBytes(true);

        Put put1 = new Put(Bytes.add(longBytes, boleanBytes));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier"), Bytes.toBytes(i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier1"),
            Bytes.toBytes((int) i));

        table1.put(put1);

        /*for (int k = 0; k < put1.getRow().length; ++k) {
          logger.debug("Entered " + put1.getRow()[k]);
        }*/
      }
      table1.flushCommits();
    }

    if (!admin.tableExists(TABLE_5)) {
      HTableDescriptor htd1 = new HTableDescriptor(TABLE_5);
      htd1.addFamily(new HColumnDescriptor(COLUMN_1));
      htd1.addFamily(new HColumnDescriptor(COLUMN_2));
      admin.createTable(htd1);

      HTable table1 = new HTable(TEST_UTIL.getConfiguration(), TABLE_5);

      for (long i = 1; i < 2; ++i) {
        Put put1 = new Put(Bytes.toBytes(true));
        put1.add(COLUMN_1, Bytes.toBytes("qualifier"),
            Bytes.toBytes("value" + i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier"), Bytes.toBytes(i));
        put1.add(COLUMN_2, Bytes.toBytes("qualifier1"),
            Bytes.toBytes((int) i));
        table1.put(put1);
      }

      table1.flushCommits();
    }
   
    KeyedPoolableObjectFactory factory = PoolUtils
        .synchronizedPoolableFactory(new HBaseConnectionPoolFactory());
    connection = new Connection();
    ConnectionProperty connectionProperty = new ConnectionProperty();
    connectionProperty.setProperty(CruxConstants.HBASE_ZOOKEEPER_PROPERTY);
    logger.debug("Port is: " + TEST_UTIL.getConfiguration().get("hbase.zookeeper.property.clientPort"));
    connectionProperty.setValue("localhost:"
        + TEST_UTIL.getConfiguration().get("hbase.zookeeper.property.clientPort"));
    connection.addProperty(connectionProperty);
    pool = new HBaseConnectionPool(factory);
  }

  @AfterClass
  public static void tearDownAfterClass() throws Exception {
    connection = null;
    pool = null;
    // REST_TEST_UTIL.shutdownServletContainer();
    TEST_UTIL.shutdownMiniCluster();
  }

  @Test
  public void testIsValidConnection() throws IOException, CruxException {
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    boolean connectionAvailable = hbaseFacade.isValidConnection(connection);
    assertTrue(connectionAvailable);
  }

 
  public void testIsValidConnectionForWrongValue() throws IOException {
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    Connection connection = new Connection();
    ConnectionProperty property = new ConnectionProperty();
    property.setProperty(CruxConstants.HBASE_ZOOKEEPER_PROPERTY);
    property.setValue("localhost:0000");
    connection.addProperty(property);
    boolean connectionAvailable = hbaseFacade.isValidConnection(connection);
    assertFalse(connectionAvailable);
  }

  @Test
  public void testGetTableList() throws CruxException {
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    String[] tableList = hbaseFacade.getTableList(connection);
    assertEquals(6, tableList.length);
    assertEquals(TABLE, tableList[0]);
    assertEquals(TABLE_1, tableList[1]);
    assertEquals(TABLE_2, tableList[2]);
    assertEquals(TABLE_3, tableList[3]);
    assertEquals(TABLE_4, tableList[4]);
    assertEquals(TABLE_5, tableList[5]);
  }

  @Test
  public void testGetColumnFamilies() throws CruxException {
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    ArrayList<HColumnDescriptor> columnList = new ArrayList<HColumnDescriptor>(
        hbaseFacade.getColumnFamilies(connection, TABLE));
    assertEquals(columnList.get(0).getNameAsString(), "cf");
    assertEquals(columnList.get(1).getNameAsString(), "cf1");
    assertEquals(columnList.size(), 2);
  }

  @Test(expected = CruxException.class)
  public void testGetColumnFamiliesTableDoesNotExist() throws CruxException {
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    ArrayList<HColumnDescriptor> columnList = new ArrayList<HColumnDescriptor>(
        hbaseFacade.getColumnFamilies(connection, "doesNotExistTable"));

  }

  @Test(expected = CruxException.class)
  public void testGetTableDoesNotExist() throws IOException, CruxException {
    Report report = new Report();
    report.setId(1l);
    Mapping mapping = new Mapping();
    mapping.setTableName("tableDoesNotExist");

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(8);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setValueType(valueType);
    mapping.addColumnAlias(cAlias);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setReport(report);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);

    rowFilter.setValue("row5");

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);

  }

  @Test
  public void testGetSimpleStringRow() throws IOException, CruxException {
    Report report = new Report();
    report.setId(1l);
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(8);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setValueType(valueType);
    cAlias.setQualifier("qualifier");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setValueType(valueType);
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setReport(report);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);

    rowFilter.setValue("row5");
   
    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value is "
        + scanResult.get(0));
    assertEquals(
        "value5",
        scanResult.get(0));
    logger.debug("CruxResult is " + scanResult);
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();
  }

  @Test
  public void testGetSimpleLongRow() throws IOException, CruxException {
    Report report = new Report();
    report.setId(1l);
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_1);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(8);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.Long");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    ValueType stringValueType = new ValueType();
    stringValueType.setClassName("java.lang.String");
   
    cAlias.setValueType(stringValueType);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    cAlias1.setValueType(valueType);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col2");
    cAlias2.setColumnFamily("cf1");
    cAlias2.setQualifier("qualifier1");
    ValueType valueTypeInt = new ValueType();
    valueTypeInt.setClassName("java.lang.Integer");
   
    cAlias2.setValueType(valueTypeInt);
    mapping.addColumnAlias(cAlias2);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setReport(report);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);

    rowFilter.setValue("4");
    ReportDesign colDesign = new ReportDesign();
    colDesign.setColumnAlias(cAlias);
    report.addDesign(colDesign);
   
    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias1);
    report.addDesign(colDesign1);
   

    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias2);
    report.addDesign(colDesign2);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value 1 is "
        + scanResult.get(0)); //Value(COLUMN_1, Bytes.toBytes("qualifier")));
    logger.debug("Value 2 is "
        + scanResult.get(1)); //Value(COLUMN_2, Bytes.toBytes("qualifier")));

    assertEquals(
        "value4",
        scanResult.get(0)) ; //Value(COLUMN_1,Bytes.toBytes("qualifier"))));
    assertEquals(
        4l,
        scanResult.get(1)) ; //COLUMN_2,Bytes.toBytes("qualifier"))));
    assertEquals(
        4,
        scanResult.get(2)); //Value(COLUMN_2,Bytes.toBytes("qualifier1"))));

    logger.debug("CruxResult is " + scanResult);
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();
  }

  @Test
  public void testGetSimpleShortRow() throws IOException, CruxException {
    Report report = new Report();
    report.setId(1l);
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_3);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(2);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.Short");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");   
    ValueType valueTypeString = new ValueType();
    valueTypeString.setClassName("java.lang.String");
    cAlias.setValueType(valueTypeString);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    ValueType valueTypeLong = new ValueType();
    valueTypeLong.setClassName("java.lang.Long");
    cAlias1.setValueType(valueTypeLong);
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
    rowFilter.setValue("4");
   
    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias1);
    report.addDesign(colDesign2);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value 1 is "
        + scanResult.get(0));
    logger.debug("Value 2 is "
        + scanResult.get(1));

    assertEquals(
        "value4",
        scanResult.get(0));
    assertEquals(
        4l,
        scanResult.get(1));
    assertEquals(
        null,
        scanResult.get(2));

    logger.debug("CruxResult is " + scanResult);
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();
  }

  @Test
  public void testGetSimpleBooleanRow() throws IOException, CruxException {

    Report report = new Report();
    report.setId(1l);
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_5);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(1);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.Boolean");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    mapping.addColumnAlias(cAlias);
    ValueType valueTypeString = new ValueType();
    valueTypeString.setClassName("java.lang.String");
    cAlias.setValueType(valueTypeString);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    ValueType valueTypeLong = new ValueType();
    valueTypeLong.setClassName("java.lang.Long");
    cAlias1.setValueType(valueTypeLong);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col2");
    cAlias2.setColumnFamily("cf1");
    cAlias2.setQualifier("qualifier1");
    ValueType valueTypeInt = new ValueType();
    valueTypeInt.setClassName("java.lang.Integer");
    cAlias2.setValueType(valueTypeInt);
    mapping.addColumnAlias(cAlias2);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);

    rowFilter.setValue("true");   
   
    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias1);
    report.addDesign(colDesign2);
   
    ReportDesign colDesign3 = new ReportDesign();
    colDesign3.setColumnAlias(cAlias2);
    report.addDesign(colDesign3);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);

    logger.debug("Value 1 is "
        + scanResult.get(0));
    logger.debug("Value 2 is "
        + scanResult.get(2));

    assertEquals(
        "value1",
        scanResult.get(0));
    assertEquals(
        1l,
        scanResult.get(1));
    assertEquals(
        1,
        scanResult.get(2));

    logger.debug("CruxResult is " + scanResult);
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
   
    scanner.close();
  }

  @Test
  public void testGetCompositeRowWithBoolean() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_4);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyBoolean");
    rAlias2.setLength(1);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Boolean");
    rAlias2.setValueType(valueType2);
    //mapping.addRowAlias(rAlias2);
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    mapping.setRowAlias(rowAliases);


    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    ValueType valueTypeString = new ValueType();
    valueTypeString.setClassName("java.lang.String");   
    cAlias.setValueType(valueTypeString);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    cAlias1.setValueType(valueType1);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col1");
    cAlias2.setColumnFamily("cf1");
    cAlias2.setQualifier("qualifier1");
    ValueType valueTypeInt = new ValueType();
    valueTypeInt.setClassName("java.lang.Integer");
    cAlias2.setValueType(valueTypeInt);
    mapping.addColumnAlias(cAlias2);

    FilterType filter = new FilterType();
    filter.setType("Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter);
    rowFilter1.setRowAlias(rAlias1);

    RowAliasFilter rowFilter2 = new RowAliasFilter();
    rowFilter2.setFilterType(filter);
    rowFilter2.setRowAlias(rAlias2);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    filters.add(rowFilter2);
    report.setRowAliasFilters(filters);

    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias1);
    report.addDesign(colDesign2);
   
    ReportDesign colDesign3 = new ReportDesign();
    colDesign3.setColumnAlias(cAlias2);
    report.addDesign(colDesign3);
   
    rowFilter1.setValue("11");
    rowFilter2.setValue("true");

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value 1 is "  + scanResult.get(0));
    logger.debug("Value 2 is "   + scanResult.get(1));
    logger.debug("CruxResult is " + scanResult);
    assertEquals(
        11l,
        scanResult.get(1));
    assertEquals(
        11,
        scanResult.get(2));
    assertEquals(
        "value11",
        scanResult.get(0));
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();
  }

  @Test
  public void testGetCompositeRow() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    //mapping.addRowAlias(rAlias3);
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    rowAliases.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliases);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);
   
    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    cAlias1.setValueType(valueType1);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col1");
    cAlias2.setColumnFamily("cf1");
    cAlias2.setQualifier("qualifier1");
    cAlias2.setValueType(valueType2);
    mapping.addColumnAlias(cAlias2);

    FilterType filter = new FilterType();
    filter.setType("Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter);
    rowFilter1.setRowAlias(rAlias1);

    RowAliasFilter rowFilter2 = new RowAliasFilter();
    rowFilter2.setFilterType(filter);
    rowFilter2.setRowAlias(rAlias2);

    RowAliasFilter rowFilter3 = new RowAliasFilter();
    rowFilter3.setFilterType(filter);
    rowFilter3.setRowAlias(rAlias3);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    filters.add(rowFilter2);
    filters.add(rowFilter3);
    report.setRowAliasFilters(filters);

    rowFilter1.setValue("11");
    rowFilter2.setValue("11");
    rowFilter3.setValue("I am a String11");
   
    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias1);
    report.addDesign(colDesign2);
   
    ReportDesign colDesign3 = new ReportDesign();
    colDesign3.setColumnAlias(cAlias2);
    report.addDesign(colDesign3);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value 1 is "
        + scanResult.get(0));
    logger.debug("Value 2 is "
        + scanResult.get(1));
    logger.debug("CruxResult is " + scanResult);
    assertEquals(
        11l,
        scanResult.get(1));
    assertEquals(
        11,
        scanResult.get(2));
    assertEquals(
        "value11",
        scanResult.get(0));
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();

  }

  @Test
  public void testGetCompositeRowWithSelectedColumns() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    //mapping.addRowAlias(rAlias3);
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    rowAliases.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliases);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    cAlias1.setValueType(valueType1);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col1");
    cAlias2.setColumnFamily("cf1");
    cAlias2.setQualifier("qualifier1");
    cAlias2.setValueType(valueType2);
    mapping.addColumnAlias(cAlias2);

    FilterType filter = new FilterType();
    filter.setType("Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter);
    rowFilter1.setRowAlias(rAlias1);

    RowAliasFilter rowFilter2 = new RowAliasFilter();
    rowFilter2.setFilterType(filter);
    rowFilter2.setRowAlias(rAlias2);

    RowAliasFilter rowFilter3 = new RowAliasFilter();
    rowFilter3.setFilterType(filter);
    rowFilter3.setRowAlias(rAlias3);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    filters.add(rowFilter2);
    filters.add(rowFilter3);
    report.setRowAliasFilters(filters);

    rowFilter1.setValue("11");
    rowFilter2.setValue("11");
    rowFilter3.setValue("I am a String11");

    ReportDesign colDesign1 = new ReportDesign();
    colDesign1.setColumnAlias(cAlias);
    report.addDesign(colDesign1);
   
    ReportDesign colDesign2 = new ReportDesign();
    colDesign2.setColumnAlias(cAlias1);
    report.addDesign(colDesign2);
   
    ReportDesign colDesign3 = new ReportDesign();
    colDesign3.setColumnAlias(cAlias2);
    report.addDesign(colDesign3);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultImpl);
    CruxResult scanResult = scanner.next();
    assertNotNull(scanResult);
    logger.debug("Value 1 is "
        + scanResult.get(0));
    logger.debug("Value 2 is "
        + scanResult.get(1));
    logger.debug("CruxResult is " + scanResult);

    assertEquals(11l, scanResult.get(1));
    assertEquals(11, scanResult.get(2));
    assertEquals(
        "value11",
        scanResult.get(0));
    while ((scanResult = scanner.next()) != null) {
      fail("more rows found than expected");
    }
    scanner.close();

  }
 
  @Test
  public void testRangeScanSimpleStringRowGreater() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(4);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setValueType(valueType);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setQualifier("qualifier");
    cAlias1.setValueType(valueType);
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Greater Than Equals");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("row5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    report.addDesign(design);
 
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(5, results.size());
    for (long i=5; i <10; ++i) {
      assertEquals("row" + i, (String) results.get((int) i-5).get(0));
    }
    scanner.close();
   
  }

  @Test
  public void testRangeScanSimpleStringRowLesser() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(4);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Less Than");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("row5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(5, results.size());
    for (long i=0; i <5; ++i) {
      assertEquals("row" + i, results.get((int) i).get(0));
    }
   
    scanner.close();
  }
 
  @Test
  public void testRangeScanSimpleStringRowLesserGreater() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(4);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter = new FilterType();
    filter.setType("Less Than");
    rowFilter.setFilterType(filter);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("row7");
   
    RowAliasFilter rowFilter1 = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Greater Than Equals");
    rowFilter1.setFilterType(filter1);
    rowFilter1.setRowAlias(rAlias);
    rowFilter1.setValue("row5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    filters.add(rowFilter1);
    report.setRowAliasFilters(filters);

    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(2, results.size());
    for (long i=5; i <7; ++i) {
      assertEquals("row" + i, results.get((int) i-5).get(0));
    }
    scanner.close();
  }
 
  @Test
  public void testRangeScanCompositeRowWithSelectedColumns() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
    //mapping.addRowAlias(rAlias3);
   
    LinkedHashMap<String, RowAlias> rowAliasesMap = new LinkedHashMap<String, RowAlias>();
    rowAliasesMap.put(rAlias1.getAlias(), rAlias1);
    rowAliasesMap.put(rAlias2.getAlias(), rAlias2);
    rowAliasesMap.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliasesMap);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    FilterType filter = new FilterType();
    filter.setType("Greater Than Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter);
    rowFilter1.setRowAlias(rAlias1);

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    report.setRowAliasFilters(filters);

    rowFilter1.setValue("15");
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);
    ReportDesign design3 = new ReportDesign();
    design3.setRowAlias(rAlias1);
    report.addDesign(design3);
    ReportDesign design4 = new ReportDesign();
    design4.setRowAlias(rAlias2);
    report.addDesign(design4);
    ReportDesign design5 = new ReportDesign();
    design5.setRowAlias(rAlias3);
    report.addDesign(design5);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
    }
    assertEquals(5, results.size());
    for (int i=15; i <20; ++i) {
      Object column = results.get(i-15).get(0);
     
      assertEquals("value" +i, column);
      assertEquals(new Long(i), results.get(i-15).get(1));
      assertEquals((int) i, results.get(i-15).get(2));
      assertEquals("I am a String" + i, results.get(i-15).get(3));
      assertNull(results.get(i-15).get(4));
    }
    scanner.close();
  }
 
  @Test
  public void testScanCompositeRowWithSelectedColumns() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
    //mapping.addRowAlias(rAlias3);
   
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    rowAliases.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliases);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setValueType(valueType3);
    mapping.addColumnAlias(cAlias1);

    FilterType filter = new FilterType();
    filter.setType("Greater Than");

    ColumnFilter columnFilter1 = new ColumnFilter();
    columnFilter1.setFilterType(filter);
    columnFilter1.setColumnAlias(cAlias);
    columnFilter1.setValue("value15");
   

    ArrayList<ColumnFilter> filters = new ArrayList<ColumnFilter>();
    filters.add(columnFilter1);
    report.setColumnFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);
    ReportDesign design3 = new ReportDesign();
    design3.setRowAlias(rAlias1);
    report.addDesign(design3);
    ReportDesign design4 = new ReportDesign();
    design4.setRowAlias(rAlias2);
    report.addDesign(design4);
    ReportDesign design5 = new ReportDesign();
    design5.setRowAlias(rAlias3);
    report.addDesign(design5);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);     
    }
    assertEquals(4, results.size());
    for (int i=16; i <20; ++i) {
     
      Object column = results.get(i-16).get(0);
     
      assertEquals("value" +i, column);
      assertEquals(new Long(i), results.get(i-16).get(1));
      assertEquals((int) i, results.get(i-16).get(2));
      assertEquals("I am a String" + i, results.get(i-16).get(3));
      assertNull(results.get(i-16).get(4));
    }
    scanner.close();

  }
 
  @Test
  public void testScanCompositeRowWithSelectedColumnsDontExist() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    //mapping.addRowAlias(rAlias3);
   
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    rowAliases.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliases);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias1.setValueType(valueType3);
    mapping.addColumnAlias(cAlias1);

    FilterType filter = new FilterType();
    filter.setType("Greater Than");

    ColumnFilter columnFilter1 = new ColumnFilter();
    columnFilter1.setFilterType(filter);
    columnFilter1.setColumnAlias(cAlias);
    columnFilter1.setValue("w51213");
   

    ArrayList<ColumnFilter> filters = new ArrayList<ColumnFilter>();
    filters.add(columnFilter1);
    report.setColumnFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(0, results.size())
    scanner.close();
  }
 
  @Test
  public void testScanCompositeRowWithSelectedColumnsSubstr() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
    //mapping.addRowAlias(rAlias3);
   
    LinkedHashMap<String, RowAlias> rowAliases = new LinkedHashMap<String, RowAlias>();
    rowAliases.put(rAlias1.getAlias(), rAlias1);
    rowAliases.put(rAlias2.getAlias(), rAlias2);
    rowAliases.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowAliases);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    cAlias.setQualifier("qualifier");
    cAlias1.setValueType(valueType1);
    mapping.addColumnAlias(cAlias1);
   
    ColumnAlias cAlias2 = new ColumnAlias();
    cAlias2.setAlias("col");
    cAlias2.setColumnFamily("cf");
    cAlias2.setQualifier("qualifier1");   
    cAlias2.setValueType(valueType3);
    mapping.addColumnAlias(cAlias2);

    FilterType filter = new FilterType();
    filter.setType("Substring");

    ColumnFilter columnFilter1 = new ColumnFilter();
    columnFilter1.setFilterType(filter);
    columnFilter1.setColumnAlias(cAlias2);
    columnFilter1.setValue("sub2");   

    ArrayList<ColumnFilter> filters = new ArrayList<ColumnFilter>();
    filters.add(columnFilter1);
    report.setColumnFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);
    ReportDesign design1 = new ReportDesign();
    design1.setColumnAlias(cAlias2);
    report.addDesign(design1);
    ReportDesign design3 = new ReportDesign();
    design3.setRowAlias(rAlias1);
    report.addDesign(design3);
    ReportDesign design4 = new ReportDesign();
    design4.setRowAlias(rAlias2);
    report.addDesign(design4);
    ReportDesign design5 = new ReportDesign();
    design5.setRowAlias(rAlias3);
    report.addDesign(design5);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(5, results.size());
    for (int i=10; i <15; ++i) {
     
      Object column = results.get(i-10).get(0);
      Object column1 = results.get(i-10).get(1);
     
      assertEquals("value" +i, column);
      assertEquals("I am a sub" +i*2 + " and I am a long", column1);
      assertEquals(new Long(i), results.get(i-10).get(2));
      assertEquals((int) i, results.get(i-10).get(3));
      assertEquals("I am a String" + i, results.get(i-10).get(4));
      assertNull(results.get(i-10).get(5));     
    }   
    scanner.close();
  }
 
  @Test
  public void testRangeScanCompositeRowWithLongEquals() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
    //mapping.addRowAlias(rAlias3);
    //add aliases in order
    LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
    rowMap.put(rAlias1.getAlias(), rAlias1);
    rowMap.put(rAlias2.getAlias(), rAlias2);
    rowMap.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowMap);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");   
    mapping.addColumnAlias(cAlias1);

    FilterType filter = new FilterType();
    filter.setType("Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter);
    rowFilter1.setRowAlias(rAlias1);
   
    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    report.setRowAliasFilters(filters);

    rowFilter1.setValue("15");
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    scanner.close();
  }
 
  @Test
  public void testRangeScanCompositeRowWithLongGtEqIntEq() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
   
    //mapping.addRowAlias(rAlias3);
    //add aliases in order
    LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
    rowMap.put(rAlias1.getAlias(), rAlias1);
    rowMap.put(rAlias2.getAlias(), rAlias2);
    rowMap.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowMap);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    FilterType filter1 = new FilterType();
    filter1.setType("Greater Than Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter1);
    rowFilter1.setRowAlias(rAlias1);
    rowFilter1.setValue("15");

    FilterType filter2 = new FilterType();
    filter2.setType("Equals");

    RowAliasFilter rowFilter2 = new RowAliasFilter();
    rowFilter2.setFilterType(filter2);
    rowFilter2.setRowAlias(rAlias2);
    rowFilter2.setValue("15");
   
    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    filters.add(rowFilter2);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    scanner.close();
  }
  /*TODOBUG
  @Test
  public void testRangeScanCompositeRowWithLongGtEqStringEq() throws IOException,
      CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE_2);

    RowAlias rAlias1 = new RowAlias();
    rAlias1.setAlias("rowkeyLong");
    rAlias1.setLength(8);
    rAlias1.setId(1l);
    ValueType valueType1 = new ValueType();
    valueType1.setClassName("java.lang.Long");
    rAlias1.setValueType(valueType1);
    rAlias1.setMapping(mapping);
    //mapping.addRowAlias(rAlias1);

    RowAlias rAlias2 = new RowAlias();
    rAlias2.setAlias("rowkeyInt");
    rAlias2.setLength(4);
    rAlias2.setId(2l);
    ValueType valueType2 = new ValueType();
    valueType2.setClassName("java.lang.Integer");
    rAlias2.setValueType(valueType2);
    rAlias2.setMapping(mapping);
    //mapping.addRowAlias(rAlias2);

    RowAlias rAlias3 = new RowAlias();
    rAlias3.setAlias("rowkeyString");
    rAlias3.setId(3l);
    rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
    ValueType valueType3 = new ValueType();
    valueType3.setClassName("java.lang.String");
    rAlias3.setValueType(valueType3);
    rAlias3.setMapping(mapping);
    //mapping.addRowAlias(rAlias3);
    //add aliases in order
    LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
    rowMap.put(rAlias1.getAlias(), rAlias1);
    rowMap.put(rAlias2.getAlias(), rAlias2);
    rowMap.put(rAlias3.getAlias(), rAlias3);
    mapping.setRowAlias(rowMap);
   
    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    cAlias.setQualifier("qualifier");
    cAlias.setValueType(valueType3);
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    FilterType filter1 = new FilterType();
    filter1.setType("Greater Than Equals");

    RowAliasFilter rowFilter1 = new RowAliasFilter();
    rowFilter1.setFilterType(filter1);
    rowFilter1.setRowAlias(rAlias1);
    rowFilter1.setValue("15");

    FilterType filter2 = new FilterType();
    filter2.setType("Equals");

    RowAliasFilter rowFilter2 = new RowAliasFilter();
    rowFilter2.setFilterType(filter2);
    rowFilter2.setRowAlias(rAlias3);
    rowFilter2.setValue("I am a String15");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter1);
    filters.add(rowFilter2);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setColumnAlias(cAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    scanner.close();
  }
  */

  @Test
  public void testRangeScanSimpleStringRowRegex() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    //rAlias.setLength(8);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    rAlias.setLength(4);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter = new FilterType();
    filter.setType("Pattern Matches");
    rowFilter.setFilterType(filter);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("r*1");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    report.addDesign(design);

    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    for (long i=5; i <7; ++i) {
      assertEquals("row1", results.get(0).get(0));
    }
    scanner.close();
  }
 
  @Test
  public void testRangeScanCompositeRowRegex() throws IOException, CruxException {
      Report report = new Report();
      Mapping mapping = new Mapping();
      mapping.setTableName(TABLE_2);

      RowAlias rAlias1 = new RowAlias();
      rAlias1.setAlias("rowkeyLong");
      rAlias1.setLength(8);
      rAlias1.setId(1l);
      ValueType valueType1 = new ValueType();
      valueType1.setClassName("java.lang.Long");
      rAlias1.setValueType(valueType1);
      rAlias1.setMapping(mapping);

      RowAlias rAlias2 = new RowAlias();
      rAlias2.setAlias("rowkeyInt");
      rAlias2.setLength(4);
      rAlias2.setId(2l);
      ValueType valueType2 = new ValueType();
      valueType2.setClassName("java.lang.Integer");
      rAlias2.setValueType(valueType2);
      rAlias2.setMapping(mapping);

      RowAlias rAlias3 = new RowAlias();
      rAlias3.setAlias("rowkeyString");
      rAlias3.setId(3l);
      rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
      ValueType valueType3 = new ValueType();
      valueType3.setClassName("java.lang.String");
      rAlias3.setValueType(valueType3);
      rAlias3.setMapping(mapping);
     
      //mapping.addRowAlias(rAlias3);
      //add aliases in order
      LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
      rowMap.put(rAlias1.getAlias(), rAlias1);
      rowMap.put(rAlias2.getAlias(), rAlias2);
      rowMap.put(rAlias3.getAlias(), rAlias3);
      mapping.setRowAlias(rowMap);
     
      ColumnAlias cAlias = new ColumnAlias();
      cAlias.setAlias("col");
      cAlias.setColumnFamily("cf");
      cAlias.setQualifier("qualifier");
      cAlias.setValueType(valueType3);
      mapping.addColumnAlias(cAlias);

      ColumnAlias cAlias1 = new ColumnAlias();
      cAlias1.setAlias("col1");
      cAlias1.setColumnFamily("cf1");
      cAlias1.setValueType(valueType1);
      mapping.addColumnAlias(cAlias1);
     
      ColumnAlias cAlias2 = new ColumnAlias();
      cAlias2.setAlias("col2");
      cAlias2.setColumnFamily("cf");
      cAlias2.setQualifier("qualifier1");
      cAlias2.setValueType(valueType3);
      mapping.addColumnAlias(cAlias2);

      RowAliasFilter rowFilter = new RowAliasFilter();
      FilterType filter = new FilterType();
      filter.setType("Pattern Not Matches");
      rowFilter.setFilterType(filter);
      rowFilter.setRowAlias(rAlias3);
      rowFilter.setValue(".*6|.*7");

      ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
      filters.add(rowFilter);
      report.setRowAliasFilters(filters);
     
      ReportDesign design = new ReportDesign();
      design.setColumnAlias(cAlias);
      report.addDesign(design);     
      ReportDesign design1 = new ReportDesign();
      design1.setColumnAlias(cAlias2);
      report.addDesign(design1);     
      ReportDesign design3 = new ReportDesign();
      design3.setRowAlias(rAlias1);
      report.addDesign(design3);
      ReportDesign design4 = new ReportDesign();
      design4.setRowAlias(rAlias2);
      report.addDesign(design4);
      ReportDesign design5 = new ReportDesign();
      design5.setRowAlias(rAlias3);
      report.addDesign(design5);

      HBaseFacade hbaseFacade = new HBaseFacade(pool);
      CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
      assertTrue(scanner instanceof CruxScannerResultScannerImpl);
      CruxResult scanResult = null;
      ArrayList<CruxResult> results = new ArrayList<CruxResult>();
      while ((scanResult = scanner.next()) != null) {
        results.add(scanResult);
        logger.debug("Value is "
            + scanResult.get(0));
        logger.debug("CruxResult is " + scanResult);
       
      }
      assertEquals(8, results.size());
      for (int i=10; i <16; ++i) {
        Object column = results.get(i-10).get(0);
        Object column1 = results.get(i-10).get(1);
       
        assertEquals("value" +i, column);
        assertEquals("I am a sub" +i*2 + " and I am a long", column1);
        assertEquals(new Long(i), results.get(i-10).get(2));
        assertEquals((int) i, results.get(i-10).get(3));
        assertEquals("I am a String" + i, results.get(i-10).get(4));
        assertNull(results.get(i-10).get(5));
      }
      for (int i=18; i <20; ++i) {
        Object column = results.get(i-12).get(0);
        Object column1 = results.get(i-12).get(1);
       
        assertEquals("value" +i, column);
        assertEquals("I am a sub" +i*2 + " and I am a long", column1);
        assertEquals(new Long(i), results.get(i-12).get(2));
        assertEquals((int) i, results.get(i-12).get(3));
        assertEquals("I am a String" + i, results.get(i-12).get(4));
        assertNull(results.get(i-12).get(5));     
      }
      scanner.close();
  }
 
 
  @Test
  public void testRangeScanSimpleStringRowPattern() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(4);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Pattern Matches");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue(".*5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);

    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    design.setReport(report);
    report.addDesign(design);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    assertEquals("row5", results.get(0).get(0));
    scanner.close();   
  }
 
  @Test
  public void testRangeScanSimpleStringRowEndsWith() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    rAlias.setLength(4);
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Ends With");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    design.setReport(report);
    report.addDesign(design);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    assertEquals("row5", results.get(0).get(0));
    scanner.close();   
  }
 
  @Test
  public void testRangeScanSimpleStringRowEndsWithNoLength() throws IOException, CruxException {
    Report report = new Report();
    Mapping mapping = new Mapping();
    mapping.setTableName(TABLE);

    RowAlias rAlias = new RowAlias();
    rAlias.setAlias("rowkey");
    ValueType valueType = new ValueType();
    valueType.setClassName("java.lang.String");
    rAlias.setLength(4);
    rAlias.setValueType(valueType);
    mapping.addRowAlias(rAlias);

    ColumnAlias cAlias = new ColumnAlias();
    cAlias.setAlias("col");
    cAlias.setColumnFamily("cf");
    mapping.addColumnAlias(cAlias);

    ColumnAlias cAlias1 = new ColumnAlias();
    cAlias1.setAlias("col1");
    cAlias1.setColumnFamily("cf1");
    mapping.addColumnAlias(cAlias1);

    RowAliasFilter rowFilter = new RowAliasFilter();
    FilterType filter1 = new FilterType();
    filter1.setType("Ends With");
    rowFilter.setFilterType(filter1);
    rowFilter.setRowAlias(rAlias);
    rowFilter.setValue("5");

    ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
    filters.add(rowFilter);
    report.setRowAliasFilters(filters);
   
    ReportDesign design = new ReportDesign();
    design.setRowAlias(rAlias);
    design.setReport(report);
    report.addDesign(design);
   
    HBaseFacade hbaseFacade = new HBaseFacade(pool);
    CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
    assertTrue(scanner instanceof CruxScannerResultScannerImpl);
    CruxResult scanResult = null;
    ArrayList<CruxResult> results = new ArrayList<CruxResult>();
    while ((scanResult = scanner.next()) != null) {
      results.add(scanResult);
      logger.debug("Value is "
          + scanResult.get(0));
      logger.debug("CruxResult is " + scanResult);
     
    }
    assertEquals(1, results.size());
    assertEquals("row5", results.get(0).get(0));
    scanner.close();
   
  }
 
  @Test
    public void testRangeScanCompositeRowGreaterThanEq() throws IOException, CruxException {
            Report report = new Report();
            Mapping mapping = new Mapping();
            mapping.setTableName(TABLE_2);

            RowAlias rAlias1 = new RowAlias();
            rAlias1.setAlias("rowkeyLong");
            rAlias1.setLength(8);
            rAlias1.setId(1l);
            ValueType valueType1 = new ValueType();
            valueType1.setClassName("java.lang.Long");
            rAlias1.setValueType(valueType1);
            rAlias1.setMapping(mapping);

            RowAlias rAlias2 = new RowAlias();
            rAlias2.setAlias("rowkeyInt");
            rAlias2.setLength(4);
            rAlias2.setId(2l);
            ValueType valueType2 = new ValueType();
            valueType2.setClassName("java.lang.Integer");
            rAlias2.setValueType(valueType2);
            rAlias2.setMapping(mapping);

            RowAlias rAlias3 = new RowAlias();
            rAlias3.setAlias("rowkeyString");
            rAlias3.setId(3l);
            rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
            ValueType valueType3 = new ValueType();
            valueType3.setClassName("java.lang.String");
            rAlias3.setValueType(valueType3);
            rAlias3.setMapping(mapping);
           
            //add aliases in order
            LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
            rowMap.put(rAlias1.getAlias(), rAlias1);
            rowMap.put(rAlias2.getAlias(), rAlias2);
            rowMap.put(rAlias3.getAlias(), rAlias3);
            mapping.setRowAlias(rowMap);
           
            ColumnAlias cAlias = new ColumnAlias();
            cAlias.setAlias("col");
            cAlias.setColumnFamily("cf");
            cAlias.setQualifier("qualifier");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias);

            ColumnAlias cAlias1 = new ColumnAlias();
            cAlias1.setAlias("col1");
            cAlias1.setColumnFamily("cf1");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias1);
           
            ColumnAlias cAlias2 = new ColumnAlias();
            cAlias2.setAlias("col2");
            cAlias2.setColumnFamily("cf");
            cAlias2.setQualifier("qualifier1");
            cAlias2.setValueType(valueType3);
            mapping.addColumnAlias(cAlias2);

            RowAliasFilter rowFilter = new RowAliasFilter();
            FilterType filter = new FilterType();
            filter.setType("Greater Than Equals");
            rowFilter.setFilterType(filter);
            rowFilter.setRowAlias(rAlias3);
            rowFilter.setValue("I am a String17");

            ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
            filters.add(rowFilter);
            report.setRowAliasFilters(filters);
           
      ReportDesign design = new ReportDesign();
      design.setColumnAlias(cAlias);
      report.addDesign(design);     
      ReportDesign design1 = new ReportDesign();
      design1.setColumnAlias(cAlias2);
      report.addDesign(design1);     
      ReportDesign design3 = new ReportDesign();
      design3.setRowAlias(rAlias1);
      report.addDesign(design3);
      ReportDesign design4 = new ReportDesign();
      design4.setRowAlias(rAlias2);
      report.addDesign(design4);
      ReportDesign design5 = new ReportDesign();
      design5.setRowAlias(rAlias3);
      report.addDesign(design5);

            HBaseFacade hbaseFacade = new HBaseFacade(pool);
            CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
            assertTrue(scanner instanceof CruxScannerResultScannerImpl);
            CruxResult scanResult = null;
            ArrayList<CruxResult> results = new ArrayList<CruxResult>();
            while ((scanResult = scanner.next()) != null) {
                results.add(scanResult);
                logger.debug("Value is "
                        + scanResult.get(1));
                logger.debug("CruxResult is " + scanResult);
               
            }
            assertEquals(3, results.size());
      for (int i=17; i <20; ++i) {
        Object column = results.get(i-17).get(0);
        Object column1 = results.get(i-17).get(1);
       
        assertEquals("value" +i, column);
        assertEquals("I am a sub" +i*2 + " and I am a long", column1);
        assertEquals(new Long(i), results.get(i-17).get(2));
        assertEquals((int) i, results.get(i-17).get(3));
        assertEquals("I am a String" + i, results.get(i-17).get(4));
        assertNull(results.get(i-17).get(5));     
      }
      scanner.close();
  }
 
  @Test
    public void testRangeScanCompRowNonAgg() throws IOException, CruxException {
            Report report = new Report();
            Mapping mapping = new Mapping();
            mapping.setTableName(TABLE_2);

            RowAlias rAlias1 = new RowAlias();
            rAlias1.setAlias("rowkeyLong");
            rAlias1.setLength(8);
            rAlias1.setId(1l);
            ValueType valueType1 = new ValueType();
            valueType1.setClassName("java.lang.Long");
            rAlias1.setValueType(valueType1);
            rAlias1.setMapping(mapping);

            RowAlias rAlias2 = new RowAlias();
            rAlias2.setAlias("rowkeyInt");
            rAlias2.setLength(4);
            rAlias2.setId(2l);
            ValueType valueType2 = new ValueType();
            valueType2.setClassName("java.lang.Integer");
            rAlias2.setValueType(valueType2);
            rAlias2.setMapping(mapping);

            RowAlias rAlias3 = new RowAlias();
            rAlias3.setAlias("rowkeyString");
            rAlias3.setId(3l);
            rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
            ValueType valueType3 = new ValueType();
            valueType3.setClassName("java.lang.String");
            rAlias3.setValueType(valueType3);
            rAlias3.setMapping(mapping);
           
            //add aliases in order
            LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
            rowMap.put(rAlias1.getAlias(), rAlias1);
            rowMap.put(rAlias2.getAlias(), rAlias2);
            rowMap.put(rAlias3.getAlias(), rAlias3);
            mapping.setRowAlias(rowMap);
           
            ColumnAlias cAlias = new ColumnAlias();
            cAlias.setAlias("col");
            cAlias.setColumnFamily("cf");
            cAlias.setQualifier("qualifier");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias);

            ColumnAlias cAlias1 = new ColumnAlias();
            cAlias1.setAlias("col1");
            cAlias1.setColumnFamily("cf1");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias1);
           
            ColumnAlias cAlias2 = new ColumnAlias();
            cAlias2.setAlias("col2");
            cAlias2.setColumnFamily("cf");
            cAlias2.setQualifier("qualifier1");
            cAlias2.setValueType(valueType3);
            mapping.addColumnAlias(cAlias2);

            RowAliasFilter rowFilter = new RowAliasFilter();
            FilterType filter = new FilterType();
            filter.setType("Greater Than Equals");
            rowFilter.setFilterType(filter);
            rowFilter.setRowAlias(rAlias3);
            rowFilter.setValue("I am a String17");

            ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
            filters.add(rowFilter);
            report.setRowAliasFilters(filters);
           
            Function upper = TestingUtil.getFunction("upper",
            "co.nubetech.crux.server.functions.UpperCase", false);
       
        ReportDesign design = new ReportDesign();
      design.setColumnAlias(cAlias);
      List<ReportDesignFunction> xFunctions = new ArrayList<ReportDesignFunction>();
      xFunctions.add(TestingUtil.getReportDesignFunction(upper, design));
      design.setReportDesignFunctionList(xFunctions);     
      report.addDesign(design);
     
      ReportDesign design1 = new ReportDesign();
      design1.setColumnAlias(cAlias2);
      List<ReportDesignFunction> yFunctions = new ArrayList<ReportDesignFunction>();
      yFunctions.add(TestingUtil.getReportDesignFunction(upper, design1));
      design1.setReportDesignFunctionList(yFunctions);
      report.addDesign(design1);     

            HBaseFacade hbaseFacade = new HBaseFacade(pool);
            CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
            assertTrue(scanner instanceof CruxScannerResultScannerImpl);
            CruxResult scanResult = null;
            ArrayList<CruxResult> results = new ArrayList<CruxResult>();
            while ((scanResult = scanner.next()) != null) {
                results.add(scanResult);
                logger.debug("Value is "
                        + scanResult.get(1));
                logger.debug("CruxResult is " + scanResult);
               
            }
            assertEquals(3, results.size());
      for (int i=17; i <20; ++i) {
        Object column = results.get(i-17).get(0);
        Object column1 = results.get(i-17).get(1);
       
        assertEquals("VALUE" +i, column);
        assertEquals("I AM A SUB" +i*2 + " AND I AM A LONG", column1);
        assertNull(results.get(i-17).get(5));     
      }
      scanner.close();
  }
 
  @Test
    public void testRangeScanCompRowAgg() throws IOException, CruxException {
            Report report = new Report();
            Mapping mapping = new Mapping();
            mapping.setTableName(TABLE_2);

            RowAlias rAlias1 = new RowAlias();
            rAlias1.setAlias("rowkeyLong");
            rAlias1.setLength(8);
            rAlias1.setId(1l);
            ValueType valueType1 = new ValueType();
            valueType1.setClassName("java.lang.Long");
            rAlias1.setValueType(valueType1);
            rAlias1.setMapping(mapping);

            RowAlias rAlias2 = new RowAlias();
            rAlias2.setAlias("rowkeyInt");
            rAlias2.setLength(4);
            rAlias2.setId(2l);
            ValueType valueType2 = new ValueType();
            valueType2.setClassName("java.lang.Integer");
            rAlias2.setValueType(valueType2);
            rAlias2.setMapping(mapping);

            RowAlias rAlias3 = new RowAlias();
            rAlias3.setAlias("rowkeyString");
            rAlias3.setId(3l);
            rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
            ValueType valueType3 = new ValueType();
            valueType3.setClassName("java.lang.String");
            rAlias3.setValueType(valueType3);
            rAlias3.setMapping(mapping);
           
            //add aliases in order
            LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
            rowMap.put(rAlias1.getAlias(), rAlias1);
            rowMap.put(rAlias2.getAlias(), rAlias2);
            rowMap.put(rAlias3.getAlias(), rAlias3);
            mapping.setRowAlias(rowMap);
           
            ColumnAlias cAlias = new ColumnAlias();
            cAlias.setAlias("col");
            cAlias.setColumnFamily("cf");
            cAlias.setQualifier("qualifier");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias);

            ColumnAlias cAlias1 = new ColumnAlias();
            cAlias1.setAlias("col1");
            cAlias1.setColumnFamily("cf1");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias1);
           
            ColumnAlias cAlias2 = new ColumnAlias();
            cAlias2.setAlias("col2");
            cAlias2.setColumnFamily("cf");
            cAlias2.setQualifier("qualifier1");
            cAlias2.setValueType(valueType3);
            mapping.addColumnAlias(cAlias2);

            FilterType filter1 = new FilterType();
        filter1.setType("Greater Than Equals");

        RowAliasFilter rowFilter1 = new RowAliasFilter();
        rowFilter1.setFilterType(filter1);
        rowFilter1.setRowAlias(rAlias1);
        rowFilter1.setValue("15");

        FilterType filter2 = new FilterType();
        filter2.setType("Equals");

        RowAliasFilter rowFilter2 = new RowAliasFilter();
        rowFilter2.setFilterType(filter2);
        rowFilter2.setRowAlias(rAlias2);
        rowFilter2.setValue("12");
       
        FilterType filter3 = new FilterType();
        filter3.setType("Less Than");

        RowAliasFilter rowFilter3 = new RowAliasFilter();
        rowFilter3.setFilterType(filter3);
        rowFilter3.setRowAlias(rAlias1);
        rowFilter3.setValue("20");

        ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
        filters.add(rowFilter1);
        //filters.add(rowFilter2);
        filters.add(rowFilter3);
        report.setRowAliasFilters(filters);
       
            Function max = TestingUtil.getFunction("max",
            "co.nubetech.crux.server.functions.MaxAggregator", false);
            Function min = TestingUtil.getFunction("max",
            "co.nubetech.crux.server.functions.MinAggregator", false);
       
            ReportDesign design3 = new ReportDesign();
      design3.setRowAlias(rAlias1);
      List<ReportDesignFunction> xFunctions = new ArrayList<ReportDesignFunction>();
      xFunctions.add(TestingUtil.getReportDesignFunction(max, design3));
      design3.setReportDesignFunctionList(xFunctions);     
      report.addDesign(design3);
     
      ReportDesign design4 = new ReportDesign();
      design4.setRowAlias(rAlias1);
      List<ReportDesignFunction> functions = new ArrayList<ReportDesignFunction>();
      functions.add(TestingUtil.getReportDesignFunction(min, design4));
      design4.setReportDesignFunctionList(functions);     
      report.addDesign(design4);
     
      HBaseFacade hbaseFacade = new HBaseFacade(pool);
            CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
            assertTrue(scanner instanceof CruxScannerListImpl);
            CruxResult scanResult = null;
            ArrayList<CruxResult> results = new ArrayList<CruxResult>();
            while ((scanResult = scanner.next()) != null) {
                results.add(scanResult);
                logger.debug("Value is "
                        + scanResult.get(0));
                logger.debug("CruxResult is " + scanResult);
               
            }
            assertEquals(1, results.size());
            assertEquals(19l, results.get(0).get(0));
            assertEquals(15l, results.get(0).get(1));
      scanner.close();
  }
 

  @Test
    public void testRangeScanCompRowAggCol() throws IOException, CruxException {
            Report report = new Report();
            Mapping mapping = new Mapping();
            mapping.setTableName(TABLE_2);

            RowAlias rAlias1 = new RowAlias();
            rAlias1.setAlias("rowkeyLong");
            rAlias1.setLength(8);
            rAlias1.setId(1l);
            ValueType valueType1 = new ValueType();
            valueType1.setClassName("java.lang.Long");
            rAlias1.setValueType(valueType1);
            rAlias1.setMapping(mapping);

            RowAlias rAlias2 = new RowAlias();
            rAlias2.setAlias("rowkeyInt");
            rAlias2.setLength(4);
            rAlias2.setId(2l);
            ValueType valueType2 = new ValueType();
            valueType2.setClassName("java.lang.Integer");
            rAlias2.setValueType(valueType2);
            rAlias2.setMapping(mapping);

            RowAlias rAlias3 = new RowAlias();
            rAlias3.setAlias("rowkeyString");
            rAlias3.setId(3l);
            rAlias3.setLength((int) Bytes.toBytes("I am a String" + 11).length);
            ValueType valueType3 = new ValueType();
            valueType3.setClassName("java.lang.String");
            rAlias3.setValueType(valueType3);
            rAlias3.setMapping(mapping);
           
            //add aliases in order
            LinkedHashMap<String, RowAlias> rowMap = new LinkedHashMap<String, RowAlias>();
            rowMap.put(rAlias1.getAlias(), rAlias1);
            rowMap.put(rAlias2.getAlias(), rAlias2);
            rowMap.put(rAlias3.getAlias(), rAlias3);
            mapping.setRowAlias(rowMap);
           
            ColumnAlias cAlias = new ColumnAlias();
            cAlias.setAlias("col");
            cAlias.setColumnFamily("cf");
            cAlias.setQualifier("qualifier");
            cAlias.setValueType(valueType3);
            mapping.addColumnAlias(cAlias);

            ColumnAlias cAlias1 = new ColumnAlias();
            cAlias1.setAlias("col1");
            cAlias1.setColumnFamily("cf1");
            cAlias1.setQualifier("qualifier2");
            ValueType valueType4 = new ValueType();
            valueType4.setClassName("java.lang.Double");           
            cAlias1.setValueType(valueType4);
            mapping.addColumnAlias(cAlias1);
           
            ColumnAlias cAlias2 = new ColumnAlias();
            cAlias2.setAlias("col2");
            cAlias2.setColumnFamily("cf");
            cAlias2.setQualifier("qualifier1");
            cAlias2.setValueType(valueType3);
            mapping.addColumnAlias(cAlias2);

            FilterType filter1 = new FilterType();
        filter1.setType("Greater Than Equals");

        RowAliasFilter rowFilter1 = new RowAliasFilter();
        rowFilter1.setFilterType(filter1);
        rowFilter1.setRowAlias(rAlias1);
        rowFilter1.setValue("15");

        FilterType filter2 = new FilterType();
        filter2.setType("Equals");

        RowAliasFilter rowFilter2 = new RowAliasFilter();
        rowFilter2.setFilterType(filter2);
        rowFilter2.setRowAlias(rAlias2);
        rowFilter2.setValue("12");
       
        FilterType filter3 = new FilterType();
        filter3.setType("Less Than");

        RowAliasFilter rowFilter3 = new RowAliasFilter();
        rowFilter3.setFilterType(filter3);
        rowFilter3.setRowAlias(rAlias1);
        rowFilter3.setValue("20");

        ArrayList<RowAliasFilter> filters = new ArrayList<RowAliasFilter>();
        filters.add(rowFilter1);
        //filters.add(rowFilter2);
        filters.add(rowFilter3);
        report.setRowAliasFilters(filters);
       
            Function max = TestingUtil.getFunction("max",
            "co.nubetech.crux.server.functions.MaxAggregator", true);
            Function min = TestingUtil.getFunction("max",
            "co.nubetech.crux.server.functions.MinAggregator", true);

            Function sum = TestingUtil.getFunction("sum",
            "co.nubetech.crux.server.functions.SumDoubleAggregator", true);
       
            ReportDesign design3 = new ReportDesign();
      design3.setRowAlias(rAlias1);
      List<ReportDesignFunction> xFunctions = new ArrayList<ReportDesignFunction>();
      xFunctions.add(TestingUtil.getReportDesignFunction(max, design3));
      design3.setReportDesignFunctionList(xFunctions);     
      report.addDesign(design3);
     
      ReportDesign design4 = new ReportDesign();
      design4.setRowAlias(rAlias1);
      List<ReportDesignFunction> functions = new ArrayList<ReportDesignFunction>();
      functions.add(TestingUtil.getReportDesignFunction(min, design4));
      design4.setReportDesignFunctionList(functions);     
      report.addDesign(design4);

      ReportDesign design5 = new ReportDesign();
      design5.setColumnAlias(cAlias1);
      List<ReportDesignFunction> cfunctions = new ArrayList<ReportDesignFunction>();
      cfunctions.add(TestingUtil.getReportDesignFunction(sum, design5));
      design5.setReportDesignFunctionList(cfunctions);     
      report.addDesign(design5);
     
      HBaseFacade hbaseFacade = new HBaseFacade(pool);
            CruxScanner scanner = hbaseFacade.execute(connection, report, mapping);
            assertTrue(scanner instanceof CruxScannerListImpl);
            CruxResult scanResult = null;
            ArrayList<CruxResult> results = new ArrayList<CruxResult>();
            while ((scanResult = scanner.next()) != null) {
                results.add(scanResult);
                logger.debug("Value is "
                        + scanResult.get(0));
                logger.debug("CruxResult is " + scanResult);
               
            }
            assertEquals(1, results.size());
            assertEquals(19l, results.get(0).get(0));
            assertEquals(15l, results.get(0).get(1));
            assertEquals(85*2.5d, results.get(0).get(2));
      scanner.close();
  }
}
TOP

Related Classes of co.nubetech.crux.server.TestHBaseFacade

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.