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/07 17:40:47 UTC

svn commit: r791872 [1/2] - in /incubator/cassandra/trunk: ./ interface/ interface/gen-java/org/apache/cassandra/service/ src/java/org/apache/cassandra/cli/ src/java/org/apache/cassandra/cql/common/ src/java/org/apache/cassandra/db/ src/java/org/apache...

Author: jbellis
Date: Tue Jul  7 15:40:46 2009
New Revision: 791872

URL: http://svn.apache.org/viewvc?rev=791872&view=rev
Log:
combine range version of get_slice into get_slice itself.
patch by jbellis; reviewed by Michael Greene for CASSANDRA-277

Removed:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/RangeFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceByRangeReadCommand.java
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/RangeFilterTest.java
Modified:
    incubator/cassandra/trunk/CHANGES.txt
    incubator/cassandra/trunk/interface/cassandra.thrift
    incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ReadCommand.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
    incubator/cassandra/trunk/test/system/test_server.py
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/ReadMessageTest.java
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java

Modified: incubator/cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/CHANGES.txt?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/CHANGES.txt (original)
+++ incubator/cassandra/trunk/CHANGES.txt Tue Jul  7 15:40:46 2009
@@ -1,7 +1,9 @@
 0.4 dev
- * Change signature of get_slice and get_slice_super to require a starting
-   column instead of an offset.  (This allows use of indexes.)  Added
-   "ascending" flag to allow reasonably-efficient reverse scans as well.
+ * Change signature of get_slice and get_slice_super to accept
+   starting and ending columns as well as an offset.  (This allows use
+   of indexes.)  Added "ascending" flag to allow reasonably-efficient
+   reverse scans as well.  Removed get_slice_by_range as redundant.
+ * Similarly, changed signature of get_slice_super.
  * Removed the web interface. Node information can now be obtained by 
    using the newly introduced nodeprobe utility.
 

Modified: incubator/cassandra/trunk/interface/cassandra.thrift
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/cassandra.thrift?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/cassandra.thrift (original)
+++ incubator/cassandra/trunk/interface/cassandra.thrift Tue Jul  7 15:40:46 2009
@@ -101,13 +101,10 @@
 
 
 service Cassandra {
-  list<column_t> get_slice_by_name_range(1:string tablename, 2:string key, 3:string columnParent, 4:string start, 5:string finish, 6:i32 count=100)
-  throws (1: InvalidRequestException ire, 2: NotFoundException nfe),
-  
   list<column_t> get_slice_by_names(1:string tablename, 2:string key, 3:string columnParent, 4:list<string> columnNames)
   throws (1: InvalidRequestException ire, 2: NotFoundException nfe),
   
-  list<column_t> get_slice(1:string tablename, 2:string key, 3:string columnParent, 4:bool isAscending, 5:i32 offset, 6:i32 count=100)
+  list<column_t> get_slice(1:string tablename, 2:string key, 3:string columnParent, 4:string start, 5:string finish, 6:bool isAscending, 7:i32 offset, 8:i32 count=100)
   throws (1: InvalidRequestException ire, 2: NotFoundException nfe),
 
   column_t       get_column(1:string tablename, 2:string key, 3:string columnPath)
@@ -128,7 +125,7 @@
   list<column_t> get_columns_since(1:string tablename, 2:string key, 3:string columnParent, 4:i64 timeStamp)
   throws (1: InvalidRequestException ire, 2: NotFoundException nfe),
 
-  list<superColumn_t> get_slice_super(1:string tablename, 2:string key, 3:string columnFamily, 4:bool isAscending, 5:i32 offset, 6:i32 count=100)
+  list<superColumn_t> get_slice_super(1:string tablename, 2:string key, 3:string columnFamily, 4:string start, 5:string finish, 6:bool isAscending, 7:i32 offset, 8:i32 count=100)
   throws (1: InvalidRequestException ire),
 
   list<superColumn_t> get_slice_super_by_names(1:string tablename, 2:string key, 3:string columnFamily, 4:list<string> superColumnNames)

Modified: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java (original)
+++ incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/Cassandra.java Tue Jul  7 15:40:46 2009
@@ -22,11 +22,9 @@
 
   public interface Iface {
 
-    public List<column_t> get_slice_by_name_range(String tablename, String key, String columnParent, String start, String finish, int count) throws InvalidRequestException, NotFoundException, TException;
-
     public List<column_t> get_slice_by_names(String tablename, String key, String columnParent, List<String> columnNames) throws InvalidRequestException, NotFoundException, TException;
 
-    public List<column_t> get_slice(String tablename, String key, String columnParent, boolean isAscending, int offset, int count) throws InvalidRequestException, NotFoundException, TException;
+    public List<column_t> get_slice(String tablename, String key, String columnParent, String start, String finish, boolean isAscending, int offset, int count) throws InvalidRequestException, NotFoundException, TException;
 
     public column_t get_column(String tablename, String key, String columnPath) throws InvalidRequestException, NotFoundException, TException;
 
@@ -40,7 +38,7 @@
 
     public List<column_t> get_columns_since(String tablename, String key, String columnParent, long timeStamp) throws InvalidRequestException, NotFoundException, TException;
 
-    public List<superColumn_t> get_slice_super(String tablename, String key, String columnFamily, boolean isAscending, int offset, int count) throws InvalidRequestException, TException;
+    public List<superColumn_t> get_slice_super(String tablename, String key, String columnFamily, String start, String finish, boolean isAscending, int offset, int count) throws InvalidRequestException, TException;
 
     public List<superColumn_t> get_slice_super_by_names(String tablename, String key, String columnFamily, List<String> superColumnNames) throws InvalidRequestException, TException;
 
@@ -87,50 +85,6 @@
       return this.oprot_;
     }
 
-    public List<column_t> get_slice_by_name_range(String tablename, String key, String columnParent, String start, String finish, int count) throws InvalidRequestException, NotFoundException, TException
-    {
-      send_get_slice_by_name_range(tablename, key, columnParent, start, finish, count);
-      return recv_get_slice_by_name_range();
-    }
-
-    public void send_get_slice_by_name_range(String tablename, String key, String columnParent, String start, String finish, int count) throws TException
-    {
-      oprot_.writeMessageBegin(new TMessage("get_slice_by_name_range", TMessageType.CALL, seqid_));
-      get_slice_by_name_range_args args = new get_slice_by_name_range_args();
-      args.tablename = tablename;
-      args.key = key;
-      args.columnParent = columnParent;
-      args.start = start;
-      args.finish = finish;
-      args.count = count;
-      args.write(oprot_);
-      oprot_.writeMessageEnd();
-      oprot_.getTransport().flush();
-    }
-
-    public List<column_t> recv_get_slice_by_name_range() throws InvalidRequestException, NotFoundException, TException
-    {
-      TMessage msg = iprot_.readMessageBegin();
-      if (msg.type == TMessageType.EXCEPTION) {
-        TApplicationException x = TApplicationException.read(iprot_);
-        iprot_.readMessageEnd();
-        throw x;
-      }
-      get_slice_by_name_range_result result = new get_slice_by_name_range_result();
-      result.read(iprot_);
-      iprot_.readMessageEnd();
-      if (result.isSetSuccess()) {
-        return result.success;
-      }
-      if (result.ire != null) {
-        throw result.ire;
-      }
-      if (result.nfe != null) {
-        throw result.nfe;
-      }
-      throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_slice_by_name_range failed: unknown result");
-    }
-
     public List<column_t> get_slice_by_names(String tablename, String key, String columnParent, List<String> columnNames) throws InvalidRequestException, NotFoundException, TException
     {
       send_get_slice_by_names(tablename, key, columnParent, columnNames);
@@ -173,19 +127,21 @@
       throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_slice_by_names failed: unknown result");
     }
 
-    public List<column_t> get_slice(String tablename, String key, String columnParent, boolean isAscending, int offset, int count) throws InvalidRequestException, NotFoundException, TException
+    public List<column_t> get_slice(String tablename, String key, String columnParent, String start, String finish, boolean isAscending, int offset, int count) throws InvalidRequestException, NotFoundException, TException
     {
-      send_get_slice(tablename, key, columnParent, isAscending, offset, count);
+      send_get_slice(tablename, key, columnParent, start, finish, isAscending, offset, count);
       return recv_get_slice();
     }
 
-    public void send_get_slice(String tablename, String key, String columnParent, boolean isAscending, int offset, int count) throws TException
+    public void send_get_slice(String tablename, String key, String columnParent, String start, String finish, boolean isAscending, int offset, int count) throws TException
     {
       oprot_.writeMessageBegin(new TMessage("get_slice", TMessageType.CALL, seqid_));
       get_slice_args args = new get_slice_args();
       args.tablename = tablename;
       args.key = key;
       args.columnParent = columnParent;
+      args.start = start;
+      args.finish = finish;
       args.isAscending = isAscending;
       args.offset = offset;
       args.count = count;
@@ -456,19 +412,21 @@
       throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_columns_since failed: unknown result");
     }
 
-    public List<superColumn_t> get_slice_super(String tablename, String key, String columnFamily, boolean isAscending, int offset, int count) throws InvalidRequestException, TException
+    public List<superColumn_t> get_slice_super(String tablename, String key, String columnFamily, String start, String finish, boolean isAscending, int offset, int count) throws InvalidRequestException, TException
     {
-      send_get_slice_super(tablename, key, columnFamily, isAscending, offset, count);
+      send_get_slice_super(tablename, key, columnFamily, start, finish, isAscending, offset, count);
       return recv_get_slice_super();
     }
 
-    public void send_get_slice_super(String tablename, String key, String columnFamily, boolean isAscending, int offset, int count) throws TException
+    public void send_get_slice_super(String tablename, String key, String columnFamily, String start, String finish, boolean isAscending, int offset, int count) throws TException
     {
       oprot_.writeMessageBegin(new TMessage("get_slice_super", TMessageType.CALL, seqid_));
       get_slice_super_args args = new get_slice_super_args();
       args.tablename = tablename;
       args.key = key;
       args.columnFamily = columnFamily;
+      args.start = start;
+      args.finish = finish;
       args.isAscending = isAscending;
       args.offset = offset;
       args.count = count;
@@ -795,7 +753,6 @@
     public Processor(Iface iface)
     {
       iface_ = iface;
-      processMap_.put("get_slice_by_name_range", new get_slice_by_name_range());
       processMap_.put("get_slice_by_names", new get_slice_by_names());
       processMap_.put("get_slice", new get_slice());
       processMap_.put("get_column", new get_column());
@@ -840,36 +797,6 @@
       return true;
     }
 
-    private class get_slice_by_name_range implements ProcessFunction {
-      public void process(int seqid, TProtocol iprot, TProtocol oprot) throws TException
-      {
-        get_slice_by_name_range_args args = new get_slice_by_name_range_args();
-        args.read(iprot);
-        iprot.readMessageEnd();
-        get_slice_by_name_range_result result = new get_slice_by_name_range_result();
-        try {
-          result.success = iface_.get_slice_by_name_range(args.tablename, args.key, args.columnParent, args.start, args.finish, args.count);
-        } catch (InvalidRequestException ire) {
-          result.ire = ire;
-        } catch (NotFoundException nfe) {
-          result.nfe = nfe;
-        } catch (Throwable th) {
-          LOGGER.error("Internal error processing get_slice_by_name_range", th);
-          TApplicationException x = new TApplicationException(TApplicationException.INTERNAL_ERROR, "Internal error processing get_slice_by_name_range");
-          oprot.writeMessageBegin(new TMessage("get_slice_by_name_range", TMessageType.EXCEPTION, seqid));
-          x.write(oprot);
-          oprot.writeMessageEnd();
-          oprot.getTransport().flush();
-          return;
-        }
-        oprot.writeMessageBegin(new TMessage("get_slice_by_name_range", TMessageType.REPLY, seqid));
-        result.write(oprot);
-        oprot.writeMessageEnd();
-        oprot.getTransport().flush();
-      }
-
-    }
-
     private class get_slice_by_names implements ProcessFunction {
       public void process(int seqid, TProtocol iprot, TProtocol oprot) throws TException
       {
@@ -908,7 +835,7 @@
         iprot.readMessageEnd();
         get_slice_result result = new get_slice_result();
         try {
-          result.success = iface_.get_slice(args.tablename, args.key, args.columnParent, args.isAscending, args.offset, args.count);
+          result.success = iface_.get_slice(args.tablename, args.key, args.columnParent, args.start, args.finish, args.isAscending, args.offset, args.count);
         } catch (InvalidRequestException ire) {
           result.ire = ire;
         } catch (NotFoundException nfe) {
@@ -1117,7 +1044,7 @@
         iprot.readMessageEnd();
         get_slice_super_result result = new get_slice_super_result();
         try {
-          result.success = iface_.get_slice_super(args.tablename, args.key, args.columnFamily, args.isAscending, args.offset, args.count);
+          result.success = iface_.get_slice_super(args.tablename, args.key, args.columnFamily, args.start, args.finish, args.isAscending, args.offset, args.count);
         } catch (InvalidRequestException ire) {
           result.ire = ire;
         } catch (Throwable th) {
@@ -1331,14 +1258,12 @@
 
   }
 
-  public static class get_slice_by_name_range_args implements TBase, java.io.Serializable, Cloneable   {
-    private static final TStruct STRUCT_DESC = new TStruct("get_slice_by_name_range_args");
+  public static class get_slice_by_names_args implements TBase, java.io.Serializable, Cloneable   {
+    private static final TStruct STRUCT_DESC = new TStruct("get_slice_by_names_args");
     private static final TField TABLENAME_FIELD_DESC = new TField("tablename", TType.STRING, (short)1);
     private static final TField KEY_FIELD_DESC = new TField("key", TType.STRING, (short)2);
     private static final TField COLUMN_PARENT_FIELD_DESC = new TField("columnParent", TType.STRING, (short)3);
-    private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)4);
-    private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)5);
-    private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)6);
+    private static final TField COLUMN_NAMES_FIELD_DESC = new TField("columnNames", TType.LIST, (short)4);
 
     public String tablename;
     public static final int TABLENAME = 1;
@@ -1346,16 +1271,11 @@
     public static final int KEY = 2;
     public String columnParent;
     public static final int COLUMNPARENT = 3;
-    public String start;
-    public static final int START = 4;
-    public String finish;
-    public static final int FINISH = 5;
-    public int count;
-    public static final int COUNT = 6;
+    public List<String> columnNames;
+    public static final int COLUMNNAMES = 4;
 
     private final Isset __isset = new Isset();
     private static final class Isset implements java.io.Serializable {
-      public boolean count = false;
     }
 
     public static final Map<Integer, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{
@@ -1365,45 +1285,35 @@
           new FieldValueMetaData(TType.STRING)));
       put(COLUMNPARENT, new FieldMetaData("columnParent", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.STRING)));
