You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/02/20 17:52:17 UTC
[1/2] git commit: Fix CQL3 composite partition key error
Fix CQL3 composite partition key error
patch by slebresne; reviewed by jbellis for CASSANDRA-5240
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/03b4c279
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/03b4c279
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/03b4c279
Branch: refs/heads/cassandra-1.2
Commit: 03b4c2794c4c0f5e11ec9a24b52b523d8746fbb5
Parents: 686f516
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Feb 20 17:49:41 2013 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Feb 20 17:49:41 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/cql3/statements/SelectStatement.java | 9 +++++++--
2 files changed, 8 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/03b4c279/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0489968..f684747 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -28,6 +28,7 @@
* cli: Add JMX authentication support (CASSANDRA-5080)
* Fix forceFlush behavior (CASSANDRA-5241)
* cqlsh: Add username autocompletion (CASSANDRA-5231)
+ * Fix CQL3 composite partition key error (CASSANDRA-5240)
1.2.1
http://git-wip-us.apache.org/repos/asf/cassandra/blob/03b4c279/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index 4491394..4badb8e 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -357,7 +357,7 @@ public class SelectStatement implements CQLStatement
private ByteBuffer getKeyBound(Bound b, List<ByteBuffer> variables) throws InvalidRequestException
{
- return buildBound(b, cfDef.keys.values(), keyRestrictions, isReversed, cfDef.getKeyNameBuilder(), variables);
+ return buildBound(b, cfDef.keys.values(), keyRestrictions, false, cfDef.getKeyNameBuilder(), variables);
}
private Token getTokenBound(Bound b, List<ByteBuffer> variables, IPartitioner<?> p) throws InvalidRequestException
@@ -521,7 +521,12 @@ public class SelectStatement implements CQLStatement
}
}
// Means no relation at all or everything was an equal
- return (bound == Bound.END) ? builder.buildAsEndOfRange() : builder.build();
+ // Note: if the builder is "full", there is no need to use the end-of-component bit. For columns selection,
+ // it would be harmless to do it. However, we use this method got the partition key too. And when a query
+ // with 2ndary index is done, and with the the partition provided with an EQ, we'll end up here, and in that
+ // case using the eoc would be bad, since for the random partitioner we have no guarantee that
+ // builder.buildAsEndOfRange() will sort after builder.build() (see #5240).
+ return (bound == Bound.END && builder.remainingCount() > 0) ? builder.buildAsEndOfRange() : builder.build();
}
private ByteBuffer getRequestedBound(Bound b, List<ByteBuffer> variables) throws InvalidRequestException