You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by st...@apache.org on 2017/08/02 02:24:21 UTC

[1/6] cassandra git commit: Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 ba7128977 -> 336baebad
  refs/heads/cassandra-3.11 92d1cfec2 -> 6d1c228cd
  refs/heads/trunk fbcec0cc4 -> 8174fa510


Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

patch by Stefania Alborghetti; reviewed by Benjamin Lerer for CASSANDRA-11223


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/336baeba
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/336baeba
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/336baeba

Branch: refs/heads/cassandra-3.0
Commit: 336baebadcd6114ad961ca1027474499e15ae42a
Parents: ba71289
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Thu Jul 20 17:03:29 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:02:13 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 35 +++++++++++++++++-
 6 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
index dab22c7..afbab74 100644
--- a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
+++ b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
@@ -189,6 +189,13 @@ public abstract class AbstractReadCommandBuilder
 
     protected ClusteringIndexFilter makeFilter()
     {
+        // StatementRestrictions.isColumnRange() returns false for static compact tables, which means
+        // SelectStatement.makeClusteringIndexFilter uses a names filter with no clusterings for static
+        // compact tables, here we reproduce this behavior (CASSANDRA-11223). Note that this code is only
+        // called by tests.
+        if (cfs.metadata.isStaticCompactTable())
+            return new ClusteringIndexNamesFilter(new TreeSet<>(cfs.metadata.comparator), reversed);
+
         if (clusterings != null)
         {
             return new ClusteringIndexNamesFilter(clusterings, reversed);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
index 617e2f5..fb2dd0d 100644
--- a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
+++ b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
@@ -309,7 +309,8 @@ public class PartitionRangeReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
index 319eeb4..686ec35 100644
--- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
@@ -918,7 +918,8 @@ public class SinglePartitionReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
index 7769f2e..f4859cd 100644
--- a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
@@ -72,7 +72,9 @@ public class ClusteringIndexNamesFilter extends AbstractClusteringIndexFilter
 
     public boolean selectsAllPartition()
     {
-        return false;
+        // if the clusterings set is empty we are selecting a static row and in this case we want to count
+        // static rows so we return true
+        return clusterings.isEmpty();
     }
 
     public boolean selects(Clustering clustering)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
index 7e90c0a..8ef4b58 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
@@ -94,6 +94,43 @@ public class SelectLimitTest extends CQLTester
 
     }
 
+    @Test
+    public void testLimitInStaticTable() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k int, v int, PRIMARY KEY (k) ) WITH COMPACT STORAGE ");
+
+        for (int i = 0; i < 10; i++)
+            execute("INSERT INTO %s(k, v) VALUES (?, ?)", i, i);
+
+        assertRows(execute("SELECT * FROM %s LIMIT 5"),
+                   row(0, 0),
+                   row(1, 1),
+                   row(2, 2),
+                   row(3, 3),
+                   row(4, 4));
+
+        assertRows(execute("SELECT v FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT DISTINCT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+    }
+
     /**
      * Check for #7052 bug,
      * migrated from cql_tests.py:TestCQL.limit_compact_table()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
index d5fb8fa..c6968da 100644
--- a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
+++ b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
@@ -30,7 +30,9 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.cassandra.*;
+import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.db.marshal.AsciiType;
 import org.apache.cassandra.db.rows.Row;
 import org.apache.cassandra.db.marshal.IntegerType;
 import org.apache.cassandra.db.partitions.*;
@@ -44,6 +46,7 @@ public class PartitionRangeReadTest
     public static final String KEYSPACE2 = "PartitionRangeReadTest2";
     public static final String CF_STANDARD1 = "Standard1";
     public static final String CF_STANDARDINT = "StandardInteger1";
+    public static final String CF_COMPACT1 = "Compact1";
 
     @BeforeClass
     public static void defineSchema() throws ConfigurationException
@@ -52,7 +55,13 @@ public class PartitionRangeReadTest
         SchemaLoader.createKeyspace(KEYSPACE1,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE1, CF_STANDARD1),
-                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance));
+                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance),
+                                    CFMetaData.Builder.create(KEYSPACE1, CF_COMPACT1, false, false, false)
+                                                      .addPartitionKey("key", AsciiType.instance)
+                                                      .addClusteringColumn("column1", AsciiType.instance)
+                                                      .addRegularColumn("value", AsciiType.instance)
+                                                      .addStaticColumn("val", AsciiType.instance)
+                                                      .build());
         SchemaLoader.createKeyspace(KEYSPACE2,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE2, CF_STANDARD1));
@@ -109,6 +118,30 @@ public class PartitionRangeReadTest
     }
 
     @Test
+    public void testLimits()
+    {
+        ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_COMPACT1);
+        for (int i = 0; i < 10; i++)
+        {
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .add("val", "abcd")
+            .build()
+            .applyUnsafe();
+
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .clustering("column1")
+            .add("value", "")
+            .build()
+            .applyUnsafe();
+        }
+
+        assertEquals(10, Util.getAll(Util.cmd(cfs).build()).size());
+
+        for (int i = 0; i < 10; i++)
+            assertEquals(i, Util.getAll(Util.cmd(cfs).withLimit(i).build()).size());
+    }
+
+    @Test
     public void testRangeSliceInclusionExclusion() throws Throwable
     {
         String keyspaceName = KEYSPACE1;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[5/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by st...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6d1c228c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6d1c228c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6d1c228c

Branch: refs/heads/cassandra-3.11
Commit: 6d1c228cd955aa7c5307497ea8a6dd5ef9163012
Parents: 92d1cfe 336baeb
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Wed Aug 2 10:05:55 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:05:55 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 35 +++++++++++++++++-
 6 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
----------------------------------------------------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[2/6] cassandra git commit: Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

Posted by st...@apache.org.
Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

patch by Stefania Alborghetti; reviewed by Benjamin Lerer for CASSANDRA-11223


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/336baeba
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/336baeba
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/336baeba

Branch: refs/heads/cassandra-3.11
Commit: 336baebadcd6114ad961ca1027474499e15ae42a
Parents: ba71289
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Thu Jul 20 17:03:29 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:02:13 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 35 +++++++++++++++++-
 6 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
index dab22c7..afbab74 100644
--- a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
+++ b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
@@ -189,6 +189,13 @@ public abstract class AbstractReadCommandBuilder
 
     protected ClusteringIndexFilter makeFilter()
     {
+        // StatementRestrictions.isColumnRange() returns false for static compact tables, which means
+        // SelectStatement.makeClusteringIndexFilter uses a names filter with no clusterings for static
+        // compact tables, here we reproduce this behavior (CASSANDRA-11223). Note that this code is only
+        // called by tests.
+        if (cfs.metadata.isStaticCompactTable())
+            return new ClusteringIndexNamesFilter(new TreeSet<>(cfs.metadata.comparator), reversed);
+
         if (clusterings != null)
         {
             return new ClusteringIndexNamesFilter(clusterings, reversed);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
index 617e2f5..fb2dd0d 100644
--- a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
+++ b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
@@ -309,7 +309,8 @@ public class PartitionRangeReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
index 319eeb4..686ec35 100644
--- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
@@ -918,7 +918,8 @@ public class SinglePartitionReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
index 7769f2e..f4859cd 100644
--- a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
@@ -72,7 +72,9 @@ public class ClusteringIndexNamesFilter extends AbstractClusteringIndexFilter
 
     public boolean selectsAllPartition()
     {
-        return false;
+        // if the clusterings set is empty we are selecting a static row and in this case we want to count
+        // static rows so we return true
+        return clusterings.isEmpty();
     }
 
     public boolean selects(Clustering clustering)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
index 7e90c0a..8ef4b58 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
@@ -94,6 +94,43 @@ public class SelectLimitTest extends CQLTester
 
     }
 
+    @Test
+    public void testLimitInStaticTable() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k int, v int, PRIMARY KEY (k) ) WITH COMPACT STORAGE ");
+
+        for (int i = 0; i < 10; i++)
+            execute("INSERT INTO %s(k, v) VALUES (?, ?)", i, i);
+
+        assertRows(execute("SELECT * FROM %s LIMIT 5"),
+                   row(0, 0),
+                   row(1, 1),
+                   row(2, 2),
+                   row(3, 3),
+                   row(4, 4));
+
+        assertRows(execute("SELECT v FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT DISTINCT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+    }
+
     /**
      * Check for #7052 bug,
      * migrated from cql_tests.py:TestCQL.limit_compact_table()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
index d5fb8fa..c6968da 100644
--- a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
+++ b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
@@ -30,7 +30,9 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.cassandra.*;
+import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.db.marshal.AsciiType;
 import org.apache.cassandra.db.rows.Row;
 import org.apache.cassandra.db.marshal.IntegerType;
 import org.apache.cassandra.db.partitions.*;
@@ -44,6 +46,7 @@ public class PartitionRangeReadTest
     public static final String KEYSPACE2 = "PartitionRangeReadTest2";
     public static final String CF_STANDARD1 = "Standard1";
     public static final String CF_STANDARDINT = "StandardInteger1";
+    public static final String CF_COMPACT1 = "Compact1";
 
     @BeforeClass
     public static void defineSchema() throws ConfigurationException
@@ -52,7 +55,13 @@ public class PartitionRangeReadTest
         SchemaLoader.createKeyspace(KEYSPACE1,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE1, CF_STANDARD1),
-                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance));
+                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance),
+                                    CFMetaData.Builder.create(KEYSPACE1, CF_COMPACT1, false, false, false)
+                                                      .addPartitionKey("key", AsciiType.instance)
+                                                      .addClusteringColumn("column1", AsciiType.instance)
+                                                      .addRegularColumn("value", AsciiType.instance)
+                                                      .addStaticColumn("val", AsciiType.instance)
+                                                      .build());
         SchemaLoader.createKeyspace(KEYSPACE2,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE2, CF_STANDARD1));
@@ -109,6 +118,30 @@ public class PartitionRangeReadTest
     }
 
     @Test
+    public void testLimits()
+    {
+        ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_COMPACT1);
+        for (int i = 0; i < 10; i++)
+        {
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .add("val", "abcd")
+            .build()
+            .applyUnsafe();
+
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .clustering("column1")
+            .add("value", "")
+            .build()
+            .applyUnsafe();
+        }
+
+        assertEquals(10, Util.getAll(Util.cmd(cfs).build()).size());
+
+        for (int i = 0; i < 10; i++)
+            assertEquals(i, Util.getAll(Util.cmd(cfs).withLimit(i).build()).size());
+    }
+
+    @Test
     public void testRangeSliceInclusionExclusion() throws Throwable
     {
         String keyspaceName = KEYSPACE1;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[3/6] cassandra git commit: Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

Posted by st...@apache.org.
Fix regression introduced by CASSANDRA-11223 for counting rows in static compact tables

patch by Stefania Alborghetti; reviewed by Benjamin Lerer for CASSANDRA-11223


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/336baeba
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/336baeba
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/336baeba

Branch: refs/heads/trunk
Commit: 336baebadcd6114ad961ca1027474499e15ae42a
Parents: ba71289
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Thu Jul 20 17:03:29 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:02:13 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 35 +++++++++++++++++-
 6 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
index dab22c7..afbab74 100644
--- a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
+++ b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
@@ -189,6 +189,13 @@ public abstract class AbstractReadCommandBuilder
 
     protected ClusteringIndexFilter makeFilter()
     {
+        // StatementRestrictions.isColumnRange() returns false for static compact tables, which means
+        // SelectStatement.makeClusteringIndexFilter uses a names filter with no clusterings for static
+        // compact tables, here we reproduce this behavior (CASSANDRA-11223). Note that this code is only
+        // called by tests.
+        if (cfs.metadata.isStaticCompactTable())
+            return new ClusteringIndexNamesFilter(new TreeSet<>(cfs.metadata.comparator), reversed);
+
         if (clusterings != null)
         {
             return new ClusteringIndexNamesFilter(clusterings, reversed);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
index 617e2f5..fb2dd0d 100644
--- a/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
+++ b/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
@@ -309,7 +309,8 @@ public class PartitionRangeReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (dataRange.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
index 319eeb4..686ec35 100644
--- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
+++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
@@ -918,7 +918,8 @@ public class SinglePartitionReadCommand extends ReadCommand
     @Override
     public boolean selectsFullPartition()
     {
-        return clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns();
+        return metadata().isStaticCompactTable() ||
+               (clusteringIndexFilter.selectsAllPartition() && !rowFilter().hasExpressionOnClusteringOrRegularColumns());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
index 7769f2e..f4859cd 100644
--- a/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
@@ -72,7 +72,9 @@ public class ClusteringIndexNamesFilter extends AbstractClusteringIndexFilter
 
     public boolean selectsAllPartition()
     {
-        return false;
+        // if the clusterings set is empty we are selecting a static row and in this case we want to count
+        // static rows so we return true
+        return clusterings.isEmpty();
     }
 
     public boolean selects(Clustering clustering)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
index 7e90c0a..8ef4b58 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
@@ -94,6 +94,43 @@ public class SelectLimitTest extends CQLTester
 
     }
 
+    @Test
+    public void testLimitInStaticTable() throws Throwable
+    {
+        createTable("CREATE TABLE %s (k int, v int, PRIMARY KEY (k) ) WITH COMPACT STORAGE ");
+
+        for (int i = 0; i < 10; i++)
+            execute("INSERT INTO %s(k, v) VALUES (?, ?)", i, i);
+
+        assertRows(execute("SELECT * FROM %s LIMIT 5"),
+                   row(0, 0),
+                   row(1, 1),
+                   row(2, 2),
+                   row(3, 3),
+                   row(4, 4));
+
+        assertRows(execute("SELECT v FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+
+        assertRows(execute("SELECT DISTINCT k FROM %s LIMIT 5"),
+                   row(0),
+                   row(1),
+                   row(2),
+                   row(3),
+                   row(4));
+    }
+
     /**
      * Check for #7052 bug,
      * migrated from cql_tests.py:TestCQL.limit_compact_table()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/336baeba/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
index d5fb8fa..c6968da 100644
--- a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
+++ b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
@@ -30,7 +30,9 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.cassandra.*;
+import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.db.marshal.AsciiType;
 import org.apache.cassandra.db.rows.Row;
 import org.apache.cassandra.db.marshal.IntegerType;
 import org.apache.cassandra.db.partitions.*;
@@ -44,6 +46,7 @@ public class PartitionRangeReadTest
     public static final String KEYSPACE2 = "PartitionRangeReadTest2";
     public static final String CF_STANDARD1 = "Standard1";
     public static final String CF_STANDARDINT = "StandardInteger1";
+    public static final String CF_COMPACT1 = "Compact1";
 
     @BeforeClass
     public static void defineSchema() throws ConfigurationException
@@ -52,7 +55,13 @@ public class PartitionRangeReadTest
         SchemaLoader.createKeyspace(KEYSPACE1,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE1, CF_STANDARD1),
-                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance));
+                                    SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance),
+                                    CFMetaData.Builder.create(KEYSPACE1, CF_COMPACT1, false, false, false)
+                                                      .addPartitionKey("key", AsciiType.instance)
+                                                      .addClusteringColumn("column1", AsciiType.instance)
+                                                      .addRegularColumn("value", AsciiType.instance)
+                                                      .addStaticColumn("val", AsciiType.instance)
+                                                      .build());
         SchemaLoader.createKeyspace(KEYSPACE2,
                                     KeyspaceParams.simple(1),
                                     SchemaLoader.standardCFMD(KEYSPACE2, CF_STANDARD1));
@@ -109,6 +118,30 @@ public class PartitionRangeReadTest
     }
 
     @Test
+    public void testLimits()
+    {
+        ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_COMPACT1);
+        for (int i = 0; i < 10; i++)
+        {
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .add("val", "abcd")
+            .build()
+            .applyUnsafe();
+
+            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
+            .clustering("column1")
+            .add("value", "")
+            .build()
+            .applyUnsafe();
+        }
+
+        assertEquals(10, Util.getAll(Util.cmd(cfs).build()).size());
+
+        for (int i = 0; i < 10; i++)
+            assertEquals(i, Util.getAll(Util.cmd(cfs).withLimit(i).build()).size());
+    }
+
+    @Test
     public void testRangeSliceInclusionExclusion() throws Throwable
     {
         String keyspaceName = KEYSPACE1;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[6/6] cassandra git commit: Merge branch 'cassandra-3.11' into trunk

Posted by st...@apache.org.
Merge branch 'cassandra-3.11' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8174fa51
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8174fa51
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8174fa51

Branch: refs/heads/trunk
Commit: 8174fa510cd9007bba1f3726203fabf15b608d61
Parents: fbcec0c 6d1c228
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Wed Aug 2 10:18:43 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:20:15 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 37 ++++++++++++++++++--
 6 files changed, 86 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8174fa51/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
index 5a049d3,9290d6c..8ced1c7
--- a/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
+++ b/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
@@@ -189,6 -189,13 +189,13 @@@ public abstract class AbstractReadComma
  
      protected ClusteringIndexFilter makeFilter()
      {
+         // StatementRestrictions.isColumnRange() returns false for static compact tables, which means
+         // SelectStatement.makeClusteringIndexFilter uses a names filter with no clusterings for static
+         // compact tables, here we reproduce this behavior (CASSANDRA-11223). Note that this code is only
+         // called by tests.
 -        if (cfs.metadata.isStaticCompactTable())
 -            return new ClusteringIndexNamesFilter(new TreeSet<>(cfs.metadata.comparator), reversed);
++        if (cfs.metadata().isStaticCompactTable())
++            return new ClusteringIndexNamesFilter(new TreeSet<>(cfs.metadata().comparator), reversed);
+ 
          if (clusterings != null)
          {
              return new ClusteringIndexNamesFilter(clusterings, reversed);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8174fa51/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8174fa51/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8174fa51/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8174fa51/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
index c433d8e,c6968da..9ae6c75
--- a/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
+++ b/test/unit/org/apache/cassandra/db/PartitionRangeReadTest.java
@@@ -30,12 -30,14 +30,14 @@@ import static org.junit.Assert.assertEq
  import static org.junit.Assert.assertTrue;
  
  import org.apache.cassandra.*;
- import org.apache.cassandra.schema.ColumnMetadata;
 -import org.apache.cassandra.config.CFMetaData;
 -import org.apache.cassandra.config.ColumnDefinition;
+ import org.apache.cassandra.db.marshal.AsciiType;
  import org.apache.cassandra.db.rows.Row;
  import org.apache.cassandra.db.marshal.IntegerType;
  import org.apache.cassandra.db.partitions.*;
  import org.apache.cassandra.exceptions.ConfigurationException;
++import org.apache.cassandra.schema.ColumnMetadata;
  import org.apache.cassandra.schema.KeyspaceParams;
++import org.apache.cassandra.schema.TableMetadata;
  import org.apache.cassandra.utils.ByteBufferUtil;
  
  public class PartitionRangeReadTest
@@@ -52,7 -55,13 +55,13 @@@
          SchemaLoader.createKeyspace(KEYSPACE1,
                                      KeyspaceParams.simple(1),
                                      SchemaLoader.standardCFMD(KEYSPACE1, CF_STANDARD1),
-                                     SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance));
+                                     SchemaLoader.denseCFMD(KEYSPACE1, CF_STANDARDINT, IntegerType.instance),
 -                                    CFMetaData.Builder.create(KEYSPACE1, CF_COMPACT1, false, false, false)
 -                                                      .addPartitionKey("key", AsciiType.instance)
 -                                                      .addClusteringColumn("column1", AsciiType.instance)
 -                                                      .addRegularColumn("value", AsciiType.instance)
 -                                                      .addStaticColumn("val", AsciiType.instance)
 -                                                      .build());
++                                    TableMetadata.builder(KEYSPACE1, CF_COMPACT1)
++                                                 .isCompound(false)
++                                                 .addPartitionKeyColumn("key", AsciiType.instance)
++                                                 .addClusteringColumn("column1", AsciiType.instance)
++                                                 .addRegularColumn("value", AsciiType.instance)
++                                                 .addStaticColumn("val", AsciiType.instance));
          SchemaLoader.createKeyspace(KEYSPACE2,
                                      KeyspaceParams.simple(1),
                                      SchemaLoader.standardCFMD(KEYSPACE2, CF_STANDARD1));
@@@ -109,6 -118,30 +118,30 @@@
      }
  
      @Test
+     public void testLimits()
+     {
+         ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_COMPACT1);
+         for (int i = 0; i < 10; i++)
+         {
 -            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
++            new RowUpdateBuilder(cfs.metadata(), 0, Integer.toString(i))
+             .add("val", "abcd")
+             .build()
+             .applyUnsafe();
+ 
 -            new RowUpdateBuilder(cfs.metadata, 0, Integer.toString(i))
++            new RowUpdateBuilder(cfs.metadata(), 0, Integer.toString(i))
+             .clustering("column1")
+             .add("value", "")
+             .build()
+             .applyUnsafe();
+         }
+ 
+         assertEquals(10, Util.getAll(Util.cmd(cfs).build()).size());
+ 
+         for (int i = 0; i < 10; i++)
+             assertEquals(i, Util.getAll(Util.cmd(cfs).withLimit(i).build()).size());
+     }
+ 
+     @Test
      public void testRangeSliceInclusionExclusion() throws Throwable
      {
          String keyspaceName = KEYSPACE1;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


[4/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by st...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6d1c228c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6d1c228c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6d1c228c

Branch: refs/heads/trunk
Commit: 6d1c228cd955aa7c5307497ea8a6dd5ef9163012
Parents: 92d1cfe 336baeb
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Wed Aug 2 10:05:55 2017 +0800
Committer: Stefania Alborghetti <st...@datastax.com>
Committed: Wed Aug 2 10:05:55 2017 +0800

----------------------------------------------------------------------
 .../db/AbstractReadCommandBuilder.java          |  7 ++++
 .../cassandra/db/PartitionRangeReadCommand.java |  3 +-
 .../db/SinglePartitionReadCommand.java          |  3 +-
 .../db/filter/ClusteringIndexNamesFilter.java   |  4 ++-
 .../validation/operations/SelectLimitTest.java  | 37 ++++++++++++++++++++
 .../cassandra/db/PartitionRangeReadTest.java    | 35 +++++++++++++++++-
 6 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/AbstractReadCommandBuilder.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/PartitionRangeReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/src/java/org/apache/cassandra/db/filter/ClusteringIndexNamesFilter.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6d1c228c/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java
----------------------------------------------------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org