-      put(START, new FieldMetaData("start", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRING)));
-      put(FINISH, new FieldMetaData("finish", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRING)));
-      put(COUNT, new FieldMetaData("count", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.I32)));
+      put(COLUMNNAMES, new FieldMetaData("columnNames", TFieldRequirementType.DEFAULT, 
+          new ListMetaData(TType.LIST, 
+              new FieldValueMetaData(TType.STRING))));
     }});
 
     static {
-      FieldMetaData.addStructMetaDataMap(get_slice_by_name_range_args.class, metaDataMap);
+      FieldMetaData.addStructMetaDataMap(get_slice_by_names_args.class, metaDataMap);
     }
 
-    public get_slice_by_name_range_args() {
-      this.count = 100;
-
+    public get_slice_by_names_args() {
     }
 
-    public get_slice_by_name_range_args(
+    public get_slice_by_names_args(
       String tablename,
       String key,
       String columnParent,
-      String start,
-      String finish,
-      int count)
+      List<String> columnNames)
     {
       this();
       this.tablename = tablename;
       this.key = key;
       this.columnParent = columnParent;
-      this.start = start;
-      this.finish = finish;
-      this.count = count;
-      this.__isset.count = true;
+      this.columnNames = columnNames;
     }
 
     /**
      * Performs a deep copy on <i>other</i>.
      */
-    public get_slice_by_name_range_args(get_slice_by_name_range_args other) {
+    public get_slice_by_names_args(get_slice_by_names_args other) {
       if (other.isSetTablename()) {
         this.tablename = other.tablename;
       }
@@ -1413,19 +1323,18 @@
       if (other.isSetColumnParent()) {
         this.columnParent = other.columnParent;
       }
-      if (other.isSetStart()) {
-        this.start = other.start;
-      }
-      if (other.isSetFinish()) {
-        this.finish = other.finish;
+      if (other.isSetColumnNames()) {
+        List<String> __this__columnNames = new ArrayList<String>();
+        for (String other_element : other.columnNames) {
+          __this__columnNames.add(other_element);
+        }
+        this.columnNames = __this__columnNames;
       }
-      __isset.count = other.__isset.count;
-      this.count = other.count;
     }
 
     @Override
-    public get_slice_by_name_range_args clone() {
-      return new get_slice_by_name_range_args(this);
+    public get_slice_by_names_args clone() {
+      return new get_slice_by_names_args(this);
     }
 
     public String getTablename() {
@@ -1497,74 +1406,44 @@
       }
     }
 
-    public String getStart() {
-      return this.start;
-    }
-
-    public void setStart(String start) {
-      this.start = start;
-    }
-
-    public void unsetStart() {
-      this.start = null;
+    public int getColumnNamesSize() {
+      return (this.columnNames == null) ? 0 : this.columnNames.size();
     }
 
-    // Returns true if field start is set (has been asigned a value) and false otherwise
-    public boolean isSetStart() {
-      return this.start != null;
+    public java.util.Iterator<String> getColumnNamesIterator() {
+      return (this.columnNames == null) ? null : this.columnNames.iterator();
     }
 
-    public void setStartIsSet(boolean value) {
-      if (!value) {
-        this.start = null;
+    public void addToColumnNames(String elem) {
+      if (this.columnNames == null) {
+        this.columnNames = new ArrayList<String>();
       }
+      this.columnNames.add(elem);
     }
 
-    public String getFinish() {
-      return this.finish;
+    public List<String> getColumnNames() {
+      return this.columnNames;
     }
 
-    public void setFinish(String finish) {
-      this.finish = finish;
+    public void setColumnNames(List<String> columnNames) {
+      this.columnNames = columnNames;
     }
 
-    public void unsetFinish() {
-      this.finish = null;
+    public void unsetColumnNames() {
+      this.columnNames = null;
     }
 
-    // Returns true if field finish is set (has been asigned a value) and false otherwise
-    public boolean isSetFinish() {
-      return this.finish != null;
+    // Returns true if field columnNames is set (has been asigned a value) and false otherwise
+    public boolean isSetColumnNames() {
+      return this.columnNames != null;
     }
 
-    public void setFinishIsSet(boolean value) {
+    public void setColumnNamesIsSet(boolean value) {
       if (!value) {
-        this.finish = null;
+        this.columnNames = null;
       }
     }
 
-    public int getCount() {
-      return this.count;
-    }
-
-    public void setCount(int count) {
-      this.count = count;
-      this.__isset.count = true;
-    }
-
-    public void unsetCount() {
-      this.__isset.count = false;
-    }
-
-    // Returns true if field count is set (has been asigned a value) and false otherwise
-    public boolean isSetCount() {
-      return this.__isset.count;
-    }
-
-    public void setCountIsSet(boolean value) {
-      this.__isset.count = value;
-    }
-
     public void setFieldValue(int fieldID, Object value) {
       switch (fieldID) {
       case TABLENAME:
@@ -1591,27 +1470,11 @@
         }
         break;
 
-      case START:
-        if (value == null) {
-          unsetStart();
-        } else {
-          setStart((String)value);
-        }
-        break;
-
-      case FINISH:
-        if (value == null) {
-          unsetFinish();
-        } else {
-          setFinish((String)value);
-        }
-        break;
-
-      case COUNT:
+      case COLUMNNAMES:
         if (value == null) {
-          unsetCount();
+          unsetColumnNames();
         } else {
-          setCount((Integer)value);
+          setColumnNames((List<String>)value);
         }
         break;
 
@@ -1631,14 +1494,8 @@
       case COLUMNPARENT:
         return getColumnParent();
 
-      case START:
-        return getStart();
-
-      case FINISH:
-        return getFinish();
-
-      case COUNT:
-        return new Integer(getCount());
+      case COLUMNNAMES:
+        return getColumnNames();
 
       default:
         throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
@@ -1654,12 +1511,8 @@
         return isSetKey();
       case COLUMNPARENT:
         return isSetColumnParent();
-      case START:
-        return isSetStart();
-      case FINISH:
-        return isSetFinish();
-      case COUNT:
-        return isSetCount();
+      case COLUMNNAMES:
+        return isSetColumnNames();
       default:
         throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
       }
@@ -1669,12 +1522,12 @@
     public boolean equals(Object that) {
       if (that == null)
         return false;
-      if (that instanceof get_slice_by_name_range_args)
-        return this.equals((get_slice_by_name_range_args)that);
+      if (that instanceof get_slice_by_names_args)
+        return this.equals((get_slice_by_names_args)that);
       return false;
     }
 
-    public boolean equals(get_slice_by_name_range_args that) {
+    public boolean equals(get_slice_by_names_args that) {
       if (that == null)
         return false;
 
@@ -1705,894 +1558,12 @@
           return false;
       }
 
-      boolean this_present_start = true && this.isSetStart();
-      boolean that_present_start = true && that.isSetStart();
-      if (this_present_start || that_present_start) {
-        if (!(this_present_start && that_present_start))
-          return false;
-        if (!this.start.equals(that.start))
-          return false;
-      }
-
-      boolean this_present_finish = true && this.isSetFinish();
-      boolean that_present_finish = true && that.isSetFinish();
-      if (this_present_finish || that_present_finish) {
-        if (!(this_present_finish && that_present_finish))
-          return false;
-        if (!this.finish.equals(that.finish))
-          return false;
-      }
-
-      boolean this_present_count = true;
-      boolean that_present_count = true;
-      if (this_present_count || that_present_count) {
-        if (!(this_present_count && that_present_count))
+      boolean this_present_columnNames = true && this.isSetColumnNames();
+      boolean that_present_columnNames = true && that.isSetColumnNames();
+      if (this_present_columnNames || that_present_columnNames) {
+        if (!(this_present_columnNames && that_present_columnNames))
           return false;
-        if (this.count != that.count)
-          return false;
-      }
-
-      return true;
-    }
-
-    @Override
-    public int hashCode() {
-      return 0;
-    }
-
-    public void read(TProtocol iprot) throws TException {
-      TField field;
-      iprot.readStructBegin();
-      while (true)
-      {
-        field = iprot.readFieldBegin();
-        if (field.type == TType.STOP) { 
-          break;
-        }
-        switch (field.id)
-        {
-          case TABLENAME:
-            if (field.type == TType.STRING) {
-              this.tablename = iprot.readString();
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case KEY:
-            if (field.type == TType.STRING) {
-              this.key = iprot.readString();
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case COLUMNPARENT:
-            if (field.type == TType.STRING) {
-              this.columnParent = iprot.readString();
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case START:
-            if (field.type == TType.STRING) {
-              this.start = iprot.readString();
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case FINISH:
-            if (field.type == TType.STRING) {
-              this.finish = iprot.readString();
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case COUNT:
-            if (field.type == TType.I32) {
-              this.count = iprot.readI32();
-              this.__isset.count = true;
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          default:
-            TProtocolUtil.skip(iprot, field.type);
-            break;
-        }
-        iprot.readFieldEnd();
-      }
-      iprot.readStructEnd();
-
-
-      // check for required fields of primitive type, which can't be checked in the validate method
-      validate();
-    }
-
-    public void write(TProtocol oprot) throws TException {
-      validate();
-
-      oprot.writeStructBegin(STRUCT_DESC);
-      if (this.tablename != null) {
-        oprot.writeFieldBegin(TABLENAME_FIELD_DESC);
-        oprot.writeString(this.tablename);
-        oprot.writeFieldEnd();
-      }
-      if (this.key != null) {
-        oprot.writeFieldBegin(KEY_FIELD_DESC);
-        oprot.writeString(this.key);
-        oprot.writeFieldEnd();
-      }
-      if (this.columnParent != null) {
-        oprot.writeFieldBegin(COLUMN_PARENT_FIELD_DESC);
-        oprot.writeString(this.columnParent);
-        oprot.writeFieldEnd();
-      }
-      if (this.start != null) {
-        oprot.writeFieldBegin(START_FIELD_DESC);
-        oprot.writeString(this.start);
-        oprot.writeFieldEnd();
-      }
-      if (this.finish != null) {
-        oprot.writeFieldBegin(FINISH_FIELD_DESC);
-        oprot.writeString(this.finish);
-        oprot.writeFieldEnd();
-      }
-      oprot.writeFieldBegin(COUNT_FIELD_DESC);
-      oprot.writeI32(this.count);
-      oprot.writeFieldEnd();
-      oprot.writeFieldStop();
-      oprot.writeStructEnd();
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder("get_slice_by_name_range_args(");
-      boolean first = true;
-
-      sb.append("tablename:");
-      if (this.tablename == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.tablename);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("key:");
-      if (this.key == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.key);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("columnParent:");
-      if (this.columnParent == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.columnParent);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("start:");
-      if (this.start == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.start);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("finish:");
-      if (this.finish == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.finish);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("count:");
-      sb.append(this.count);
-      first = false;
-      sb.append(")");
-      return sb.toString();
-    }
-
-    public void validate() throws TException {
-      // check for required fields
-      // check that fields of type enum have valid values
-    }
-
-  }
-
-  public static class get_slice_by_name_range_result implements TBase, java.io.Serializable, Cloneable   {
-    private static final TStruct STRUCT_DESC = new TStruct("get_slice_by_name_range_result");
-    private static final TField SUCCESS_FIELD_DESC = new TField("success", TType.LIST, (short)0);
-    private static final TField IRE_FIELD_DESC = new TField("ire", TType.STRUCT, (short)1);
-    private static final TField NFE_FIELD_DESC = new TField("nfe", TType.STRUCT, (short)2);
-
-    public List<column_t> success;
-    public static final int SUCCESS = 0;
-    public InvalidRequestException ire;
-    public static final int IRE = 1;
-    public NotFoundException nfe;
-    public static final int NFE = 2;
-
-    private final Isset __isset = new Isset();
-    private static final class Isset implements java.io.Serializable {
-    }
-
-    public static final Map<Integer, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{
-      put(SUCCESS, new FieldMetaData("success", TFieldRequirementType.DEFAULT, 
-          new ListMetaData(TType.LIST, 
-              new StructMetaData(TType.STRUCT, column_t.class))));
-      put(IRE, new FieldMetaData("ire", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRUCT)));
-      put(NFE, new FieldMetaData("nfe", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRUCT)));
-    }});
-
-    static {
-      FieldMetaData.addStructMetaDataMap(get_slice_by_name_range_result.class, metaDataMap);
-    }
-
-    public get_slice_by_name_range_result() {
-    }
-
-    public get_slice_by_name_range_result(
-      List<column_t> success,
-      InvalidRequestException ire,
-      NotFoundException nfe)
-    {
-      this();
-      this.success = success;
-      this.ire = ire;
-      this.nfe = nfe;
-    }
-
-    /**
-     * Performs a deep copy on <i>other</i>.
-     */
-    public get_slice_by_name_range_result(get_slice_by_name_range_result other) {
-      if (other.isSetSuccess()) {
-        List<column_t> __this__success = new ArrayList<column_t>();
-        for (column_t other_element : other.success) {
-          __this__success.add(new column_t(other_element));
-        }
-        this.success = __this__success;
-      }
-      if (other.isSetIre()) {
-        this.ire = new InvalidRequestException(other.ire);
-      }
-      if (other.isSetNfe()) {
-        this.nfe = new NotFoundException(other.nfe);
-      }
-    }
-
-    @Override
-    public get_slice_by_name_range_result clone() {
-      return new get_slice_by_name_range_result(this);
-    }
-
-    public int getSuccessSize() {
-      return (this.success == null) ? 0 : this.success.size();
-    }
-
-    public java.util.Iterator<column_t> getSuccessIterator() {
-      return (this.success == null) ? null : this.success.iterator();
-    }
-
-    public void addToSuccess(column_t elem) {
-      if (this.success == null) {
-        this.success = new ArrayList<column_t>();
-      }
-      this.success.add(elem);
-    }
-
-    public List<column_t> getSuccess() {
-      return this.success;
-    }
-
-    public void setSuccess(List<column_t> success) {
-      this.success = success;
-    }
-
-    public void unsetSuccess() {
-      this.success = null;
-    }
-
-    // Returns true if field success is set (has been asigned a value) and false otherwise
-    public boolean isSetSuccess() {
-      return this.success != null;
-    }
-
-    public void setSuccessIsSet(boolean value) {
-      if (!value) {
-        this.success = null;
-      }
-    }
-
-    public InvalidRequestException getIre() {
-      return this.ire;
-    }
-
-    public void setIre(InvalidRequestException ire) {
-      this.ire = ire;
-    }
-
-    public void unsetIre() {
-      this.ire = null;
-    }
-
-    // Returns true if field ire is set (has been asigned a value) and false otherwise
-    public boolean isSetIre() {
-      return this.ire != null;
-    }
-
-    public void setIreIsSet(boolean value) {
-      if (!value) {
-        this.ire = null;
-      }
-    }
-
-    public NotFoundException getNfe() {
-      return this.nfe;
-    }
-
-    public void setNfe(NotFoundException nfe) {
-      this.nfe = nfe;
-    }
-
-    public void unsetNfe() {
-      this.nfe = null;
-    }
-
-    // Returns true if field nfe is set (has been asigned a value) and false otherwise
-    public boolean isSetNfe() {
-      return this.nfe != null;
-    }
-
-    public void setNfeIsSet(boolean value) {
-      if (!value) {
-        this.nfe = null;
-      }
-    }
-
-    public void setFieldValue(int fieldID, Object value) {
-      switch (fieldID) {
-      case SUCCESS:
-        if (value == null) {
-          unsetSuccess();
-        } else {
-          setSuccess((List<column_t>)value);
-        }
-        break;
-
-      case IRE:
-        if (value == null) {
-          unsetIre();
-        } else {
-          setIre((InvalidRequestException)value);
-        }
-        break;
-
-      case NFE:
-        if (value == null) {
-          unsetNfe();
-        } else {
-          setNfe((NotFoundException)value);
-        }
-        break;
-
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    public Object getFieldValue(int fieldID) {
-      switch (fieldID) {
-      case SUCCESS:
-        return getSuccess();
-
-      case IRE:
-        return getIre();
-
-      case NFE:
-        return getNfe();
-
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    // Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise
-    public boolean isSet(int fieldID) {
-      switch (fieldID) {
-      case SUCCESS:
-        return isSetSuccess();
-      case IRE:
-        return isSetIre();
-      case NFE:
-        return isSetNfe();
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    @Override
-    public boolean equals(Object that) {
-      if (that == null)
-        return false;
-      if (that instanceof get_slice_by_name_range_result)
-        return this.equals((get_slice_by_name_range_result)that);
-      return false;
-    }
-
-    public boolean equals(get_slice_by_name_range_result that) {
-      if (that == null)
-        return false;
-
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
-      if (this_present_success || that_present_success) {
-        if (!(this_present_success && that_present_success))
-          return false;
-        if (!this.success.equals(that.success))
-          return false;
-      }
-
-      boolean this_present_ire = true && this.isSetIre();
-      boolean that_present_ire = true && that.isSetIre();
-      if (this_present_ire || that_present_ire) {
-        if (!(this_present_ire && that_present_ire))
-          return false;
-        if (!this.ire.equals(that.ire))
-          return false;
-      }
-
-      boolean this_present_nfe = true && this.isSetNfe();
-      boolean that_present_nfe = true && that.isSetNfe();
-      if (this_present_nfe || that_present_nfe) {
-        if (!(this_present_nfe && that_present_nfe))
-          return false;
-        if (!this.nfe.equals(that.nfe))
-          return false;
-      }
-
-      return true;
-    }
-
-    @Override
-    public int hashCode() {
-      return 0;
-    }
-
-    public void read(TProtocol iprot) throws TException {
-      TField field;
-      iprot.readStructBegin();
-      while (true)
-      {
-        field = iprot.readFieldBegin();
-        if (field.type == TType.STOP) { 
-          break;
-        }
-        switch (field.id)
-        {
-          case SUCCESS:
-            if (field.type == TType.LIST) {
-              {
-                TList _list31 = iprot.readListBegin();
-                this.success = new ArrayList<column_t>(_list31.size);
-                for (int _i32 = 0; _i32 < _list31.size; ++_i32)
-                {
-                  column_t _elem33;
-                  _elem33 = new column_t();
-                  _elem33.read(iprot);
-                  this.success.add(_elem33);
-                }
-                iprot.readListEnd();
-              }
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case IRE:
-            if (field.type == TType.STRUCT) {
-              this.ire = new InvalidRequestException();
-              this.ire.read(iprot);
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          case NFE:
-            if (field.type == TType.STRUCT) {
-              this.nfe = new NotFoundException();
-              this.nfe.read(iprot);
-            } else { 
-              TProtocolUtil.skip(iprot, field.type);
-            }
-            break;
-          default:
-            TProtocolUtil.skip(iprot, field.type);
-            break;
-        }
-        iprot.readFieldEnd();
-      }
-      iprot.readStructEnd();
-
-
-      // check for required fields of primitive type, which can't be checked in the validate method
-      validate();
-    }
-
-    public void write(TProtocol oprot) throws TException {
-      oprot.writeStructBegin(STRUCT_DESC);
-
-      if (this.isSetSuccess()) {
-        oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-        {
-          oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (column_t _iter34 : this.success)          {
-            _iter34.write(oprot);
-          }
-          oprot.writeListEnd();
-        }
-        oprot.writeFieldEnd();
-      } else if (this.isSetIre()) {
-        oprot.writeFieldBegin(IRE_FIELD_DESC);
-        this.ire.write(oprot);
-        oprot.writeFieldEnd();
-      } else if (this.isSetNfe()) {
-        oprot.writeFieldBegin(NFE_FIELD_DESC);
-        this.nfe.write(oprot);
-        oprot.writeFieldEnd();
-      }
-      oprot.writeFieldStop();
-      oprot.writeStructEnd();
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder("get_slice_by_name_range_result(");
-      boolean first = true;
-
-      sb.append("success:");
-      if (this.success == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.success);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("ire:");
-      if (this.ire == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.ire);
-      }
-      first = false;
-      if (!first) sb.append(", ");
-      sb.append("nfe:");
-      if (this.nfe == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.nfe);
-      }
-      first = false;
-      sb.append(")");
-      return sb.toString();
-    }
-
-    public void validate() throws TException {
-      // check for required fields
-      // check that fields of type enum have valid values
-    }
-
-  }
-
-  public static class get_slice_by_names_args implements TBase, java.io.Serializable, Cloneable   {
-    private static final TStruct STRUCT_DESC = new TStruct("get_slice_by_names_args");
-    private static final TField TABLENAME_FIELD_DESC = new TField("tablename", TType.STRING, (short)1);
-    private static final TField KEY_FIELD_DESC = new TField("key", TType.STRING, (short)2);
-    private static final TField COLUMN_PARENT_FIELD_DESC = new TField("columnParent", TType.STRING, (short)3);
-    private static final TField COLUMN_NAMES_FIELD_DESC = new TField("columnNames", TType.LIST, (short)4);
-
-    public String tablename;
-    public static final int TABLENAME = 1;
-    public String key;
-    public static final int KEY = 2;
-    public String columnParent;
-    public static final int COLUMNPARENT = 3;
-    public List<String> columnNames;
-    public static final int COLUMNNAMES = 4;
-
-    private final Isset __isset = new Isset();
-    private static final class Isset implements java.io.Serializable {
-    }
-
-    public static final Map<Integer, FieldMetaData> metaDataMap = Collections.unmodifiableMap(new HashMap<Integer, FieldMetaData>() {{
-      put(TABLENAME, new FieldMetaData("tablename", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRING)));
-      put(KEY, new FieldMetaData("key", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRING)));
-      put(COLUMNPARENT, new FieldMetaData("columnParent", TFieldRequirementType.DEFAULT, 
-          new FieldValueMetaData(TType.STRING)));
-      put(COLUMNNAMES, new FieldMetaData("columnNames", TFieldRequirementType.DEFAULT, 
-          new ListMetaData(TType.LIST, 
-              new FieldValueMetaData(TType.STRING))));
-    }});
-
-    static {
-      FieldMetaData.addStructMetaDataMap(get_slice_by_names_args.class, metaDataMap);
-    }
-
-    public get_slice_by_names_args() {
-    }
-
-    public get_slice_by_names_args(
-      String tablename,
-      String key,
-      String columnParent,
-      List<String> columnNames)
-    {
-      this();
-      this.tablename = tablename;
-      this.key = key;
-      this.columnParent = columnParent;
-      this.columnNames = columnNames;
-    }
-
-    /**
-     * Performs a deep copy on <i>other</i>.
-     */
-    public get_slice_by_names_args(get_slice_by_names_args other) {
-      if (other.isSetTablename()) {
-        this.tablename = other.tablename;
-      }
-      if (other.isSetKey()) {
-        this.key = other.key;
-      }
-      if (other.isSetColumnParent()) {
-        this.columnParent = other.columnParent;
-      }
-      if (other.isSetColumnNames()) {
-        List<String> __this__columnNames = new ArrayList<String>();
-        for (String other_element : other.columnNames) {
-          __this__columnNames.add(other_element);
-        }
-        this.columnNames = __this__columnNames;
-      }
-    }
-
-    @Override
-    public get_slice_by_names_args clone() {
-      return new get_slice_by_names_args(this);
-    }
-
-    public String getTablename() {
-      return this.tablename;
-    }
-
-    public void setTablename(String tablename) {
-      this.tablename = tablename;
-    }
-
-    public void unsetTablename() {
-      this.tablename = null;
-    }
-
-    // Returns true if field tablename is set (has been asigned a value) and false otherwise
-    public boolean isSetTablename() {
-      return this.tablename != null;
-    }
-
-    public void setTablenameIsSet(boolean value) {
-      if (!value) {
-        this.tablename = null;
-      }
-    }
-
-    public String getKey() {
-      return this.key;
-    }
-
-    public void setKey(String key) {
-      this.key = key;
-    }
-
-    public void unsetKey() {
-      this.key = null;
-    }
-
-    // Returns true if field key is set (has been asigned a value) and false otherwise
-    public boolean isSetKey() {
-      return this.key != null;
-    }
-
-    public void setKeyIsSet(boolean value) {
-      if (!value) {
-        this.key = null;
-      }
-    }
-
-    public String getColumnParent() {
-      return this.columnParent;
-    }
-
-    public void setColumnParent(String columnParent) {
-      this.columnParent = columnParent;
-    }
-
-    public void unsetColumnParent() {
-      this.columnParent = null;
-    }
-
-    // Returns true if field columnParent is set (has been asigned a value) and false otherwise
-    public boolean isSetColumnParent() {
-      return this.columnParent != null;
-    }
-
-    public void setColumnParentIsSet(boolean value) {
-      if (!value) {
-        this.columnParent = null;
-      }
-    }
-
-    public int getColumnNamesSize() {
-      return (this.columnNames == null) ? 0 : this.columnNames.size();
-    }
-
-    public java.util.Iterator<String> getColumnNamesIterator() {
-      return (this.columnNames == null) ? null : this.columnNames.iterator();
-    }
-
-    public void addToColumnNames(String elem) {
-      if (this.columnNames == null) {
-        this.columnNames = new ArrayList<String>();
-      }
-      this.columnNames.add(elem);
-    }
-
-    public List<String> getColumnNames() {
-      return this.columnNames;
-    }
-
-    public void setColumnNames(List<String> columnNames) {
-      this.columnNames = columnNames;
-    }
-
-    public void unsetColumnNames() {
-      this.columnNames = null;
-    }
-
-    // Returns true if field columnNames is set (has been asigned a value) and false otherwise
-    public boolean isSetColumnNames() {
-      return this.columnNames != null;
-    }
-
-    public void setColumnNamesIsSet(boolean value) {
-      if (!value) {
-        this.columnNames = null;
-      }
-    }
-
-    public void setFieldValue(int fieldID, Object value) {
-      switch (fieldID) {
-      case TABLENAME:
-        if (value == null) {
-          unsetTablename();
-        } else {
-          setTablename((String)value);
-        }
-        break;
-
-      case KEY:
-        if (value == null) {
-          unsetKey();
-        } else {
-          setKey((String)value);
-        }
-        break;
-
-      case COLUMNPARENT:
-        if (value == null) {
-          unsetColumnParent();
-        } else {
-          setColumnParent((String)value);
-        }
-        break;
-
-      case COLUMNNAMES:
-        if (value == null) {
-          unsetColumnNames();
-        } else {
-          setColumnNames((List<String>)value);
-        }
-        break;
-
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    public Object getFieldValue(int fieldID) {
-      switch (fieldID) {
-      case TABLENAME:
-        return getTablename();
-
-      case KEY:
-        return getKey();
-
-      case COLUMNPARENT:
-        return getColumnParent();
-
-      case COLUMNNAMES:
-        return getColumnNames();
-
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    // Returns true if field corresponding to fieldID is set (has been asigned a value) and false otherwise
-    public boolean isSet(int fieldID) {
-      switch (fieldID) {
-      case TABLENAME:
-        return isSetTablename();
-      case KEY:
-        return isSetKey();
-      case COLUMNPARENT:
-        return isSetColumnParent();
-      case COLUMNNAMES:
-        return isSetColumnNames();
-      default:
-        throw new IllegalArgumentException("Field " + fieldID + " doesn't exist!");
-      }
-    }
-
-    @Override
-    public boolean equals(Object that) {
-      if (that == null)
-        return false;
-      if (that instanceof get_slice_by_names_args)
-        return this.equals((get_slice_by_names_args)that);
-      return false;
-    }
-
-    public boolean equals(get_slice_by_names_args that) {
-      if (that == null)
-        return false;
-
-      boolean this_present_tablename = true && this.isSetTablename();
-      boolean that_present_tablename = true && that.isSetTablename();
-      if (this_present_tablename || that_present_tablename) {
-        if (!(this_present_tablename && that_present_tablename))
-          return false;
-        if (!this.tablename.equals(that.tablename))
-          return false;
-      }
-
-      boolean this_present_key = true && this.isSetKey();
-      boolean that_present_key = true && that.isSetKey();
-      if (this_present_key || that_present_key) {
-        if (!(this_present_key && that_present_key))
-          return false;
-        if (!this.key.equals(that.key))
-          return false;
-      }
-
-      boolean this_present_columnParent = true && this.isSetColumnParent();
-      boolean that_present_columnParent = true && that.isSetColumnParent();
-      if (this_present_columnParent || that_present_columnParent) {
-        if (!(this_present_columnParent && that_present_columnParent))
-          return false;
-        if (!this.columnParent.equals(that.columnParent))
-          return false;
-      }
-
-      boolean this_present_columnNames = true && this.isSetColumnNames();
-      boolean that_present_columnNames = true && that.isSetColumnNames();
-      if (this_present_columnNames || that_present_columnNames) {
-        if (!(this_present_columnNames && that_present_columnNames))
-          return false;
-        if (!this.columnNames.equals(that.columnNames))
+        if (!this.columnNames.equals(that.columnNames))
           return false;
       }
 
@@ -2639,13 +1610,13 @@
           case COLUMNNAMES:
             if (field.type == TType.LIST) {
               {
-                TList _list35 = iprot.readListBegin();
-                this.columnNames = new ArrayList<String>(_list35.size);
-                for (int _i36 = 0; _i36 < _list35.size; ++_i36)
+                TList _list31 = iprot.readListBegin();
+                this.columnNames = new ArrayList<String>(_list31.size);
+                for (int _i32 = 0; _i32 < _list31.size; ++_i32)
                 {
-                  String _elem37;
-                  _elem37 = iprot.readString();
-                  this.columnNames.add(_elem37);
+                  String _elem33;
+                  _elem33 = iprot.readString();
+                  this.columnNames.add(_elem33);
                 }
                 iprot.readListEnd();
               }
@@ -2689,8 +1660,8 @@
         oprot.writeFieldBegin(COLUMN_NAMES_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRING, this.columnNames.size()));
-          for (String _iter38 : this.columnNames)          {
-            oprot.writeString(_iter38);
+          for (String _iter34 : this.columnNames)          {
+            oprot.writeString(_iter34);
           }
           oprot.writeListEnd();
         }
@@ -3023,14 +1994,14 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list39 = iprot.readListBegin();
-                this.success = new ArrayList<column_t>(_list39.size);
-                for (int _i40 = 0; _i40 < _list39.size; ++_i40)
+                TList _list35 = iprot.readListBegin();
+                this.success = new ArrayList<column_t>(_list35.size);
+                for (int _i36 = 0; _i36 < _list35.size; ++_i36)
                 {
-                  column_t _elem41;
-                  _elem41 = new column_t();
-                  _elem41.read(iprot);
-                  this.success.add(_elem41);
+                  column_t _elem37;
+                  _elem37 = new column_t();
+                  _elem37.read(iprot);
+                  this.success.add(_elem37);
                 }
                 iprot.readListEnd();
               }
@@ -3074,8 +2045,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (column_t _iter42 : this.success)          {
-            _iter42.write(oprot);
+          for (column_t _iter38 : this.success)          {
+            _iter38.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -3137,9 +2108,11 @@
     private static final TField TABLENAME_FIELD_DESC = new TField("tablename", TType.STRING, (short)1);
     private static final TField KEY_FIELD_DESC = new TField("key", TType.STRING, (short)2);
     private static final TField COLUMN_PARENT_FIELD_DESC = new TField("columnParent", TType.STRING, (short)3);
-    private static final TField IS_ASCENDING_FIELD_DESC = new TField("isAscending", TType.BOOL, (short)4);
-    private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)5);
-    private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)6);
+    private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)4);
+    private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)5);
+    private static final TField IS_ASCENDING_FIELD_DESC = new TField("isAscending", TType.BOOL, (short)6);
+    private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)7);
+    private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)8);
 
     public String tablename;
     public static final int TABLENAME = 1;
@@ -3147,12 +2120,16 @@
     public static final int KEY = 2;
     public String columnParent;
     public static final int COLUMNPARENT = 3;
+    public String start;
+    public static final int START = 4;
+    public String finish;
+    public static final int FINISH = 5;
     public boolean isAscending;
-    public static final int ISASCENDING = 4;
+    public static final int ISASCENDING = 6;
     public int offset;
-    public static final int OFFSET = 5;
+    public static final int OFFSET = 7;
     public int count;
-    public static final int COUNT = 6;
+    public static final int COUNT = 8;
 
     private final Isset __isset = new Isset();
     private static final class Isset implements java.io.Serializable {
@@ -3168,6 +2145,10 @@
           new FieldValueMetaData(TType.STRING)));
       put(COLUMNPARENT, new FieldMetaData("columnParent", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.STRING)));
+      put(START, new FieldMetaData("start", TFieldRequirementType.DEFAULT, 
+          new FieldValueMetaData(TType.STRING)));
+      put(FINISH, new FieldMetaData("finish", TFieldRequirementType.DEFAULT, 
+          new FieldValueMetaData(TType.STRING)));
       put(ISASCENDING, new FieldMetaData("isAscending", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.BOOL)));
       put(OFFSET, new FieldMetaData("offset", TFieldRequirementType.DEFAULT, 
@@ -3189,6 +2170,8 @@
       String tablename,
       String key,
       String columnParent,
+      String start,
+      String finish,
       boolean isAscending,
       int offset,
       int count)
@@ -3197,6 +2180,8 @@
       this.tablename = tablename;
       this.key = key;
       this.columnParent = columnParent;
+      this.start = start;
+      this.finish = finish;
       this.isAscending = isAscending;
       this.__isset.isAscending = true;
       this.offset = offset;
@@ -3218,6 +2203,12 @@
       if (other.isSetColumnParent()) {
         this.columnParent = other.columnParent;
       }
+      if (other.isSetStart()) {
+        this.start = other.start;
+      }
+      if (other.isSetFinish()) {
+        this.finish = other.finish;
+      }
       __isset.isAscending = other.__isset.isAscending;
       this.isAscending = other.isAscending;
       __isset.offset = other.__isset.offset;
@@ -3300,6 +2291,52 @@
       }
     }
 
+    public String getStart() {
+      return this.start;
+    }
+
+    public void setStart(String start) {
+      this.start = start;
+    }
+
+    public void unsetStart() {
+      this.start = null;
+    }
+
+    // Returns true if field start is set (has been asigned a value) and false otherwise
+    public boolean isSetStart() {
+      return this.start != null;
+    }
+
+    public void setStartIsSet(boolean value) {
+      if (!value) {
+        this.start = null;
+      }
+    }
+
+    public String getFinish() {
+      return this.finish;
+    }
+
+    public void setFinish(String finish) {
+      this.finish = finish;
+    }
+
+    public void unsetFinish() {
+      this.finish = null;
+    }
+
+    // Returns true if field finish is set (has been asigned a value) and false otherwise
+    public boolean isSetFinish() {
+      return this.finish != null;
+    }
+
+    public void setFinishIsSet(boolean value) {
+      if (!value) {
+        this.finish = null;
+      }
+    }
+
     public boolean isIsAscending() {
       return this.isAscending;
     }
@@ -3392,6 +2429,22 @@
         }
         break;
 
+      case START:
+        if (value == null) {
+          unsetStart();
+        } else {
+          setStart((String)value);
+        }
+        break;
+
+      case FINISH:
+        if (value == null) {
+          unsetFinish();
+        } else {
+          setFinish((String)value);
+        }
+        break;
+
       case ISASCENDING:
         if (value == null) {
           unsetIsAscending();
@@ -3432,6 +2485,12 @@
       case COLUMNPARENT:
         return getColumnParent();
 
+      case START:
+        return getStart();
+
+      case FINISH:
+        return getFinish();
+
       case ISASCENDING:
         return new Boolean(isIsAscending());
 
@@ -3455,6 +2514,10 @@
         return isSetKey();
       case COLUMNPARENT:
         return isSetColumnParent();
+      case START:
+        return isSetStart();
+      case FINISH:
+        return isSetFinish();
       case ISASCENDING:
         return isSetIsAscending();
       case OFFSET:
@@ -3506,6 +2569,24 @@
           return false;
       }
 
+      boolean this_present_start = true && this.isSetStart();
+      boolean that_present_start = true && that.isSetStart();
+      if (this_present_start || that_present_start) {
+        if (!(this_present_start && that_present_start))
+          return false;
+        if (!this.start.equals(that.start))
+          return false;
+      }
+
+      boolean this_present_finish = true && this.isSetFinish();
+      boolean that_present_finish = true && that.isSetFinish();
+      if (this_present_finish || that_present_finish) {
+        if (!(this_present_finish && that_present_finish))
+          return false;
+        if (!this.finish.equals(that.finish))
+          return false;
+      }
+
       boolean this_present_isAscending = true;
       boolean that_present_isAscending = true;
       if (this_present_isAscending || that_present_isAscending) {
@@ -3566,9 +2647,23 @@
               TProtocolUtil.skip(iprot, field.type);
             }
             break;
-          case COLUMNPARENT:
+          case COLUMNPARENT:
+            if (field.type == TType.STRING) {
+              this.columnParent = iprot.readString();
+            } else { 
+              TProtocolUtil.skip(iprot, field.type);
+            }
+            break;
+          case START:
+            if (field.type == TType.STRING) {
+              this.start = iprot.readString();
+            } else { 
+              TProtocolUtil.skip(iprot, field.type);
+            }
+            break;
+          case FINISH:
             if (field.type == TType.STRING) {
-              this.columnParent = iprot.readString();
+              this.finish = iprot.readString();
             } else { 
               TProtocolUtil.skip(iprot, field.type);
             }
@@ -3629,6 +2724,16 @@
         oprot.writeString(this.columnParent);
         oprot.writeFieldEnd();
       }
+      if (this.start != null) {
+        oprot.writeFieldBegin(START_FIELD_DESC);
+        oprot.writeString(this.start);
+        oprot.writeFieldEnd();
+      }
+      if (this.finish != null) {
+        oprot.writeFieldBegin(FINISH_FIELD_DESC);
+        oprot.writeString(this.finish);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldBegin(IS_ASCENDING_FIELD_DESC);
       oprot.writeBool(this.isAscending);
       oprot.writeFieldEnd();
@@ -3671,6 +2776,22 @@
       }
       first = false;
       if (!first) sb.append(", ");
+      sb.append("start:");
+      if (this.start == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.start);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("finish:");
+      if (this.finish == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.finish);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("isAscending:");
       sb.append(this.isAscending);
       first = false;
@@ -3969,14 +3090,14 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list43 = iprot.readListBegin();
-                this.success = new ArrayList<column_t>(_list43.size);
-                for (int _i44 = 0; _i44 < _list43.size; ++_i44)
+                TList _list39 = iprot.readListBegin();
+                this.success = new ArrayList<column_t>(_list39.size);
+                for (int _i40 = 0; _i40 < _list39.size; ++_i40)
                 {
-                  column_t _elem45;
-                  _elem45 = new column_t();
-                  _elem45.read(iprot);
-                  this.success.add(_elem45);
+                  column_t _elem41;
+                  _elem41 = new column_t();
+                  _elem41.read(iprot);
+                  this.success.add(_elem41);
                 }
                 iprot.readListEnd();
               }
@@ -4020,8 +3141,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (column_t _iter46 : this.success)          {
-            _iter46.write(oprot);
+          for (column_t _iter42 : this.success)          {
+            _iter42.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -8247,14 +7368,14 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list47 = iprot.readListBegin();
-                this.success = new ArrayList<column_t>(_list47.size);
-                for (int _i48 = 0; _i48 < _list47.size; ++_i48)
+                TList _list43 = iprot.readListBegin();
+                this.success = new ArrayList<column_t>(_list43.size);
+                for (int _i44 = 0; _i44 < _list43.size; ++_i44)
                 {
-                  column_t _elem49;
-                  _elem49 = new column_t();
-                  _elem49.read(iprot);
-                  this.success.add(_elem49);
+                  column_t _elem45;
+                  _elem45 = new column_t();
+                  _elem45.read(iprot);
+                  this.success.add(_elem45);
                 }
                 iprot.readListEnd();
               }
@@ -8298,8 +7419,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (column_t _iter50 : this.success)          {
-            _iter50.write(oprot);
+          for (column_t _iter46 : this.success)          {
+            _iter46.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -8361,9 +7482,11 @@
     private static final TField TABLENAME_FIELD_DESC = new TField("tablename", TType.STRING, (short)1);
     private static final TField KEY_FIELD_DESC = new TField("key", TType.STRING, (short)2);
     private static final TField COLUMN_FAMILY_FIELD_DESC = new TField("columnFamily", TType.STRING, (short)3);
-    private static final TField IS_ASCENDING_FIELD_DESC = new TField("isAscending", TType.BOOL, (short)4);
-    private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)5);
-    private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)6);
+    private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)4);
+    private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)5);
+    private static final TField IS_ASCENDING_FIELD_DESC = new TField("isAscending", TType.BOOL, (short)6);
+    private static final TField OFFSET_FIELD_DESC = new TField("offset", TType.I32, (short)7);
+    private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)8);
 
     public String tablename;
     public static final int TABLENAME = 1;
