Skip to content

Commit

Permalink
Added slice queries and slice ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
wolpert committed Oct 26, 2010
1 parent 76ed841 commit 39592c5
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 5 deletions.
66 changes: 66 additions & 0 deletions grails-app/services/codehead/CassandraService.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,72 @@ class CassandraService {
}
}

/**
* TODO: Test having a super column
* @param keys Array of keys, could be an array of one
* @param cf
* @param columnRangeStart
* @param columnRangeEnd
* @param valueClass
* @param reverse
* @param count
* @return
*/
def getValuesSliceRange(keys,cf,scName=null,columnRangeStart,columnRangeEnd,valueClass,reverse,count){
if(!(keys instanceof ArrayList)){
keys = [keys]
}
def q
q = HFactory.createMultigetSliceQuery(keyspace(),serializer(keys[0]),serializer(columnRangeStart),serializer(valueClass));
q.setColumnFamily(cf)
q.setKeys(keys as Object[])
q.setRange(columnRangeStart,columnRangeEnd,reverse,count)
def qr = q.execute()
def rows=qr.get()
def result = [:]
rows.each{row->
def key=row.getKey()
def cols=row.getColumnSlice().getColumns()
def data=[:]
cols.each{data[it.getName()]=it.getValue()}
result[key]=data
}
return result
}

/**
* TODO: Test having a super column
* @param keys Array of keys, could be an array of one
* @param cf
* @param columnNames array of names, could be an array of one
* @param valueClass
* @return
*/
def getValuesSlice(keys,cf,scName=null,columnNames,valueClass){
if(!(keys instanceof ArrayList)){
keys = [keys]
}
if(columnNames==null || columnNames.size()==0){
return [:]
}
def q
q = HFactory.createMultigetSliceQuery(keyspace(),serializer(keys[0]),serializer(columnNames[0]),serializer(valueClass));
q.setColumnFamily(cf)
q.setKeys(keys as Object[])
q.setColumnNames(columnNames as Object[])
def qr = q.execute()
def rows=qr.get()
def result = [:]
rows.each{row->
def key=row.getKey()
def cols=row.getColumnSlice().getColumns()
def data=[:]
cols.each{data[it.getName()]=it.getValue()}
result[key]=data
}
return result
}

/**
* Returns a map of all values for the column and/or super column
* TODO: Test NOT having a super column
Expand Down
87 changes: 82 additions & 5 deletions test/unit/codehead/CassandraServiceTests.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -272,8 +272,6 @@ class CassandraServiceTests extends GrailsUnitTestCase {
}



//TODO: groovy this...
void testSubColumnQuery() {
String cf = "Super1";

Expand Down Expand Up @@ -303,7 +301,24 @@ class CassandraServiceTests extends GrailsUnitTestCase {
deleteColumns(cleanup);
}

//TODO: groovy this...
void testSubColumnQueryGroovy() {
String cf = "Super1";

TestCleanupDescriptor cleanup = insertSuperColumns(cf, 1, "testSubColumnQuery", 1, "testSubColumnQuerySuperColumn");

// get value
assertEquals("v000",cassandraService.getValue("testSubColumnQuery0",cf,"testSubColumnQuerySuperColumn0","c000",String.class))

// get nonexisting value
assertNull(cassandraService.getValue("testSubColumnQuery0",cf,"testSubColumnQuerySuperColumn0","column doesn't exist",String.class))

// remove value
deleteColumns(cleanup);

// validate removed finished
assertNull(cassandraService.getValue("testSubColumnQuery0",cf,"testSubColumnQuerySuperColumn0","c000",String.class))
}

void testMultigetSliceQuery() {
String cf = "Standard1";

Expand Down Expand Up @@ -359,8 +374,69 @@ class CassandraServiceTests extends GrailsUnitTestCase {

deleteColumns(cleanup);
}

void testMultigetSliceQueryGroovy() {
String cf = "Standard1";

TestCleanupDescriptor cleanup = insertColumns(cf, 4, "testMultigetSliceQuery", 4,
"testMultigetSliceQueryColumn");

// get value
def result = cassandraService.getValuesSlice(["testMultigetSliceQuery1", "testMultigetSliceQuery2"],cf,["testMultigetSliceQueryColumn1", "testMultigetSliceQueryColumn2"],String.class)
assertEquals(2,result.size())
assertEquals(2,result["testMultigetSliceQuery1"].size())
assertEquals(2,result["testMultigetSliceQuery2"].size())
assertEquals("value11", result["testMultigetSliceQuery1"]["testMultigetSliceQueryColumn1"]);
assertEquals("value12", result["testMultigetSliceQuery1"]["testMultigetSliceQueryColumn2"]);
assertNull(result["testMultigetSliceQueryColumn3"]);

// now try with start/finish
result = cassandraService.getValuesSliceRange(["testMultigetSliceQuery3"],cf,"testMultigetSliceQueryColumn1", "testMultigetSliceQueryColumn3",String.class,false,100)
assertNotNull(result)
assertEquals(1,result.size())
result=result["testMultigetSliceQuery3"]
assertNotNull(result)
assertEquals(3,result.size())
assertEquals("value31",result["testMultigetSliceQueryColumn1"])
assertEquals("value32",result["testMultigetSliceQueryColumn2"])
assertEquals("value33",result["testMultigetSliceQueryColumn3"])

deleteColumns(cleanup);
}


//TODO: groovy this...

void testSliceQueryGroovy() {
String cf = "Standard1";

TestCleanupDescriptor cleanup = insertColumns(cf, 1, "testSliceQuery", 4, "testSliceQuery");

// get value
def result = cassandraService.getValuesSlice("testSliceQuery0",cf,["testSliceQuery1", "testSliceQuery2", "testSliceQuery3"],String.class)
assertNotNull(result)
println("Result:" +result)
assertEquals(1,result.size())
result=result['testSliceQuery0']
assertNotNull(result)
assertEquals(3,result.size())
assertEquals("value01", result["testSliceQuery1"]);
assertEquals("value02", result["testSliceQuery2"]);
assertEquals("value03", result["testSliceQuery3"]);

// now try with start/finish
// try reversed this time
result = cassandraService.getValuesSliceRange("testSliceQuery0",cf,"testSliceQuery2", "testSliceQuery1",String.class,true,100)
assertNotNull(result);
assertEquals(1,result.size())
result=result['testSliceQuery0']
assertNotNull(result)
assertEquals(2,result.size())
assertEquals("value01", result["testSliceQuery1"]);
assertEquals("value02", result["testSliceQuery2"]);

deleteColumns(cleanup);
}

void testSliceQuery() {
String cf = "Standard1";

Expand Down Expand Up @@ -406,7 +482,8 @@ class CassandraServiceTests extends GrailsUnitTestCase {

deleteColumns(cleanup);
}



//TODO: groovy this...
void testSuperSliceQuery() {
String cf = "Super1";
Expand Down

0 comments on commit 39592c5

Please sign in to comment.