You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2014/05/20 18:14:38 UTC
[02/12] git commit: Fix cql3 reader when columns is reversed.
Fix cql3 reader when columns is reversed.
Patch by Alex Liu, reviewed by pkolackzk for CASSANDRA-7100
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1b9f712e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1b9f712e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1b9f712e
Branch: refs/heads/cassandra-2.1
Commit: 1b9f712eb8852068f4e324b9819a957ac7ad4f0e
Parents: 76139e4
Author: Brandon Williams <br...@apache.org>
Authored: Tue May 20 10:55:33 2014 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Tue May 20 10:55:33 2014 -0500
----------------------------------------------------------------------
.../hadoop/cql3/CqlPagingRecordReader.java | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1b9f712e/src/java/org/apache/cassandra/hadoop/cql3/CqlPagingRecordReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlPagingRecordReader.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlPagingRecordReader.java
index 1492ce0..03d9ae9 100644
--- a/src/java/org/apache/cassandra/hadoop/cql3/CqlPagingRecordReader.java
+++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlPagingRecordReader.java
@@ -27,13 +27,14 @@ import java.util.*;
import com.google.common.base.Optional;
import com.google.common.collect.AbstractIterator;
import com.google.common.collect.Iterables;
+
import org.apache.cassandra.hadoop.HadoopCompat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.CompositeType;
import org.apache.cassandra.db.marshal.LongType;
+import org.apache.cassandra.db.marshal.ReversedType;
import org.apache.cassandra.db.marshal.TypeParser;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.exceptions.ConfigurationException;
@@ -507,7 +508,7 @@ public class CqlPagingRecordReader extends RecordReader<Map<String, ByteBuffer>,
private Pair<Integer, String> whereClause(List<BoundColumn> column, int position)
{
if (position == column.size() - 1 || column.get(position + 1).value == null)
- return Pair.create(position + 2, String.format(" AND %s > ? ", quote(column.get(position).name)));
+ return Pair.create(position + 2, String.format(" AND %s %s ? ", quote(column.get(position).name), column.get(position).reversed ? " < " : " >"));
Pair<Integer, String> clause = whereClause(column, position + 1);
return Pair.create(clause.left, String.format(" AND %s = ? %s", quote(column.get(position).name), clause.right));
@@ -711,6 +712,20 @@ public class CqlPagingRecordReader extends RecordReader<Map<String, ByteBuffer>,
{
partitionBoundColumns.get(0).validator = keyValidator;
}
+
+ Column rawComparator = cqlRow.columns.get(3);
+ String comparator = ByteBufferUtil.string(ByteBuffer.wrap(rawComparator.getValue()));
+ logger.debug("comparator: {}", comparator);
+ AbstractType comparatorValidator = parseType(comparator);
+ if (comparatorValidator instanceof CompositeType)
+ {
+ for (int i = 0; i < clusterColumns.size(); i++)
+ clusterColumns.get(i).reversed = (((CompositeType) comparatorValidator).types.get(i) instanceof ReversedType);
+ }
+ else if (comparatorValidator instanceof ReversedType)
+ {
+ clusterColumns.get(0).reversed = true;
+ }
}
/** check whether current row is at the end of range */
@@ -762,6 +777,7 @@ public class CqlPagingRecordReader extends RecordReader<Map<String, ByteBuffer>,
final String name;
ByteBuffer value;
AbstractType<?> validator;
+ boolean reversed = false;
public BoundColumn(String name)
{