@@ -8371,12 +7494,16 @@
     public static final int KEY = 2;
     public String columnFamily;
     public static final int COLUMNFAMILY = 3;
+    public String start;
+    public static final int START = 4;
+    public String finish;
+    public static final int FINISH = 5;
     public boolean isAscending;
-    public static final int ISASCENDING = 4;
+    public static final int ISASCENDING = 6;
     public int offset;
-    public static final int OFFSET = 5;
+    public static final int OFFSET = 7;
     public int count;
-    public static final int COUNT = 6;
+    public static final int COUNT = 8;
 
     private final Isset __isset = new Isset();
     private static final class Isset implements java.io.Serializable {
@@ -8392,6 +7519,10 @@
           new FieldValueMetaData(TType.STRING)));
       put(COLUMNFAMILY, new FieldMetaData("columnFamily", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.STRING)));
+      put(START, new FieldMetaData("start", TFieldRequirementType.DEFAULT, 
+          new FieldValueMetaData(TType.STRING)));
+      put(FINISH, new FieldMetaData("finish", TFieldRequirementType.DEFAULT, 
+          new FieldValueMetaData(TType.STRING)));
       put(ISASCENDING, new FieldMetaData("isAscending", TFieldRequirementType.DEFAULT, 
           new FieldValueMetaData(TType.BOOL)));
       put(OFFSET, new FieldMetaData("offset", TFieldRequirementType.DEFAULT, 
@@ -8413,6 +7544,8 @@
       String tablename,
       String key,
       String columnFamily,
+      String start,
+      String finish,
       boolean isAscending,
       int offset,
       int count)
@@ -8421,6 +7554,8 @@
       this.tablename = tablename;
       this.key = key;
       this.columnFamily = columnFamily;
+      this.start = start;
+      this.finish = finish;
       this.isAscending = isAscending;
       this.__isset.isAscending = true;
       this.offset = offset;
@@ -8442,6 +7577,12 @@
       if (other.isSetColumnFamily()) {
         this.columnFamily = other.columnFamily;
       }
+      if (other.isSetStart()) {
+        this.start = other.start;
+      }
+      if (other.isSetFinish()) {
+        this.finish = other.finish;
+      }
       __isset.isAscending = other.__isset.isAscending;
       this.isAscending = other.isAscending;
       __isset.offset = other.__isset.offset;
@@ -8524,6 +7665,52 @@
       }
     }
 
