You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/07/22 23:13:36 UTC
svn commit: r796881 - in /incubator/cassandra/trunk:
src/java/org/apache/cassandra/service/CassandraServer.java
test/system/test_server.py
Author: jbellis
Date: Wed Jul 22 21:13:35 2009
New Revision: 796881
URL: http://svn.apache.org/viewvc?rev=796881&view=rev
Log:
return columns from desc query in desc order. patch by Jun Rao; reviewed by jbellis for CASSANDRA-196
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
incubator/cassandra/trunk/test/system/test_server.py
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java?rev=796881&r1=796880&r2=796881&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java Wed Jul 22 21:13:35 2009
@@ -101,6 +101,11 @@
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())
{
return EMPTY_COLUMNS;
@@ -117,6 +122,8 @@
thriftColumns.add(thrift_column);
}
+ if (reverseOrder)
+ Collections.reverse(thriftColumns);
return thriftColumns;
}
@@ -124,6 +131,11 @@
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 @@
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)
@@ -306,6 +318,11 @@
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())
{
return EMPTY_SUPERCOLUMNS;
@@ -322,6 +339,9 @@
thriftSuperColumns.add(new SuperColumn(column.name(), subcolumns));
}
+ if (reverseOrder)
+ Collections.reverse(thriftSuperColumns);
+
return thriftSuperColumns;
}
@@ -340,7 +360,7 @@
return EMPTY_SUPERCOLUMNS;
}
Collection<IColumn> columns = cfamily.getSortedColumns();
- return thriftifySuperColumns(columns);
+ return thriftifySuperColumns(columns, !is_ascending);
}
Modified: incubator/cassandra/trunk/test/system/test_server.py
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/system/test_server.py?rev=796881&r1=796880&r2=796881&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/system/test_server.py (original)
+++ incubator/cassandra/trunk/test/system/test_server.py Wed Jul 22 21:13:35 2009
@@ -71,13 +71,35 @@
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 @@
_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'])