return columns from desc query in desc order. patch by Jun Rao; reviewed by jbellis for CASSANDRA-196

git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@796881 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2009-07-22 21:13:35 +00:00
parent 6441803ba1
commit 058eef0806
2 changed files with 50 additions and 4 deletions

View File

@ -100,6 +100,11 @@ public class CassandraServer implements Cassandra.Iface
}
public List<Column> thriftifyColumns(Collection<IColumn> columns)
{
return thriftifyColumns(columns, false);
}
public List<Column> thriftifyColumns(Collection<IColumn> columns, boolean reverseOrder)
{
if (columns == null || columns.isEmpty())
{
@ -117,6 +122,8 @@ public class CassandraServer implements Cassandra.Iface
thriftColumns.add(thrift_column);
}
if (reverseOrder)
Collections.reverse(thriftColumns);
return thriftColumns;
}
@ -124,6 +131,11 @@ public class CassandraServer implements Cassandra.Iface
private List<Column> getSlice(ReadCommand command) throws InvalidRequestException
{
ColumnFamily cfamily = readColumnFamily(command);
boolean reverseOrder = false;
if (command instanceof SliceFromReadCommand)
reverseOrder = !((SliceFromReadCommand)command).isAscending;
if (cfamily == null || cfamily.getColumnsMap().size() == 0)
{
return EMPTY_COLUMNS;
@ -131,9 +143,9 @@ public class CassandraServer implements Cassandra.Iface
if (cfamily.isSuper())
{
IColumn column = cfamily.getColumnsMap().values().iterator().next();
return thriftifyColumns(column.getSubColumns());
return thriftifyColumns(column.getSubColumns(), reverseOrder);
}
return thriftifyColumns(cfamily.getSortedColumns());
return thriftifyColumns(cfamily.getSortedColumns(), reverseOrder);
}
public List<Column> get_slice_by_names(String table, String key, ColumnParent column_parent, List<byte[]> column_names)
@ -305,6 +317,11 @@ public class CassandraServer implements Cassandra.Iface
}
private List<SuperColumn> thriftifySuperColumns(Collection<IColumn> columns)
{
return thriftifySuperColumns(columns, false);
}
private List<SuperColumn> thriftifySuperColumns(Collection<IColumn> columns, boolean reverseOrder)
{
if (columns == null || columns.isEmpty())
{
@ -322,6 +339,9 @@ public class CassandraServer implements Cassandra.Iface
thriftSuperColumns.add(new SuperColumn(column.name(), subcolumns));
}
if (reverseOrder)
Collections.reverse(thriftSuperColumns);
return thriftSuperColumns;
}
@ -340,7 +360,7 @@ public class CassandraServer implements Cassandra.Iface
return EMPTY_SUPERCOLUMNS;
}
Collection<IColumn> columns = cfamily.getSortedColumns();
return thriftifySuperColumns(columns);
return thriftifySuperColumns(columns, !is_ascending);
}

View File

@ -71,13 +71,35 @@ def _verify_range():
assert result[0].name == 'c1'
assert result[1].name == 'c2'
result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'c3', 'c2', False, 1000)
assert len(result) == 2
assert result[0].name == 'c3'
assert result[1].name == 'c2'
result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 1000)
assert len(result) == 3, result
result = client.get_slice('Table1','key1', ColumnParent('Standard1'), 'a', 'z' , True, 2)
assert len(result) == 2, result
def _insert_super_range():
client.insert('Table1', 'key1', ColumnPath('Super1', 'sc1', _i64(4)), 'value4', 0, False)
client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', _i64(5)), 'value5', 0, False)
client.insert('Table1', 'key1', ColumnPath('Super1', 'sc2', _i64(6)), 'value6', 0, False)
client.insert('Table1', 'key1', ColumnPath('Super1', 'sc3', _i64(7)), 'value7', 0, False)
time.sleep(0.1)
def _verify_super_range():
result = client.get_slice_super('Table1','key1', 'Super1', 'sc2', 'sc3', True, 2)
assert len(result) == 2
assert result[0].name == 'sc2'
assert result[1].name == 'sc3'
result = client.get_slice_super('Table1','key1', 'Super1', 'sc3', 'sc2', False, 2)
assert len(result) == 2
assert result[0].name == 'sc3'
assert result[1].name == 'sc2'
def _verify_super(supercf='Super1'):
assert client.get_column('Table1', 'key1', ColumnPath(supercf, 'sc1', _i64(4))) == Column(_i64(4), 'value4', 0)
slice = client.get_slice_super('Table1', 'key1', 'Super1', '', '', True, 1000)
@ -316,6 +338,10 @@ class TestMutations(CassandraTester):
_insert_range()
_verify_range()
def test_get_slice_super_range(self):
_insert_super_range()
_verify_super_range()
def test_get_slice_by_names(self):
_insert_range()
result = client.get_slice_by_names('Table1','key1', ColumnParent('Standard1'), ['c1', 'c2'])