+    public String getStart() {
+      return this.start;
+    }
+
+    public void setStart(String start) {
+      this.start = start;
+    }
+
+    public void unsetStart() {
+      this.start = null;
+    }
+
+    // Returns true if field start is set (has been asigned a value) and false otherwise
+    public boolean isSetStart() {
+      return this.start != null;
+    }
+
+    public void setStartIsSet(boolean value) {
+      if (!value) {
+        this.start = null;
+      }
+    }
+
+    public String getFinish() {
+      return this.finish;
+    }
+
+    public void setFinish(String finish) {
+      this.finish = finish;
+    }
+
+    public void unsetFinish() {
+      this.finish = null;
+    }
+
+    // Returns true if field finish is set (has been asigned a value) and false otherwise
+    public boolean isSetFinish() {
+      return this.finish != null;
+    }
+
+    public void setFinishIsSet(boolean value) {
+      if (!value) {
+        this.finish = null;
+      }
+    }
+
     public boolean isIsAscending() {
       return this.isAscending;
     }
@@ -8616,6 +7803,22 @@
         }
         break;
 
+      case START:
+        if (value == null) {
+          unsetStart();
+        } else {
+          setStart((String)value);
+        }
+        break;
+
+      case FINISH:
+        if (value == null) {
+          unsetFinish();
+        } else {
+          setFinish((String)value);
+        }
+        break;
+
       case ISASCENDING:
         if (value == null) {
           unsetIsAscending();
@@ -8656,6 +7859,12 @@
       case COLUMNFAMILY:
         return getColumnFamily();
 
+      case START:
+        return getStart();
+
+      case FINISH:
+        return getFinish();
+
       case ISASCENDING:
         return new Boolean(isIsAscending());
 
@@ -8679,6 +7888,10 @@
         return isSetKey();
       case COLUMNFAMILY:
         return isSetColumnFamily();
+      case START:
+        return isSetStart();
+      case FINISH:
+        return isSetFinish();
       case ISASCENDING:
         return isSetIsAscending();
       case OFFSET:
@@ -8730,6 +7943,24 @@
           return false;
       }
 
