Repository: cassandra Updated Branches: refs/heads/cassandra-3.0 c6ed2e0bb -> 9961b6991 refs/heads/trunk 6237022e0 -> e1a14f502
MV should only query complex columns included in the view Patch by Carl Yeksigian; reviewed by Jake Luciani for CASSANDRA-11069 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9961b699 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9961b699 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9961b699 Branch: refs/heads/cassandra-3.0 Commit: 9961b6991130ec4bedaf6fdfd8562229b52be7f0 Parents: c6ed2e0 Author: Carl Yeksigian <[email protected]> Authored: Fri Feb 26 15:56:20 2016 -0500 Committer: Carl Yeksigian <[email protected]> Committed: Fri Feb 26 15:56:20 2016 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/db/view/View.java | 2 +- .../org/apache/cassandra/cql3/ViewTest.java | 47 +++++++++++++------- 3 files changed, 34 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9961b699/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index bdcf328..fbc1c8a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.4 + * MV should only query complex columns included in the view (CASSANDRA-11069) * Failed aggregate creation breaks server permanently (CASSANDRA-11064) * Add sstabledump tool (CASSANDRA-7464) * Introduce backpressure for hints (CASSANDRA-10972) http://git-wip-us.apache.org/repos/asf/cassandra/blob/9961b699/src/java/org/apache/cassandra/db/view/View.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/view/View.java b/src/java/org/apache/cassandra/db/view/View.java index 30e9776..1b823aa 100644 --- a/src/java/org/apache/cassandra/db/view/View.java +++ b/src/java/org/apache/cassandra/db/view/View.java @@ -169,7 +169,7 @@ public class View for (ColumnDefinition cdef : baseCfs.metadata.allColumns()) { - if (cdef.isComplex()) + if (cdef.isComplex() && definition.includes(cdef.name)) { baseComplexColumns.add(cdef); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/9961b699/test/unit/org/apache/cassandra/cql3/ViewTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/ViewTest.java b/test/unit/org/apache/cassandra/cql3/ViewTest.java index 2e3cf5f..830f37f 100644 --- a/test/unit/org/apache/cassandra/cql3/ViewTest.java +++ b/test/unit/org/apache/cassandra/cql3/ViewTest.java @@ -18,20 +18,20 @@ package org.apache.cassandra.cql3; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.net.InetAddress; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; import java.util.HashSet; import java.util.List; -import java.util.UUID; import java.util.concurrent.TimeUnit; import junit.framework.Assert; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.exceptions.InvalidQueryException; import org.apache.cassandra.concurrent.SEPExecutor; import org.apache.cassandra.concurrent.Stage; import org.apache.cassandra.concurrent.StageManager; @@ -41,14 +41,6 @@ import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.SystemKeyspace; import org.apache.cassandra.utils.FBUtilities; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Row; -import com.datastax.driver.core.exceptions.InvalidQueryException; import static org.junit.Assert.assertTrue; @@ -1002,4 +994,29 @@ public class ViewTest extends CQLTester mvRows = executeNet(protocolVersion, "SELECT a, d, b FROM mv1"); assertTrue(mvRows.isExhausted()); } + + @Test + public void testCollectionInView() throws Throwable + { + createTable("CREATE TABLE %s (" + + "a int," + + "b int," + + "c map<int, text>," + + "PRIMARY KEY (a))"); + + executeNet(protocolVersion, "USE " + keyspace()); + createView("mvmap", "CREATE MATERIALIZED VIEW %s AS SELECT a, b FROM %%s WHERE b IS NOT NULL PRIMARY KEY (b, a)"); + + updateView("INSERT INTO %s (a, b) VALUES (?, ?)", 0, 0); + ResultSet mvRows = executeNet(protocolVersion, "SELECT a, b FROM mvmap WHERE b = ?", 0); + assertRowsNet(protocolVersion, mvRows, row(0, 0)); + + updateView("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 1, 1, map(1, "1")); + mvRows = executeNet(protocolVersion, "SELECT a, b FROM mvmap WHERE b = ?", 1); + assertRowsNet(protocolVersion, mvRows, row(1, 1)); + + updateView("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 0, map(0, "0")); + mvRows = executeNet(protocolVersion, "SELECT a, b FROM mvmap WHERE b = ?", 0); + assertRowsNet(protocolVersion, mvRows, row(0, 0)); + } }
