package me.prettyprint.cassandra.model; import static me.prettyprint.hector.api.factory.HFactory.createColumn; import static me.prettyprint.hector.api.factory.HFactory.createKeyspace; import static me.prettyprint.hector.api.factory.HFactory.createMutator; import static me.prettyprint.hector.api.factory.HFactory.getOrCreateCluster; import static org.junit.Assert.*; import me.prettyprint.cassandra.BaseEmbededServerSetupTest; import me.prettyprint.cassandra.serializers.LongSerializer; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.hector.api.Cluster; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.beans.OrderedRows; import me.prettyprint.hector.api.beans.Row; import me.prettyprint.hector.api.factory.HFactory; import me.prettyprint.hector.api.query.QueryResult; import me.prettyprint.hector.api.query.RangeSlicesQuery; import org.junit.Before; import org.junit.Test; public class RangeSlicesQueryTest extends BaseEmbededServerSetupTest { private final static String KEYSPACE = "Keyspace1"; private static final StringSerializer se = new StringSerializer(); private static final LongSerializer le = new LongSerializer(); private Cluster cluster; private Keyspace keyspace; private String cf = "Indexed1"; @Before public void setupCase() { cluster = getOrCreateCluster("MyCluster", "127.0.0.1:9170"); keyspace = createKeyspace(KEYSPACE, cluster); createMutator(keyspace, se) .addInsertion("rangeSlicesTest_key1", cf, createColumn("birthyear", 1974L, se, le)) .addInsertion("rangeSlicesTest_key1", cf, createColumn("birthmonth", 4L, se, le)) .addInsertion("rangeSlicesTest_key2", cf, createColumn("birthyear", 1975L, se, le)) .addInsertion("rangeSlicesTest_key2", cf, createColumn("birthmonth", 4L, se, le)) .addInsertion("rangeSlicesTest_key3", cf, createColumn("birthyear", 1975L, se, le)) .addInsertion("rangeSlicesTest_key3", cf, createColumn("birthmonth", 5L, se, le)) .addInsertion("rangeSlicesTest_key4", cf, createColumn("birthyear", 1975L, se, le)) .addInsertion("rangeSlicesTest_key4", cf, createColumn("birthmonth", 6L, se, le)) .addInsertion("rangeSlicesTest_key5", cf, createColumn("birthyear", 1975L, se, le)) .addInsertion("rangeSlicesTest_key5", cf, createColumn("birthmonth", 7L, se, le)) .addInsertion("rangeSlicesTest_key6", cf, createColumn("birthyear", 1976L, se, le)) .addInsertion("rangeSlicesTest_key6", cf, createColumn("birthmonth", 6L, se, le)) .execute(); } @Test public void testKeysOnlyPredicate() { RangeSlicesQuery<String, String, Long> rangeSlicesQuery = HFactory.createRangeSlicesQuery(keyspace, se, se, le); QueryResult<OrderedRows<String, String, Long>> result = rangeSlicesQuery.setColumnFamily(cf).setKeys("", "").setReturnKeysOnly().execute(); OrderedRows<String, String, Long> orderedRows = result.get(); Row<String, String, Long> row = orderedRows.iterator().next(); assertNotNull(row.getKey()); assertEquals(0,row.getColumnSlice().getColumns().size()); result = rangeSlicesQuery.setColumnNames("birthyear","birthmonth").setRowCount(5).execute(); orderedRows = result.get(); row = orderedRows.iterator().next(); assertNotNull(row.getKey()); assertEquals(2,row.getColumnSlice().getColumns().size()); } @Test public void testInsertGetRemove() { RangeSlicesQuery<String, String, Long> rangeSlicesQuery = HFactory.createRangeSlicesQuery(keyspace, se, se, le); rangeSlicesQuery.addEqualsExpression("birthyear", 1975L); rangeSlicesQuery.setColumnNames("birthmonth"); rangeSlicesQuery.setReturnKeysOnly(); rangeSlicesQuery.setColumnFamily(cf); rangeSlicesQuery.setKeys("", ""); QueryResult<OrderedRows<String, String, Long>> result = rangeSlicesQuery.execute(); assertEquals(4, result.get().getList().size()); } @Test public void testMultiClause() { QueryResult<OrderedRows<String, String, Long>> result = new IndexedSlicesQuery<String, String, Long>(keyspace, se, se, le) .addEqualsExpression("birthyear", 1975L) .addGteExpression("birthmonth", 4L) .addLteExpression("birthmonth", 6L) .setColumnNames("birthyear") .setColumnFamily(cf) .setStartKey("") .execute(); assertEquals(3, result.get().getList().size()); } @Test public void testEqClauseMiss() { QueryResult<OrderedRows<String, String, Long>> result = new IndexedSlicesQuery<String, String, Long>(keyspace, se, se, le) .addEqualsExpression("birthyear", 5L) .addGteExpression("birthmonth", 4L) .addLteExpression("birthmonth", 6L) .setColumnNames("birthyear") .setColumnFamily(cf) .setStartKey("") .execute(); assertEquals(0, result.get().getList().size()); } }