+      boolean this_present_start = true && this.isSetStart();
+      boolean that_present_start = true && that.isSetStart();
+      if (this_present_start || that_present_start) {
+        if (!(this_present_start && that_present_start))
+          return false;
+        if (!this.start.equals(that.start))
+          return false;
+      }
+
+      boolean this_present_finish = true && this.isSetFinish();
+      boolean that_present_finish = true && that.isSetFinish();
+      if (this_present_finish || that_present_finish) {
+        if (!(this_present_finish && that_present_finish))
+          return false;
+        if (!this.finish.equals(that.finish))
+          return false;
+      }
+
       boolean this_present_isAscending = true;
       boolean that_present_isAscending = true;
       if (this_present_isAscending || that_present_isAscending) {
@@ -8797,6 +8028,20 @@
               TProtocolUtil.skip(iprot, field.type);
             }
             break;
+          case START:
+            if (field.type == TType.STRING) {
+              this.start = iprot.readString();
+            } else { 
+              TProtocolUtil.skip(iprot, field.type);
+            }
+            break;
+          case FINISH:
+            if (field.type == TType.STRING) {
+              this.finish = iprot.readString();
+            } else { 
+              TProtocolUtil.skip(iprot, field.type);
+            }
+            break;
           case ISASCENDING:
             if (field.type == TType.BOOL) {
               this.isAscending = iprot.readBool();
@@ -8853,6 +8098,16 @@
         oprot.writeString(this.columnFamily);
         oprot.writeFieldEnd();
       }
