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 2015/08/18 09:05:37 UTC
[1/2] cassandra git commit: Fix queries on static compact tables
Repository: cassandra
Updated Branches:
refs/heads/trunk e93977310 -> 30a704e01
Fix queries on static compact tables
patch by slebresne; reviewed by iamaleskey for CASSANDRA-10093
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/23503205
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/23503205
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/23503205
Branch: refs/heads/trunk
Commit: 2350320501bcd26085181b929f4718cb12d08b41
Parents: df65a6c
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon Aug 17 15:00:41 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Aug 18 09:04:24 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/restrictions/StatementRestrictions.java | 11 ++++++++++-
.../cassandra/cql3/statements/SelectStatement.java | 5 ++++-
src/java/org/apache/cassandra/db/Clustering.java | 1 +
4 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/23503205/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index b4b568c..54a6a07 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.0-beta1
+ * Fix query on static compact tables (CASSANDRA-10093)
* Fix race during construction of commit log (CASSANDRA-10049)
* Add option to only purge repaired tombstones (CASSANDRA-6434)
* Change authorization handling for MVs (CASSANDRA-9927)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/23503205/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
index 1a3b083..36f11ad 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
@@ -35,6 +35,7 @@ import org.apache.cassandra.dht.*;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.btree.BTreeSet;
import static org.apache.cassandra.cql3.statements.RequestValidations.checkFalse;
import static org.apache.cassandra.cql3.statements.RequestValidations.checkNotNull;
@@ -478,6 +479,12 @@ public final class StatementRestrictions
*/
public NavigableSet<Clustering> getClusteringColumns(QueryOptions options) throws InvalidRequestException
{
+ // If this is a names command and the table is a static compact one, then as far as CQL is concerned we have
+ // only a single row which internally correspond to the static parts. In which case we want to return an empty
+ // set (since that's what ClusteringIndexNamesFilter expects).
+ if (cfm.isStaticCompactTable())
+ return BTreeSet.empty(cfm.comparator);
+
return clusteringColumnsRestrictions.valuesAsClustering(options);
}
@@ -513,7 +520,9 @@ public final class StatementRestrictions
*/
public boolean isColumnRange()
{
- // For static compact tables we need to ignore the fake clustering column.
+ // For static compact tables we want to ignore the fake clustering column (note that if we weren't special casing,
+ // this would mean a 'SELECT *' on a static compact table would query whole partitions, even though we'll only return
+ // the static part as far as CQL is concerned. This is thus mostly an optimization to use the query-by-name path).
int numberOfClusteringColumns = cfm.isStaticCompactTable() ? 0 : cfm.clusteringColumns().size();
// it is a range query if it has at least one the column alias for which no relation is defined or is not EQ.
return clusteringColumnsRestrictions.size() < numberOfClusteringColumns
http://git-wip-us.apache.org/repos/asf/cassandra/blob/23503205/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 9acbb35..01ce8e6 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -484,7 +484,10 @@ public class SelectStatement implements CQLStatement
else
{
NavigableSet<Clustering> clusterings = getRequestedRows(options);
- if (clusterings.isEmpty() && !selection.containsStaticColumns()) // in case of IN () for the last column of the key
+ // We can have no clusterings if either we're only selecting the static columns, or if we have
+ // a 'IN ()' for clusterings. In that case, we still want to query if some static columns are
+ // queried. But we're fine otherwise.
+ if (clusterings.isEmpty() && queriedColumns.fetchedColumns().statics.isEmpty())
return null;
return new ClusteringIndexNamesFilter(clusterings, isReversed);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/23503205/src/java/org/apache/cassandra/db/Clustering.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Clustering.java b/src/java/org/apache/cassandra/db/Clustering.java
index a29ce65..2fb92d9 100644
--- a/src/java/org/apache/cassandra/db/Clustering.java
+++ b/src/java/org/apache/cassandra/db/Clustering.java
@@ -134,6 +134,7 @@ public class Clustering extends AbstractClusteringPrefix
public void serialize(Clustering clustering, DataOutputPlus out, int version, List<AbstractType<?>> types) throws IOException
{
assert clustering != STATIC_CLUSTERING : "We should never serialize a static clustering";
+ assert clustering.size() == types.size() : "Invalid clustering for the table: " + clustering;
ClusteringPrefix.serializer.serializeValuesWithoutSize(clustering, out, version, types);
}
[2/2] cassandra git commit: Merge branch 'cassandra-3.0' into trunk
Posted by sl...@apache.org.
Merge branch 'cassandra-3.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/30a704e0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/30a704e0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/30a704e0
Branch: refs/heads/trunk
Commit: 30a704e01b18f2a6446db28a3d00cd4551fe59ca
Parents: e939773 2350320
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Tue Aug 18 09:05:30 2015 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Aug 18 09:05:30 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/restrictions/StatementRestrictions.java | 11 ++++++++++-
.../cassandra/cql3/statements/SelectStatement.java | 5 ++++-
src/java/org/apache/cassandra/db/Clustering.java | 1 +
4 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/30a704e0/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 5d8797f,54a6a07..eba9e36
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,8 -1,5 +1,9 @@@
+3.2
+ * Add transparent data encryption core classes (CASSANDRA-9945)
+
+
3.0.0-beta1
+ * Fix query on static compact tables (CASSANDRA-10093)
* Fix race during construction of commit log (CASSANDRA-10049)
* Add option to only purge repaired tombstones (CASSANDRA-6434)
* Change authorization handling for MVs (CASSANDRA-9927)