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'])