+      if (this.start != null) {
+        oprot.writeFieldBegin(START_FIELD_DESC);
+        oprot.writeString(this.start);
+        oprot.writeFieldEnd();
+      }
+      if (this.finish != null) {
+        oprot.writeFieldBegin(FINISH_FIELD_DESC);
+        oprot.writeString(this.finish);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldBegin(IS_ASCENDING_FIELD_DESC);
       oprot.writeBool(this.isAscending);
       oprot.writeFieldEnd();
@@ -8895,6 +8150,22 @@
       }
       first = false;
       if (!first) sb.append(", ");
+      sb.append("start:");
+      if (this.start == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.start);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("finish:");
+      if (this.finish == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.finish);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("isAscending:");
       sb.append(this.isAscending);
       first = false;
@@ -9138,14 +8409,14 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list51 = iprot.readListBegin();
-                this.success = new ArrayList<superColumn_t>(_list51.size);
-                for (int _i52 = 0; _i52 < _list51.size; ++_i52)
+                TList _list47 = iprot.readListBegin();
+                this.success = new ArrayList<superColumn_t>(_list47.size);
+                for (int _i48 = 0; _i48 < _list47.size; ++_i48)
                 {
-                  superColumn_t _elem53;
-                  _elem53 = new superColumn_t();
-                  _elem53.read(iprot);
-                  this.success.add(_elem53);
+                  superColumn_t _elem49;
+                  _elem49 = new superColumn_t();
+                  _elem49.read(iprot);
+                  this.success.add(_elem49);
                 }
                 iprot.readListEnd();
               }
