Repository: cassandra Updated Branches: refs/heads/trunk 1c41a9ac2 -> 4a566139d
http://git-wip-us.apache.org/repos/asf/cassandra/blob/83f8ccc6/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 74c6374..101eb3d 100644 --- a/test/unit/org/apache/cassandra/cql3/ViewTest.java +++ b/test/unit/org/apache/cassandra/cql3/ViewTest.java @@ -37,13 +37,9 @@ import org.apache.cassandra.concurrent.Stage; import org.apache.cassandra.concurrent.StageManager; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; -import org.apache.cassandra.config.Schema; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.SystemKeyspace; -import org.apache.cassandra.serializers.SimpleDateSerializer; -import org.apache.cassandra.serializers.TimeSerializer; -import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.junit.After; import org.junit.Before; @@ -54,6 +50,8 @@ 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; + public class ViewTest extends CQLTester { int protocolVersion = 4; @@ -106,45 +104,6 @@ public class ViewTest extends CQLTester } @Test - public void testCaseSensitivity() throws Throwable - { - createTable("CREATE TABLE %s (\"theKey\" int, \"theClustering\" int, \"theValue\" int, PRIMARY KEY (\"theKey\", \"theClustering\"))"); - - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - execute("INSERT INTO %s (\"theKey\", \"theClustering\", \"theValue\") VALUES (?, ?, ?)", 0, 0, 0); - - createView("mv_test", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s " + - "WHERE \"theKey\" IS NOT NULL AND \"theClustering\" IS NOT NULL AND \"theValue\" IS NOT NULL " + - "PRIMARY KEY (\"theKey\", \"theClustering\")"); - - while (!SystemKeyspace.isViewBuilt(keyspace(), "mv_test")) - Thread.sleep(10); - createView("mv_test2", "CREATE MATERIALIZED VIEW %s AS SELECT \"theKey\", \"theClustering\", \"theValue\" FROM %%s " + - "WHERE \"theKey\" IS NOT NULL AND \"theClustering\" IS NOT NULL AND \"theValue\" IS NOT NULL " + - "PRIMARY KEY (\"theKey\", \"theClustering\")"); - while (!SystemKeyspace.isViewBuilt(keyspace(), "mv_test2")) - Thread.sleep(10); - - for (String mvname : Arrays.asList("mv_test", "mv_test2")) - { - assertRows(execute("SELECT \"theKey\", \"theClustering\", \"theValue\" FROM " + mvname), - row(0, 0, 0) - ); - } - - executeNet(protocolVersion, "ALTER TABLE %s RENAME \"theClustering\" TO \"Col\""); - - for (String mvname : Arrays.asList("mv_test", "mv_test2")) - { - assertRows(execute("SELECT \"theKey\", \"Col\", \"theValue\" FROM " + mvname), - row(0, 0, 0) - ); - } - } - - @Test public void testPartitionTombstone() throws Throwable { createTable("CREATE TABLE %s (k1 int, c1 int , val int, PRIMARY KEY (k1))"); @@ -241,67 +200,6 @@ public class ViewTest extends CQLTester } @Test - public void testAccessAndSchema() throws Throwable - { - createTable("CREATE TABLE %s (" + - "k int, " + - "asciival ascii, " + - "bigintval bigint, " + - "PRIMARY KEY((k, asciival)))"); - - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - createView("mv1_test", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE bigintval IS NOT NULL AND k IS NOT NULL AND asciival IS NOT NULL PRIMARY KEY (bigintval, k, asciival)"); - updateView("INSERT INTO %s(k,asciival,bigintval)VALUES(?,?,?)", 0, "foo", 1L); - - try - { - updateView("INSERT INTO mv1_test(k,asciival,bigintval) VALUES(?,?,?)", 1, "foo", 2L); - Assert.fail("Shouldn't be able to modify a MV directly"); - } - catch (Exception e) - { - } - - try - { - executeNet(protocolVersion, "ALTER TABLE mv1_test ADD foo text"); - Assert.fail("Should not be able to use alter table with MV"); - } - catch (Exception e) - { - } - - try - { - executeNet(protocolVersion, "ALTER TABLE mv1_test WITH compaction = { 'class' : 'LeveledCompactionStrategy' }"); - Assert.fail("Should not be able to use alter table with MV"); - } - catch (Exception e) - { - } - - executeNet(protocolVersion, "ALTER MATERIALIZED VIEW mv1_test WITH compaction = { 'class' : 'LeveledCompactionStrategy' }"); - - //Test alter add - executeNet(protocolVersion, "ALTER TABLE %s ADD foo text"); - CFMetaData metadata = Schema.instance.getCFMetaData(keyspace(), "mv1_test"); - Assert.assertNotNull(metadata.getColumnDefinition(ByteBufferUtil.bytes("foo"))); - - updateView("INSERT INTO %s(k,asciival,bigintval,foo)VALUES(?,?,?,?)", 0, "foo", 1L, "bar"); - assertRows(execute("SELECT foo from %s"), row("bar")); - - //Test alter rename - executeNet(protocolVersion, "ALTER TABLE %s RENAME asciival TO bar"); - - assertRows(execute("SELECT bar from %s"), row("foo")); - metadata = Schema.instance.getCFMetaData(keyspace(), "mv1_test"); - Assert.assertNotNull(metadata.getColumnDefinition(ByteBufferUtil.bytes("bar"))); - } - - - @Test public void testStaticTable() throws Throwable { createTable("CREATE TABLE %s (" + @@ -863,501 +761,6 @@ public class ViewTest extends CQLTester } @Test - public void testTwoTablesOneView() throws Throwable - { - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - createTable("CREATE TABLE " + keyspace() + ".dummy_table (" + - "j int, " + - "intval int, " + - "PRIMARY KEY (j))"); - - createTable("CREATE TABLE " + keyspace() + ".real_base (" + - "k int, " + - "intval int, " + - "PRIMARY KEY (k))"); - - createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM " + keyspace() + ".real_base WHERE k IS NOT NULL AND intval IS NOT NULL PRIMARY KEY (intval, k)"); - createView("mv2", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM " + keyspace() + ".dummy_table WHERE j IS NOT NULL AND intval IS NOT NULL PRIMARY KEY (intval, j)"); - - updateView("INSERT INTO " + keyspace() + ".real_base (k, intval) VALUES (?, ?)", 0, 0); - assertRows(execute("SELECT k, intval FROM " + keyspace() + ".real_base WHERE k = ?", 0), row(0, 0)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 0), row(0, 0)); - - updateView("INSERT INTO " + keyspace() + ".real_base (k, intval) VALUES (?, ?)", 0, 1); - assertRows(execute("SELECT k, intval FROM " + keyspace() + ".real_base WHERE k = ?", 0), row(0, 1)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 1), row(0, 1)); - - assertRows(execute("SELECT k, intval FROM " + keyspace() + ".real_base WHERE k = ?", 0), row(0, 1)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 1), row(0, 1)); - - updateView("INSERT INTO " + keyspace() +".dummy_table (j, intval) VALUES(?, ?)", 0, 1); - assertRows(execute("SELECT j, intval FROM " + keyspace() + ".dummy_table WHERE j = ?", 0), row(0, 1)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 1), row(0, 1)); - } - - @Test - public void testDecimalUpdate() throws Throwable - { - createTable("CREATE TABLE %s (" + - "k int, " + - "decimalval decimal, " + - "asciival ascii, " + - "PRIMARY KEY (k))"); - - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND decimalval IS NOT NULL PRIMARY KEY (decimalval, k)"); - - updateView("INSERT INTO %s (k, asciival) VALUES (?, ?)", 0, "ascii text"); - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "123123"); - assertRows(execute("SELECT k, decimalval FROM %s WHERE k = ?", 0), row(0, new BigDecimal("123123"))); - assertRows(execute("SELECT k, asciival from mv WHERE decimalval = fromJson(?)", "123123.123123")); - assertRows(execute("SELECT k, asciival from mv WHERE decimalval = fromJson(?)", "123123"), row(0, "ascii text")); - - // accept strings for numbers that cannot be represented as doubles - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "\"123123.123123\""); - assertRows(execute("SELECT k, decimalval, asciival FROM %s WHERE k = ?", 0), row(0, new BigDecimal("123123.123123"), "ascii text")); - assertRows(execute("SELECT k, asciival from mv WHERE decimalval = fromJson(?)", "\"123123.123123\""), row(0, "ascii text")); - } - - @Test - public void testReuseName() throws Throwable - { - createTable("CREATE TABLE %s (" + - "k int, " + - "intval int, " + - "PRIMARY KEY (k))"); - - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND intval IS NOT NULL PRIMARY KEY (intval, k)"); - - updateView("INSERT INTO %s (k, intval) VALUES (?, ?)", 0, 0); - assertRows(execute("SELECT k, intval FROM %s WHERE k = ?", 0), row(0, 0)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 0), row(0, 0)); - - executeNet(protocolVersion, "DROP MATERIALIZED VIEW mv"); - views.remove("mv"); - - createView("mv", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE k IS NOT NULL AND intval IS NOT NULL PRIMARY KEY (intval, k)"); - - updateView("INSERT INTO %s (k, intval) VALUES (?, ?)", 0, 1); - assertRows(execute("SELECT k, intval FROM %s WHERE k = ?", 0), row(0, 1)); - assertRows(execute("SELECT k, intval from mv WHERE intval = ?", 1), row(0, 1)); - } - - @Test - public void testAllTypes() throws Throwable - { - String myType = createType("CREATE TYPE %s (a int, b uuid, c set<text>)"); - - createTable("CREATE TABLE %s (" + - "k int PRIMARY KEY, " + - "asciival ascii, " + - "bigintval bigint, " + - "blobval blob, " + - "booleanval boolean, " + - "dateval date, " + - "decimalval decimal, " + - "doubleval double, " + - "floatval float, " + - "inetval inet, " + - "intval int, " + - "textval text, " + - "timeval time, " + - "timestampval timestamp, " + - "timeuuidval timeuuid, " + - "uuidval uuid," + - "varcharval varchar, " + - "varintval varint, " + - "listval list<int>, " + - "frozenlistval frozen<list<int>>, " + - "setval set<uuid>, " + - "frozensetval frozen<set<uuid>>, " + - "mapval map<ascii, int>," + - "frozenmapval frozen<map<ascii, int>>," + - "tupleval frozen<tuple<int, ascii, uuid>>," + - "udtval frozen<" + myType + ">)"); - - CFMetaData metadata = currentTableMetadata(); - - execute("USE " + keyspace()); - executeNet(protocolVersion, "USE " + keyspace()); - - for (ColumnDefinition def : new HashSet<>(metadata.allColumns())) - { - try - { - createView("mv_" + def.name, "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE " + def.name + " IS NOT NULL AND k IS NOT NULL PRIMARY KEY (" + def.name + ",k)"); - - if (def.type.isMultiCell()) - Assert.fail("MV on a multicell should fail " + def); - - if (def.isPartitionKey()) - Assert.fail("MV on partition key should fail " + def); - } - catch (InvalidQueryException e) - { - if (!def.type.isMultiCell() && !def.isPartitionKey()) - Assert.fail("MV creation failed on " + def); - } - } - - // fromJson() can only be used when the receiver type is known - assertInvalidMessage("fromJson() cannot be used in the selection clause", "SELECT fromJson(asciival) FROM %s", 0, 0); - - String func1 = createFunction(KEYSPACE, "int", "CREATE FUNCTION %s (a int) CALLED ON NULL INPUT RETURNS text LANGUAGE java AS $$ return a.toString(); $$"); - createFunctionOverload(func1, "int", "CREATE FUNCTION %s (a text) CALLED ON NULL INPUT RETURNS text LANGUAGE java AS $$ return new String(a); $$"); - - // ================ ascii ================ - updateView("INSERT INTO %s (k, asciival) VALUES (?, fromJson(?))", 0, "\"ascii text\""); - assertRows(execute("SELECT k, asciival FROM %s WHERE k = ?", 0), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, asciival) VALUES (?, fromJson(?))", 0, "\"ascii \\\" text\""); - assertRows(execute("SELECT k, asciival FROM %s WHERE k = ?", 0), row(0, "ascii \" text")); - - // test that we can use fromJson() in other valid places in queries - assertRows(execute("SELECT asciival FROM %s WHERE k = fromJson(?)", "0"), row("ascii \" text")); - - //Check the MV - assertRows(execute("SELECT k, udtval from mv_asciival WHERE asciival = ?", "ascii text")); - assertRows(execute("SELECT k, udtval from mv_asciival WHERE asciival = ?", "ascii \" text"), row(0, null)); - - updateView("UPDATE %s SET asciival = fromJson(?) WHERE k = fromJson(?)", "\"ascii \\\" text\"", "0"); - assertRows(execute("SELECT k, udtval from mv_asciival WHERE asciival = ?", "ascii \" text"), row(0, null)); - - updateView("DELETE FROM %s WHERE k = fromJson(?)", "0"); - assertRows(execute("SELECT k, asciival FROM %s WHERE k = ?", 0)); - assertRows(execute("SELECT k, udtval from mv_asciival WHERE asciival = ?", "ascii \" text")); - - updateView("INSERT INTO %s (k, asciival) VALUES (?, fromJson(?))", 0, "\"ascii text\""); - assertRows(execute("SELECT k, udtval from mv_asciival WHERE asciival = ?", "ascii text"), row(0, null)); - - // ================ bigint ================ - updateView("INSERT INTO %s (k, bigintval) VALUES (?, fromJson(?))", 0, "123123123123"); - assertRows(execute("SELECT k, bigintval FROM %s WHERE k = ?", 0), row(0, 123123123123L)); - assertRows(execute("SELECT k, asciival from mv_bigintval WHERE bigintval = ?", 123123123123L), row(0, "ascii text")); - - // ================ blob ================ - updateView("INSERT INTO %s (k, blobval) VALUES (?, fromJson(?))", 0, "\"0x00000001\""); - assertRows(execute("SELECT k, blobval FROM %s WHERE k = ?", 0), row(0, ByteBufferUtil.bytes(1))); - assertRows(execute("SELECT k, asciival from mv_blobval WHERE blobval = ?", ByteBufferUtil.bytes(1)), row(0, "ascii text")); - - // ================ boolean ================ - updateView("INSERT INTO %s (k, booleanval) VALUES (?, fromJson(?))", 0, "true"); - assertRows(execute("SELECT k, booleanval FROM %s WHERE k = ?", 0), row(0, true)); - assertRows(execute("SELECT k, asciival from mv_booleanval WHERE booleanval = ?", true), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, booleanval) VALUES (?, fromJson(?))", 0, "false"); - assertRows(execute("SELECT k, booleanval FROM %s WHERE k = ?", 0), row(0, false)); - assertRows(execute("SELECT k, asciival from mv_booleanval WHERE booleanval = ?", true)); - assertRows(execute("SELECT k, asciival from mv_booleanval WHERE booleanval = ?", false), row(0, "ascii text")); - - // ================ date ================ - updateView("INSERT INTO %s (k, dateval) VALUES (?, fromJson(?))", 0, "\"1987-03-23\""); - assertRows(execute("SELECT k, dateval FROM %s WHERE k = ?", 0), row(0, SimpleDateSerializer.dateStringToDays("1987-03-23"))); - assertRows(execute("SELECT k, asciival from mv_dateval WHERE dateval = fromJson(?)", "\"1987-03-23\""), row(0, "ascii text")); - - // ================ decimal ================ - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "123123.123123"); - assertRows(execute("SELECT k, decimalval FROM %s WHERE k = ?", 0), row(0, new BigDecimal("123123.123123"))); - assertRows(execute("SELECT k, asciival from mv_decimalval WHERE decimalval = fromJson(?)", "123123.123123"), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "123123"); - assertRows(execute("SELECT k, decimalval FROM %s WHERE k = ?", 0), row(0, new BigDecimal("123123"))); - assertRows(execute("SELECT k, asciival from mv_decimalval WHERE decimalval = fromJson(?)", "123123.123123")); - assertRows(execute("SELECT k, asciival from mv_decimalval WHERE decimalval = fromJson(?)", "123123"), row(0, "ascii text")); - - // accept strings for numbers that cannot be represented as doubles - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "\"123123.123123\""); - assertRows(execute("SELECT k, decimalval FROM %s WHERE k = ?", 0), row(0, new BigDecimal("123123.123123"))); - - updateView("INSERT INTO %s (k, decimalval) VALUES (?, fromJson(?))", 0, "\"-1.23E-12\""); - assertRows(execute("SELECT k, decimalval FROM %s WHERE k = ?", 0), row(0, new BigDecimal("-1.23E-12"))); - assertRows(execute("SELECT k, asciival from mv_decimalval WHERE decimalval = fromJson(?)", "\"-1.23E-12\""), row(0, "ascii text")); - - // ================ double ================ - updateView("INSERT INTO %s (k, doubleval) VALUES (?, fromJson(?))", 0, "123123.123123"); - assertRows(execute("SELECT k, doubleval FROM %s WHERE k = ?", 0), row(0, 123123.123123d)); - assertRows(execute("SELECT k, asciival from mv_doubleval WHERE doubleval = fromJson(?)", "123123.123123"), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, doubleval) VALUES (?, fromJson(?))", 0, "123123"); - assertRows(execute("SELECT k, doubleval FROM %s WHERE k = ?", 0), row(0, 123123.0d)); - assertRows(execute("SELECT k, asciival from mv_doubleval WHERE doubleval = fromJson(?)", "123123"), row(0, "ascii text")); - - // ================ float ================ - updateView("INSERT INTO %s (k, floatval) VALUES (?, fromJson(?))", 0, "123123.123123"); - assertRows(execute("SELECT k, floatval FROM %s WHERE k = ?", 0), row(0, 123123.123123f)); - assertRows(execute("SELECT k, asciival from mv_floatval WHERE floatval = fromJson(?)", "123123.123123"), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, floatval) VALUES (?, fromJson(?))", 0, "123123"); - assertRows(execute("SELECT k, floatval FROM %s WHERE k = ?", 0), row(0, 123123.0f)); - assertRows(execute("SELECT k, asciival from mv_floatval WHERE floatval = fromJson(?)", "123123"), row(0, "ascii text")); - - // ================ inet ================ - updateView("INSERT INTO %s (k, inetval) VALUES (?, fromJson(?))", 0, "\"127.0.0.1\""); - assertRows(execute("SELECT k, inetval FROM %s WHERE k = ?", 0), row(0, InetAddress.getByName("127.0.0.1"))); - assertRows(execute("SELECT k, asciival from mv_inetval WHERE inetval = fromJson(?)", "\"127.0.0.1\""), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, inetval) VALUES (?, fromJson(?))", 0, "\"::1\""); - assertRows(execute("SELECT k, inetval FROM %s WHERE k = ?", 0), row(0, InetAddress.getByName("::1"))); - assertRows(execute("SELECT k, asciival from mv_inetval WHERE inetval = fromJson(?)", "\"127.0.0.1\"")); - assertRows(execute("SELECT k, asciival from mv_inetval WHERE inetval = fromJson(?)", "\"::1\""), row(0, "ascii text")); - - // ================ int ================ - updateView("INSERT INTO %s (k, intval) VALUES (?, fromJson(?))", 0, "123123"); - assertRows(execute("SELECT k, intval FROM %s WHERE k = ?", 0), row(0, 123123)); - assertRows(execute("SELECT k, asciival from mv_intval WHERE intval = fromJson(?)", "123123"), row(0, "ascii text")); - - // ================ text (varchar) ================ - updateView("INSERT INTO %s (k, textval) VALUES (?, fromJson(?))", 0, "\"some \\\" text\""); - assertRows(execute("SELECT k, textval FROM %s WHERE k = ?", 0), row(0, "some \" text")); - - updateView("INSERT INTO %s (k, textval) VALUES (?, fromJson(?))", 0, "\"\\u2013\""); - assertRows(execute("SELECT k, textval FROM %s WHERE k = ?", 0), row(0, "\u2013")); - assertRows(execute("SELECT k, asciival from mv_textval WHERE textval = fromJson(?)", "\"\\u2013\""), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, textval) VALUES (?, fromJson(?))", 0, "\"abcd\""); - assertRows(execute("SELECT k, textval FROM %s WHERE k = ?", 0), row(0, "abcd")); - assertRows(execute("SELECT k, asciival from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, "ascii text")); - - // ================ time ================ - updateView("INSERT INTO %s (k, timeval) VALUES (?, fromJson(?))", 0, "\"07:35:07.000111222\""); - assertRows(execute("SELECT k, timeval FROM %s WHERE k = ?", 0), row(0, TimeSerializer.timeStringToLong("07:35:07.000111222"))); - assertRows(execute("SELECT k, asciival from mv_timeval WHERE timeval = fromJson(?)", "\"07:35:07.000111222\""), row(0, "ascii text")); - - // ================ timestamp ================ - updateView("INSERT INTO %s (k, timestampval) VALUES (?, fromJson(?))", 0, "123123123123"); - assertRows(execute("SELECT k, timestampval FROM %s WHERE k = ?", 0), row(0, new Date(123123123123L))); - assertRows(execute("SELECT k, asciival from mv_timestampval WHERE timestampval = fromJson(?)", "123123123123"), row(0, "ascii text")); - - updateView("INSERT INTO %s (k, timestampval) VALUES (?, fromJson(?))", 0, "\"2014-01-01\""); - assertRows(execute("SELECT k, timestampval FROM %s WHERE k = ?", 0), row(0, new SimpleDateFormat("y-M-d").parse("2014-01-01"))); - assertRows(execute("SELECT k, asciival from mv_timestampval WHERE timestampval = fromJson(?)", "\"2014-01-01\""), row(0, "ascii text")); - - // ================ timeuuid ================ - updateView("INSERT INTO %s (k, timeuuidval) VALUES (?, fromJson(?))", 0, "\"6bddc89a-5644-11e4-97fc-56847afe9799\""); - assertRows(execute("SELECT k, timeuuidval FROM %s WHERE k = ?", 0), row(0, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))); - - updateView("INSERT INTO %s (k, timeuuidval) VALUES (?, fromJson(?))", 0, "\"6BDDC89A-5644-11E4-97FC-56847AFE9799\""); - assertRows(execute("SELECT k, timeuuidval FROM %s WHERE k = ?", 0), row(0, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))); - assertRows(execute("SELECT k, asciival from mv_timeuuidval WHERE timeuuidval = fromJson(?)", "\"6BDDC89A-5644-11E4-97FC-56847AFE9799\""), row(0, "ascii text")); - - // ================ uuidval ================ - updateView("INSERT INTO %s (k, uuidval) VALUES (?, fromJson(?))", 0, "\"6bddc89a-5644-11e4-97fc-56847afe9799\""); - assertRows(execute("SELECT k, uuidval FROM %s WHERE k = ?", 0), row(0, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))); - - updateView("INSERT INTO %s (k, uuidval) VALUES (?, fromJson(?))", 0, "\"6BDDC89A-5644-11E4-97FC-56847AFE9799\""); - assertRows(execute("SELECT k, uuidval FROM %s WHERE k = ?", 0), row(0, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))); - assertRows(execute("SELECT k, asciival from mv_uuidval WHERE uuidval = fromJson(?)", "\"6BDDC89A-5644-11E4-97FC-56847AFE9799\""), row(0, "ascii text")); - - // ================ varint ================ - updateView("INSERT INTO %s (k, varintval) VALUES (?, fromJson(?))", 0, "123123123123"); - assertRows(execute("SELECT k, varintval FROM %s WHERE k = ?", 0), row(0, new BigInteger("123123123123"))); - assertRows(execute("SELECT k, asciival from mv_varintval WHERE varintval = fromJson(?)", "123123123123"), row(0, "ascii text")); - - // accept strings for numbers that cannot be represented as longs - updateView("INSERT INTO %s (k, varintval) VALUES (?, fromJson(?))", 0, "\"1234567890123456789012345678901234567890\""); - assertRows(execute("SELECT k, varintval FROM %s WHERE k = ?", 0), row(0, new BigInteger("1234567890123456789012345678901234567890"))); - assertRows(execute("SELECT k, asciival from mv_varintval WHERE varintval = fromJson(?)", "\"1234567890123456789012345678901234567890\""), row(0, "ascii text")); - - // ================ lists ================ - updateView("INSERT INTO %s (k, listval) VALUES (?, fromJson(?))", 0, "[1, 2, 3]"); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(1, 2, 3))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(1, 2, 3))); - - updateView("INSERT INTO %s (k, listval) VALUES (?, fromJson(?))", 0, "[1]"); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(1))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(1))); - - updateView("UPDATE %s SET listval = listval + fromJson(?) WHERE k = ?", "[2]", 0); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(1, 2))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(1, 2))); - - updateView("UPDATE %s SET listval = fromJson(?) + listval WHERE k = ?", "[0]", 0); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(0, 1, 2))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(0, 1, 2))); - - updateView("UPDATE %s SET listval[1] = fromJson(?) WHERE k = ?", "10", 0); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(0, 10, 2))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(0, 10, 2))); - - updateView("DELETE listval[1] FROM %s WHERE k = ?", 0); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, list(0, 2))); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(0, 2))); - - updateView("INSERT INTO %s (k, listval) VALUES (?, fromJson(?))", 0, "[]"); - assertRows(execute("SELECT k, listval FROM %s WHERE k = ?", 0), row(0, null)); - assertRows(execute("SELECT k, listval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, null)); - - // frozen - updateView("INSERT INTO %s (k, frozenlistval) VALUES (?, fromJson(?))", 0, "[1, 2, 3]"); - assertRows(execute("SELECT k, frozenlistval FROM %s WHERE k = ?", 0), row(0, list(1, 2, 3))); - assertRows(execute("SELECT k, frozenlistval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(1, 2, 3))); - assertRows(execute("SELECT k, textval from mv_frozenlistval where frozenlistval = fromJson(?)", "[1, 2, 3]"), row(0, "abcd")); - - updateView("INSERT INTO %s (k, frozenlistval) VALUES (?, fromJson(?))", 0, "[3, 2, 1]"); - assertRows(execute("SELECT k, frozenlistval FROM %s WHERE k = ?", 0), row(0, list(3, 2, 1))); - assertRows(execute("SELECT k, textval from mv_frozenlistval where frozenlistval = fromJson(?)", "[1, 2, 3]")); - assertRows(execute("SELECT k, textval from mv_frozenlistval where frozenlistval = fromJson(?)", "[3, 2, 1]"), row(0, "abcd")); - assertRows(execute("SELECT k, frozenlistval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list(3, 2, 1))); - - updateView("INSERT INTO %s (k, frozenlistval) VALUES (?, fromJson(?))", 0, "[]"); - assertRows(execute("SELECT k, frozenlistval FROM %s WHERE k = ?", 0), row(0, list())); - assertRows(execute("SELECT k, frozenlistval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, list())); - - // ================ sets ================ - updateView("INSERT INTO %s (k, setval) VALUES (?, fromJson(?))", - 0, "[\"6bddc89a-5644-11e4-97fc-56847afe9798\", \"6bddc89a-5644-11e4-97fc-56847afe9799\"]"); - assertRows(execute("SELECT k, setval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))) - ); - assertRows(execute("SELECT k, setval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))))); - - // duplicates are okay, just like in CQL - updateView("INSERT INTO %s (k, setval) VALUES (?, fromJson(?))", - 0, "[\"6bddc89a-5644-11e4-97fc-56847afe9798\", \"6bddc89a-5644-11e4-97fc-56847afe9798\", \"6bddc89a-5644-11e4-97fc-56847afe9799\"]"); - assertRows(execute("SELECT k, setval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))) - ); - assertRows(execute("SELECT k, setval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))))); - - updateView("UPDATE %s SET setval = setval + fromJson(?) WHERE k = ?", "[\"6bddc89a-5644-0000-97fc-56847afe9799\"]", 0); - assertRows(execute("SELECT k, setval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-5644-0000-97fc-56847afe9799"), UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))) - ); - assertRows(execute("SELECT k, setval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-5644-0000-97fc-56847afe9799"), UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))))); - - updateView("UPDATE %s SET setval = setval - fromJson(?) WHERE k = ?", "[\"6bddc89a-5644-0000-97fc-56847afe9799\"]", 0); - assertRows(execute("SELECT k, setval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))) - ); - assertRows(execute("SELECT k, setval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))))); - - updateView("INSERT INTO %s (k, setval) VALUES (?, fromJson(?))", 0, "[]"); - assertRows(execute("SELECT k, setval FROM %s WHERE k = ?", 0), row(0, null)); - assertRows(execute("SELECT k, setval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, null)); - - - // frozen - updateView("INSERT INTO %s (k, frozensetval) VALUES (?, fromJson(?))", - 0, "[\"6bddc89a-5644-11e4-97fc-56847afe9798\", \"6bddc89a-5644-11e4-97fc-56847afe9799\"]"); - assertRows(execute("SELECT k, frozensetval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))) - ); - assertRows(execute("SELECT k, frozensetval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))))); - - updateView("INSERT INTO %s (k, frozensetval) VALUES (?, fromJson(?))", - 0, "[\"6bddc89a-0000-11e4-97fc-56847afe9799\", \"6bddc89a-5644-11e4-97fc-56847afe9798\"]"); - assertRows(execute("SELECT k, frozensetval FROM %s WHERE k = ?", 0), - row(0, set(UUID.fromString("6bddc89a-0000-11e4-97fc-56847afe9799"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798")))) - ); - assertRows(execute("SELECT k, frozensetval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, set(UUID.fromString("6bddc89a-0000-11e4-97fc-56847afe9799"), (UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9798"))))); - - // ================ maps ================ - updateView("INSERT INTO %s (k, mapval) VALUES (?, fromJson(?))", 0, "{\"a\": 1, \"b\": 2}"); - assertRows(execute("SELECT k, mapval FROM %s WHERE k = ?", 0), row(0, map("a", 1, "b", 2))); - assertRows(execute("SELECT k, mapval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), row(0, map("a", 1, "b", 2))); - - updateView("UPDATE %s SET mapval[?] = ? WHERE k = ?", "c", 3, 0); - assertRows(execute("SELECT k, mapval FROM %s WHERE k = ?", 0), - row(0, map("a", 1, "b", 2, "c", 3)) - ); - assertRows(execute("SELECT k, mapval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, map("a", 1, "b", 2, "c", 3))); - - updateView("UPDATE %s SET mapval[?] = ? WHERE k = ?", "b", 10, 0); - assertRows(execute("SELECT k, mapval FROM %s WHERE k = ?", 0), - row(0, map("a", 1, "b", 10, "c", 3)) - ); - assertRows(execute("SELECT k, mapval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, map("a", 1, "b", 10, "c", 3))); - - updateView("DELETE mapval[?] FROM %s WHERE k = ?", "b", 0); - assertRows(execute("SELECT k, mapval FROM %s WHERE k = ?", 0), - row(0, map("a", 1, "c", 3)) - ); - assertRows(execute("SELECT k, mapval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, map("a", 1, "c", 3))); - - updateView("INSERT INTO %s (k, mapval) VALUES (?, fromJson(?))", 0, "{}"); - assertRows(execute("SELECT k, mapval FROM %s WHERE k = ?", 0), row(0, null)); - assertRows(execute("SELECT k, mapval from mv_textval WHERE textval = fromJson(?)", "\"abcd\""), - row(0, null)); - - // frozen - updateView("INSERT INTO %s (k, frozenmapval) VALUES (?, fromJson(?))", 0, "{\"a\": 1, \"b\": 2}"); - assertRows(execute("SELECT k, frozenmapval FROM %s WHERE k = ?", 0), row(0, map("a", 1, "b", 2))); - assertRows(execute("SELECT k, textval FROM mv_frozenmapval WHERE frozenmapval = fromJson(?)", "{\"a\": 1, \"b\": 2}"), row(0, "abcd")); - - updateView("INSERT INTO %s (k, frozenmapval) VALUES (?, fromJson(?))", 0, "{\"b\": 2, \"a\": 3}"); - assertRows(execute("SELECT k, frozenmapval FROM %s WHERE k = ?", 0), row(0, map("a", 3, "b", 2))); - assertRows(execute("SELECT k, frozenmapval FROM %s WHERE k = ?", 0), row(0, map("a", 3, "b", 2))); - - // ================ tuples ================ - updateView("INSERT INTO %s (k, tupleval) VALUES (?, fromJson(?))", 0, "[1, \"foobar\", \"6bddc89a-5644-11e4-97fc-56847afe9799\"]"); - assertRows(execute("SELECT k, tupleval FROM %s WHERE k = ?", 0), - row(0, tuple(1, "foobar", UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))) - ); - assertRows(execute("SELECT k, textval FROM mv_tupleval WHERE tupleval = ?", tuple(1, "foobar", UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))), - row(0, "abcd")); - - updateView("INSERT INTO %s (k, tupleval) VALUES (?, fromJson(?))", 0, "[1, null, \"6bddc89a-5644-11e4-97fc-56847afe9799\"]"); - assertRows(execute("SELECT k, tupleval FROM %s WHERE k = ?", 0), - row(0, tuple(1, null, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))) - ); - assertRows(execute("SELECT k, textval FROM mv_tupleval WHERE tupleval = ?", tuple(1, "foobar", UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799")))); - assertRows(execute("SELECT k, textval FROM mv_tupleval WHERE tupleval = ?", tuple(1, null, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"))), - row(0, "abcd")); - - // ================ UDTs ================ - updateView("INSERT INTO %s (k, udtval) VALUES (?, fromJson(?))", 0, "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}"); - assertRows(execute("SELECT k, udtval.a, udtval.b, udtval.c FROM %s WHERE k = ?", 0), - row(0, 1, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"), set("bar", "foo")) - ); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}"), - row(0, "abcd")); - - // order of fields shouldn't matter - updateView("INSERT INTO %s (k, udtval) VALUES (?, fromJson(?))", 0, "{\"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"a\": 1, \"c\": [\"foo\", \"bar\"]}"); - assertRows(execute("SELECT k, udtval.a, udtval.b, udtval.c FROM %s WHERE k = ?", 0), - row(0, 1, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"), set("bar", "foo")) - ); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}"), - row(0, "abcd")); - - // test nulls - updateView("INSERT INTO %s (k, udtval) VALUES (?, fromJson(?))", 0, "{\"a\": null, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}"); - assertRows(execute("SELECT k, udtval.a, udtval.b, udtval.c FROM %s WHERE k = ?", 0), - row(0, null, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"), set("bar", "foo")) - ); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}")); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": null, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}"), - row(0, "abcd")); - - // test missing fields - updateView("INSERT INTO %s (k, udtval) VALUES (?, fromJson(?))", 0, "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\"}"); - assertRows(execute("SELECT k, udtval.a, udtval.b, udtval.c FROM %s WHERE k = ?", 0), - row(0, 1, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"), null) - ); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": null, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\", \"c\": [\"foo\", \"bar\"]}")); - assertRows(execute("SELECT k, textval FROM mv_udtval WHERE udtval = fromJson(?)", "{\"a\": 1, \"b\": \"6bddc89a-5644-11e4-97fc-56847afe9799\"}"), - row(0, "abcd")); - } - - - @Test public void ttlTest() throws Throwable { createTable("CREATE TABLE %s (" + @@ -1450,32 +853,6 @@ public class ViewTest extends CQLTester } @Test - public void testDropTableWithMV() throws Throwable - { - createTable("CREATE TABLE %s (" + - "a int," + - "b int," + - "c int," + - "d int," + - "PRIMARY KEY (a, b, c))"); - - executeNet(protocolVersion, "USE " + keyspace()); - - createView(keyspace() + ".mv1", - "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE b IS NOT NULL AND c IS NOT NULL PRIMARY KEY (a, b, c)"); - - try - { - executeNet(protocolVersion, "DROP TABLE " + keyspace() + ".mv1"); - Assert.fail(); - } - catch (InvalidQueryException e) - { - Assert.assertEquals("Cannot use DROP TABLE on Materialized View", e.getMessage()); - } - } - - @Test public void testMultipleDeletes() throws Throwable { createTable("CREATE TABLE %s (" + @@ -1545,78 +922,54 @@ public class ViewTest extends CQLTester } @Test - public void testAlterTable() throws Throwable + public void testDeleteSingleColumnInViewClustering() throws Throwable { createTable("CREATE TABLE %s (" + "a int," + - "b text," + + "b int," + + "c int," + + "d int," + "PRIMARY KEY (a, b))"); executeNet(protocolVersion, "USE " + keyspace()); + createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL AND d IS NOT NULL PRIMARY KEY (a, d, b)"); - createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (b, a)"); - - alterTable("ALTER TABLE %s ALTER b TYPE blob"); - } - - @Test - public void testAlterReversedTypeBaseTable() throws Throwable - { - createTable("CREATE TABLE %s (" + - "a int," + - "b text," + - "PRIMARY KEY (a, b))" + - "WITH CLUSTERING ORDER BY (b DESC)"); - - executeNet(protocolVersion, "USE " + keyspace()); + updateView("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0); + ResultSet mvRows = executeNet(protocolVersion, "SELECT a, d, b, cFROM mv1"); + assertRowsNet(protocolVersion, mvRows, row(0, 0, 0, 0)); - createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (a, b) WITH CLUSTERING ORDER BY (b ASC)"); + updateView("DELETE c FROM %s WHERE a = ? AND b = ?", 0, 0); + mvRows = executeNet(protocolVersion, "SELECT a, d, b, c FROM mv1"); + assertRowsNet(protocolVersion, mvRows, row(0, 0, 0, null)); - alterTable("ALTER TABLE %s ALTER b TYPE blob"); + updateView("DELETE d FROM %s WHERE a = ? AND b = ?", 0, 0); + mvRows = executeNet(protocolVersion, "SELECT a, d, b FROM mv1"); + assertTrue(mvRows.isExhausted()); } @Test - public void testAlterReversedTypeViewTable() throws Throwable + public void testDeleteSingleColumnInViewPartitionKey() throws Throwable { createTable("CREATE TABLE %s (" + "a int," + - "b text," + + "b int," + + "c int," + + "d int," + "PRIMARY KEY (a, b))"); executeNet(protocolVersion, "USE " + keyspace()); + createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL AND d IS NOT NULL PRIMARY KEY (d, a, b)"); - createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (a, b) WITH CLUSTERING ORDER BY (b DESC)"); - - alterTable("ALTER TABLE %s ALTER b TYPE blob"); - } - - @Test - public void testAlterClusteringViewTable() throws Throwable - { - createTable("CREATE TABLE %s (" + - "a int," + - "b text," + - "PRIMARY KEY (a))"); - - executeNet(protocolVersion, "USE " + keyspace()); - - createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (a, b) WITH CLUSTERING ORDER BY (b DESC)"); - - alterTable("ALTER TABLE %s ALTER b TYPE blob"); - } - - @Test - public void testAlterViewTableValue() throws Throwable - { - createTable("CREATE TABLE %s (" + - "a int," + - "b int," + - "PRIMARY KEY (a))"); - - executeNet(protocolVersion, "USE " + keyspace()); + updateView("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 0); + ResultSet mvRows = executeNet(protocolVersion, "SELECT a, d, b, c FROM mv1"); + assertRowsNet(protocolVersion, mvRows, row(0, 0, 0, 0)); - createView("mv1", "CREATE MATERIALIZED VIEW %s AS SELECT * FROM %%s WHERE a IS NOT NULL AND b IS NOT NULL PRIMARY KEY (a, b) WITH CLUSTERING ORDER BY (b DESC)"); + updateView("DELETE c FROM %s WHERE a = ? AND b = ?", 0, 0); + mvRows = executeNet(protocolVersion, "SELECT a, d, b, c FROM mv1"); + assertRowsNet(protocolVersion, mvRows, row(0, 0, 0, null)); - assertInvalid("ALTER TABLE %s ALTER b TYPE blob"); + updateView("DELETE d FROM %s WHERE a = ? AND b = ?", 0, 0); + mvRows = executeNet(protocolVersion, "SELECT a, d, b FROM mv1"); + assertTrue(mvRows.isExhausted()); } }