mirror of https://github.com/apache/cassandra
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:
parent
6441803ba1
commit
058eef0806
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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'])
|
||||
|
|
|
|||
Loading…
Reference in New Issue