@@ -9181,8 +8452,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (superColumn_t _iter54 : this.success)          {
-            _iter54.write(oprot);
+          for (superColumn_t _iter50 : this.success)          {
+            _iter50.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -9579,13 +8850,13 @@
           case SUPERCOLUMNNAMES:
             if (field.type == TType.LIST) {
               {
-                TList _list55 = iprot.readListBegin();
-                this.superColumnNames = new ArrayList<String>(_list55.size);
-                for (int _i56 = 0; _i56 < _list55.size; ++_i56)
+                TList _list51 = iprot.readListBegin();
+                this.superColumnNames = new ArrayList<String>(_list51.size);
+                for (int _i52 = 0; _i52 < _list51.size; ++_i52)
                 {
-                  String _elem57;
-                  _elem57 = iprot.readString();
-                  this.superColumnNames.add(_elem57);
+                  String _elem53;
+                  _elem53 = iprot.readString();
+                  this.superColumnNames.add(_elem53);
                 }
                 iprot.readListEnd();
               }
@@ -9629,8 +8900,8 @@
         oprot.writeFieldBegin(SUPER_COLUMN_NAMES_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRING, this.superColumnNames.size()));
-          for (String _iter58 : this.superColumnNames)          {
-            oprot.writeString(_iter58);
+          for (String _iter54 : this.superColumnNames)          {
+            oprot.writeString(_iter54);
           }
           oprot.writeListEnd();
         }
@@ -9908,14 +9179,14 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list59 = iprot.readListBegin();
-                this.success = new ArrayList<superColumn_t>(_list59.size);
-                for (int _i60 = 0; _i60 < _list59.size; ++_i60)
+                TList _list55 = iprot.readListBegin();
+                this.success = new ArrayList<superColumn_t>(_list55.size);
+                for (int _i56 = 0; _i56 < _list55.size; ++_i56)
                 {
-                  superColumn_t _elem61;
-                  _elem61 = new superColumn_t();
-                  _elem61.read(iprot);
-                  this.success.add(_elem61);
+                  superColumn_t _elem57;
+                  _elem57 = new superColumn_t();
+                  _elem57.read(iprot);
+                  this.success.add(_elem57);
                 }
                 iprot.readListEnd();
               }
@@ -9951,8 +9222,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRUCT, this.success.size()));
-          for (superColumn_t _iter62 : this.success)          {
-            _iter62.write(oprot);
+          for (superColumn_t _iter58 : this.success)          {
+            _iter58.write(oprot);
           }
           oprot.writeListEnd();
         }
@@ -11642,13 +10913,13 @@
           case COLUMNFAMILIES:
             if (field.type == TType.LIST) {
               {
-                TList _list63 = iprot.readListBegin();
-                this.columnFamilies = new ArrayList<String>(_list63.size);
-                for (int _i64 = 0; _i64 < _list63.size; ++_i64)
+                TList _list59 = iprot.readListBegin();
+                this.columnFamilies = new ArrayList<String>(_list59.size);
+                for (int _i60 = 0; _i60 < _list59.size; ++_i60)
                 {
-                  String _elem65;
-                  _elem65 = iprot.readString();
-                  this.columnFamilies.add(_elem65);
+                  String _elem61;
+                  _elem61 = iprot.readString();
+                  this.columnFamilies.add(_elem61);
                 }
                 iprot.readListEnd();
               }
@@ -11704,8 +10975,8 @@
         oprot.writeFieldBegin(COLUMN_FAMILIES_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRING, this.columnFamilies.size()));
-          for (String _iter66 : this.columnFamilies)          {
-            oprot.writeString(_iter66);
+          for (String _iter62 : this.columnFamilies)          {
+            oprot.writeString(_iter62);
           }
           oprot.writeListEnd();
         }
@@ -12000,13 +11271,13 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list67 = iprot.readListBegin();
-                this.success = new ArrayList<String>(_list67.size);
-                for (int _i68 = 0; _i68 < _list67.size; ++_i68)
+                TList _list63 = iprot.readListBegin();
+                this.success = new ArrayList<String>(_list63.size);
+                for (int _i64 = 0; _i64 < _list63.size; ++_i64)
                 {
-                  String _elem69;
-                  _elem69 = iprot.readString();
-                  this.success.add(_elem69);
+                  String _elem65;
+                  _elem65 = iprot.readString();
+                  this.success.add(_elem65);
                 }
                 iprot.readListEnd();
               }
@@ -12042,8 +11313,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRING, this.success.size()));
-          for (String _iter70 : this.success)          {
-            oprot.writeString(_iter70);
+          for (String _iter66 : this.success)          {
+            oprot.writeString(_iter66);
           }
           oprot.writeListEnd();
         }
@@ -12850,13 +12121,13 @@
           case SUCCESS:
             if (field.type == TType.LIST) {
               {
-                TList _list71 = iprot.readListBegin();
-                this.success = new ArrayList<String>(_list71.size);
-                for (int _i72 = 0; _i72 < _list71.size; ++_i72)
+                TList _list67 = iprot.readListBegin();
+                this.success = new ArrayList<String>(_list67.size);
+                for (int _i68 = 0; _i68 < _list67.size; ++_i68)
                 {
-                  String _elem73;
-                  _elem73 = iprot.readString();
-                  this.success.add(_elem73);
+                  String _elem69;
+                  _elem69 = iprot.readString();
+                  this.success.add(_elem69);
                 }
                 iprot.readListEnd();
               }
@@ -12884,8 +12155,8 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeListBegin(new TList(TType.STRING, this.success.size()));
-          for (String _iter74 : this.success)          {
-            oprot.writeString(_iter74);
+          for (String _iter70 : this.success)          {
+            oprot.writeString(_iter70);
           }
           oprot.writeListEnd();
         }
@@ -13356,27 +12627,27 @@
           case SUCCESS:
             if (field.type == TType.MAP) {
               {
-                TMap _map75 = iprot.readMapBegin();
-                this.success = new HashMap<String,Map<String,String>>(2*_map75.size);
-                for (int _i76 = 0; _i76 < _map75.size; ++_i76)
+                TMap _map71 = iprot.readMapBegin();
+                this.success = new HashMap<String,Map<String,String>>(2*_map71.size);
+                for (int _i72 = 0; _i72 < _map71.size; ++_i72)
                 {
-                  String _key77;
-                  Map<String,String> _val78;
-                  _key77 = iprot.readString();
+                  String _key73;
+                  Map<String,String> _val74;
+                  _key73 = iprot.readString();
                   {
-                    TMap _map79 = iprot.readMapBegin();
-                    _val78 = new HashMap<String,String>(2*_map79.size);
-                    for (int _i80 = 0; _i80 < _map79.size; ++_i80)
+                    TMap _map75 = iprot.readMapBegin();
+                    _val74 = new HashMap<String,String>(2*_map75.size);
+                    for (int _i76 = 0; _i76 < _map75.size; ++_i76)
                     {
-                      String _key81;
-                      String _val82;
-                      _key81 = iprot.readString();
-                      _val82 = iprot.readString();
-                      _val78.put(_key81, _val82);
+                      String _key77;
+                      String _val78;
+                      _key77 = iprot.readString();
+                      _val78 = iprot.readString();
+                      _val74.put(_key77, _val78);
                     }
                     iprot.readMapEnd();
                   }
-                  this.success.put(_key77, _val78);
+                  this.success.put(_key73, _val74);
                 }
                 iprot.readMapEnd();
               }
@@ -13412,13 +12683,13 @@
         oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
         {
           oprot.writeMapBegin(new TMap(TType.STRING, TType.MAP, this.success.size()));
-          for (Map.Entry<String, Map<String,String>> _iter83 : this.success.entrySet())          {
-            oprot.writeString(_iter83.getKey());
+          for (Map.Entry<String, Map<String,String>> _iter79 : this.success.entrySet())          {
+            oprot.writeString(_iter79.getKey());
             {
-              oprot.writeMapBegin(new TMap(TType.STRING, TType.STRING, _iter83.getValue().size()));
-              for (Map.Entry<String, String> _iter84 : _iter83.getValue().entrySet())              {
-                oprot.writeString(_iter84.getKey());
-                oprot.writeString(_iter84.getValue());
+              oprot.writeMapBegin(new TMap(TType.STRING, TType.STRING, _iter79.getValue().size()));
+              for (Map.Entry<String, String> _iter80 : _iter79.getValue().entrySet())              {
+                oprot.writeString(_iter80.getKey());
+                oprot.writeString(_iter80.getValue());
               }
               oprot.writeMapEnd();
             }

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Tue Jul  7 15:40:46 2009
@@ -135,7 +135,7 @@
         {
             // table.cf['key']
         	List<column_t> columns = new ArrayList<column_t>();
-      		columns = thriftClient_.get_slice(tableName, key, columnFamily, true, 0, 1000000);
+      		columns = thriftClient_.get_slice(tableName, key, columnFamily, "", "", true, 0, 1000000);
             int size = columns.size();
             for (Iterator<column_t> colIter = columns.iterator(); colIter.hasNext(); )
             {

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/ColumnRangeQueryRSD.java Tue Jul  7 15:40:46 2009
@@ -97,7 +97,7 @@
         try
         {
             String key = (String)(rowKey_.get());
-            ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, columnFamily_column, true, offset_, limit_);
+            ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, columnFamily_column, "", "", true, offset_, limit_);
             row = StorageProxy.readProtocol(readCommand, StorageService.ConsistencyLevel.WEAK);
         }
         catch (Exception e)

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cql/common/SuperColumnRangeQueryRSD.java Tue Jul  7 15:40:46 2009
@@ -66,7 +66,7 @@
         try
         {
             String key = (String)(rowKey_.get());
-            ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, cfMetaData_.cfName, true, offset_, limit_);
+            ReadCommand readCommand = new SliceFromReadCommand(cfMetaData_.tableName, key, cfMetaData_.cfName, "", "", true, offset_, limit_);
             row = StorageProxy.readProtocol(readCommand, StorageService.ConsistencyLevel.WEAK);
         }
         catch (Exception e)

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=791872&r1=791871&r2=791872&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Tue Jul  7 15:40:46 2009
@@ -1528,7 +1528,7 @@
      * get a list of columns starting from a given column, in a specified order
      * only the latest version of a column is returned
      */
-    public ColumnFamily getSliceFrom(String key, String cfName, String startColumn, boolean isAscending, int offset, int count)
+    public ColumnFamily getSliceFrom(String key, String cfName, String startColumn, String finishColumn, boolean isAscending, int offset, int count)
     throws IOException, ExecutionException, InterruptedException
     {
         lock_.readLock().lock();
@@ -1614,9 +1614,11 @@
             for (IColumn column : reduced)
             {
                 if (liveColumns >= limit)
-                {
                     break;
-                }
+                if (!finishColumn.isEmpty()
+                    && ((isAscending && column.name().compareTo(finishColumn) > 0))
+                        || (!isAscending && column.name().compareTo(finishColumn) < 0))
+                    break;
                 if (!column.isMarkedForDelete())
                     liveColumns++;