http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CQLTester.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CQLTester.java b/test/unit/org/apache/cassandra/cql3/CQLTester.java index d47b9d2..4b4631e 100644 --- a/test/unit/org/apache/cassandra/cql3/CQLTester.java +++ b/test/unit/org/apache/cassandra/cql3/CQLTester.java @@ -35,11 +35,18 @@ import org.junit.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.datastax.driver.core.*; +import static junit.framework.Assert.assertNotNull; +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.ColumnDefinitions; +import com.datastax.driver.core.DataType; +import com.datastax.driver.core.ProtocolVersion; import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.Session; import org.apache.cassandra.SchemaLoader; import org.apache.cassandra.concurrent.ScheduledExecutors; import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.Schema; import org.apache.cassandra.cql3.functions.FunctionName; import org.apache.cassandra.cql3.statements.ParsedStatement; @@ -51,6 +58,7 @@ import org.apache.cassandra.db.marshal.TupleType; import org.apache.cassandra.exceptions.CassandraException; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.SyntaxException; +import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.serializers.TypeSerializer; import org.apache.cassandra.service.ClientState; @@ -71,6 +79,7 @@ public abstract class CQLTester public static final String KEYSPACE = "cql_test_keyspace"; public static final String KEYSPACE_PER_TEST = "cql_test_keyspace_alt"; protected static final boolean USE_PREPARED_VALUES = Boolean.valueOf(System.getProperty("cassandra.test.use_prepared", "true")); + protected static final long ROW_CACHE_SIZE_IN_MB = Integer.valueOf(System.getProperty("cassandra.test.row_cache_size_in_mb", "0")); private static final AtomicInteger seqNumber = new AtomicInteger(); private static org.apache.cassandra.transport.Server server; @@ -79,7 +88,7 @@ public abstract class CQLTester private static final Cluster[] cluster; private static final Session[] session; - static int maxProtocolVersion; + public static int maxProtocolVersion; static { int version; for (version = 1; version <= Server.CURRENT_VERSION; ) @@ -129,9 +138,12 @@ public abstract class CQLTester private boolean usePrepared = USE_PREPARED_VALUES; @BeforeClass - public static void setUpClass() throws Throwable + public static void setUpClass() { - schemaChange(String.format("CREATE KEYSPACE IF NOT EXISTS %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}", KEYSPACE)); + if (ROW_CACHE_SIZE_IN_MB > 0) + DatabaseDescriptor.setRowCacheSizeInMB(ROW_CACHE_SIZE_IN_MB); + + DatabaseDescriptor.setPartitioner(Murmur3Partitioner.instance); } @AfterClass @@ -151,6 +163,7 @@ public abstract class CQLTester @Before public void beforeTest() throws Throwable { + schemaChange(String.format("CREATE KEYSPACE IF NOT EXISTS %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}", KEYSPACE)); schemaChange(String.format("CREATE KEYSPACE IF NOT EXISTS %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}", KEYSPACE_PER_TEST)); } @@ -178,16 +191,16 @@ public abstract class CQLTester { try { - for (int i = tablesToDrop.size() - 1; i >=0; i--) + for (int i = tablesToDrop.size() - 1; i >= 0; i--) schemaChange(String.format("DROP TABLE IF EXISTS %s.%s", KEYSPACE, tablesToDrop.get(i))); - for (int i = aggregatesToDrop.size() - 1; i >=0; i--) + for (int i = aggregatesToDrop.size() - 1; i >= 0; i--) schemaChange(String.format("DROP AGGREGATE IF EXISTS %s", aggregatesToDrop.get(i))); - for (int i = functionsToDrop.size() - 1; i >=0; i--) + for (int i = functionsToDrop.size() - 1; i >= 0; i--) schemaChange(String.format("DROP FUNCTION IF EXISTS %s", functionsToDrop.get(i))); - for (int i = typesToDrop.size() - 1; i >=0; i--) + for (int i = typesToDrop.size() - 1; i >= 0; i--) schemaChange(String.format("DROP TYPE IF EXISTS %s.%s", KEYSPACE, typesToDrop.get(i))); // Dropping doesn't delete the sstables. It's not a huge deal but it's cleaner to cleanup after us @@ -198,10 +211,10 @@ public abstract class CQLTester final CountDownLatch latch = new CountDownLatch(1); ScheduledExecutors.nonPeriodicTasks.execute(new Runnable() { - public void run() - { - latch.countDown(); - } + public void run() + { + latch.countDown(); + } }); latch.await(2, TimeUnit.SECONDS); @@ -272,9 +285,25 @@ public abstract class CQLTester } } - public boolean usePrepared() + public void compact() { - return USE_PREPARED_VALUES; + try + { + String currentTable = currentTable(); + if (currentTable != null) + Keyspace.open(KEYSPACE).getColumnFamilyStore(currentTable).forceMajorCompaction(); + } + catch (InterruptedException | ExecutionException e) + { + throw new RuntimeException(e); + } + } + + public void cleanupCache() + { + String currentTable = currentTable(); + if (currentTable != null) + Keyspace.open(KEYSPACE).getColumnFamilyStore(currentTable).cleanupCache(); } public static FunctionName parseFunctionName(String qualifiedName) @@ -379,14 +408,20 @@ public abstract class CQLTester protected String createTable(String query) { - String currentTable = "table_" + seqNumber.getAndIncrement(); - tables.add(currentTable); + String currentTable = createTableName(); String fullQuery = formatQuery(query); logger.info(fullQuery); schemaChange(fullQuery); return currentTable; } + protected String createTableName() + { + String currentTable = "table_" + seqNumber.getAndIncrement(); + tables.add(currentTable); + return currentTable; + } + protected void createTableMayThrow(String query) throws Throwable { String currentTable = "table_" + seqNumber.getAndIncrement(); @@ -424,6 +459,37 @@ public abstract class CQLTester schemaChange(fullQuery); } + /** + * Index creation is asynchronous, this method searches in the system table IndexInfo + * for the specified index and returns true if it finds it, which indicates the + * index was built. If we haven't found it after 5 seconds we give-up. + */ + protected boolean waitForIndex(String keyspace, String table, String index) throws Throwable + { + long start = System.currentTimeMillis(); + boolean indexCreated = false; + String indedName = String.format("%s.%s", table, index); + while (!indexCreated) + { + Object[][] results = getRows(execute("select index_name from system.\"IndexInfo\" where table_name = ?", keyspace)); + for(int i = 0; i < results.length; i++) + { + if (indedName.equals(results[i][0])) + { + indexCreated = true; + break; + } + } + + if (System.currentTimeMillis() - start > 5000) + break; + + Thread.sleep(10); + } + + return indexCreated; + } + protected void createIndexMayThrow(String query) throws Throwable { String fullQuery = formatQuery(query); @@ -593,7 +659,7 @@ public abstract class CQLTester Object[] expected = rows[i]; UntypedResultSet.Row actual = iter.next(); - Assert.assertEquals(String.format("Invalid number of (expected) values provided for row %d", i), meta.size(), expected.length); + Assert.assertEquals(String.format("Invalid number of (expected) values provided for row %d", i), expected.length, meta.size()); for (int j = 0; j < meta.size(); j++) { @@ -602,8 +668,17 @@ public abstract class CQLTester ByteBuffer actualValue = actual.getBytes(column.name.toString()); if (!Objects.equal(expectedByteValue, actualValue)) - Assert.fail(String.format("Invalid value for row %d column %d (%s of type %s), expected <%s> but got <%s>", - i, j, column.name, column.type.asCQL3Type(), formatValue(expectedByteValue, column.type), formatValue(actualValue, column.type))); + { + Object actualValueDecoded = column.type.getSerializer().deserialize(actualValue); + if (!actualValueDecoded.equals(expected[j])) + Assert.fail(String.format("Invalid value for row %d column %d (%s of type %s), expected <%s> but got <%s>", + i, + j, + column.name, + column.type.asCQL3Type(), + formatValue(expectedByteValue, column.type), + formatValue(actualValue, column.type))); + } } i++; } @@ -621,6 +696,65 @@ public abstract class CQLTester Assert.assertTrue(String.format("Got %s rows than expected. Expected %d but got %d", rows.length>i ? "less" : "more", rows.length, i), i == rows.length); } + protected void assertRowCount(UntypedResultSet result, int numExpectedRows) + { + if (result == null) + { + if (numExpectedRows > 0) + Assert.fail(String.format("No rows returned by query but %d expected", numExpectedRows)); + return; + } + + List<ColumnSpecification> meta = result.metadata(); + Iterator<UntypedResultSet.Row> iter = result.iterator(); + int i = 0; + while (iter.hasNext() && i < numExpectedRows) + { + UntypedResultSet.Row actual = iter.next(); + assertNotNull(actual); + i++; + } + + if (iter.hasNext()) + { + while (iter.hasNext()) + { + iter.next(); + i++; + } + Assert.fail(String.format("Got less rows than expected. Expected %d but got %d.", numExpectedRows, i)); + } + + Assert.assertTrue(String.format("Got %s rows than expected. Expected %d but got %d", numExpectedRows>i ? "less" : "more", numExpectedRows, i), i == numExpectedRows); + } + + protected Object[][] getRows(UntypedResultSet result) + { + if (result == null) + return new Object[0][]; + + List<Object[]> ret = new ArrayList<>(); + List<ColumnSpecification> meta = result.metadata(); + + Iterator<UntypedResultSet.Row> iter = result.iterator(); + while (iter.hasNext()) + { + UntypedResultSet.Row rowVal = iter.next(); + Object[] row = new Object[meta.size()]; + for (int j = 0; j < meta.size(); j++) + { + ColumnSpecification column = meta.get(j); + ByteBuffer val = rowVal.getBytes(column.name.toString()); + row[j] = val == null ? null : column.type.getSerializer().deserialize(val); + } + + ret.add(row); + } + + Object[][] a = new Object[ret.size()][]; + return ret.toArray(a); + } + protected void assertColumnNames(UntypedResultSet result, String... expectedColumnNames) { if (result == null)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CollectionsTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CollectionsTest.java b/test/unit/org/apache/cassandra/cql3/CollectionsTest.java deleted file mode 100644 index c9c6d31..0000000 --- a/test/unit/org/apache/cassandra/cql3/CollectionsTest.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import org.junit.Test; - -public class CollectionsTest extends CQLTester -{ - @Test - public void testMapBulkRemoval() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, m map<text, text>)"); - - execute("INSERT INTO %s(k, m) VALUES (?, ?)", 0, map("k1", "v1", "k2", "v2", "k3", "v3")); - - assertRows(execute("SELECT * FROM %s"), - row(0, map("k1", "v1", "k2", "v2", "k3", "v3")) - ); - - execute("UPDATE %s SET m = m - ? WHERE k = ?", set("k2"), 0); - - assertRows(execute("SELECT * FROM %s"), - row(0, map("k1", "v1", "k3", "v3")) - ); - - execute("UPDATE %s SET m = m + ?, m = m - ? WHERE k = ?", map("k4", "v4"), set("k3"), 0); - - assertRows(execute("SELECT * FROM %s"), - row(0, map("k1", "v1", "k4", "v4")) - ); - } - - @Test - public void testInvalidCollectionsMix() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, l list<text>, s set<text>, m map<text, text>)"); - - // Note: we force the non-prepared form for some of those tests because a list and a set - // have the same serialized format in practice and CQLTester don't validate that the type - // of what's passed as a value in the prepared case, so the queries would work (which is ok, - // CQLTester is just a "dumb" client). - - assertInvalid("UPDATE %s SET l = l + { 'a', 'b' } WHERE k = 0"); - assertInvalid("UPDATE %s SET l = l - { 'a', 'b' } WHERE k = 0"); - assertInvalid("UPDATE %s SET l = l + ? WHERE k = 0", map("a", "b", "c", "d")); - assertInvalid("UPDATE %s SET l = l - ? WHERE k = 0", map("a", "b", "c", "d")); - - assertInvalid("UPDATE %s SET s = s + [ 'a', 'b' ] WHERE k = 0"); - assertInvalid("UPDATE %s SET s = s - [ 'a', 'b' ] WHERE k = 0"); - assertInvalid("UPDATE %s SET s = s + ? WHERE k = 0", map("a", "b", "c", "d")); - assertInvalid("UPDATE %s SET s = s - ? WHERE k = 0", map("a", "b", "c", "d")); - - assertInvalid("UPDATE %s SET m = m + ? WHERE k = 0", list("a", "b")); - assertInvalid("UPDATE %s SET m = m - [ 'a', 'b' ] WHERE k = 0"); - assertInvalid("UPDATE %s SET m = m + ? WHERE k = 0", set("a", "b")); - assertInvalid("UPDATE %s SET m = m - ? WHERE k = 0", map("a", "b", "c", "d")); - } - - @Test - public void testSets() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, s set<text>)"); - - execute("INSERT INTO %s(k, s) VALUES (0, ?)", set("v1", "v2", "v3", "v4")); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row(set("v1", "v2", "v3", "v4")) - ); - - execute("DELETE s[?] FROM %s WHERE k = 0", "v1"); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row(set("v2", "v3", "v4")) - ); - - // Full overwrite - execute("UPDATE %s SET s = ? WHERE k = 0", set("v6", "v5")); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row(set("v5", "v6")) - ); - - execute("UPDATE %s SET s = s + ? WHERE k = 0", set("v7")); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row(set("v5", "v6", "v7")) - ); - - execute("UPDATE %s SET s = s - ? WHERE k = 0", set("v6", "v5")); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row(set("v7")) - ); - - execute("DELETE s[?] FROM %s WHERE k = 0", set("v7")); - - // Deleting an element that does not exist will succeed - execute("DELETE s[?] FROM %s WHERE k = 0", set("v7")); - - execute("DELETE s FROM %s WHERE k = 0"); - - assertRows(execute("SELECT s FROM %s WHERE k = 0"), - row((Object)null) - ); - } - - @Test - public void testMaps() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, m map<text, int>)"); - - execute("INSERT INTO %s(k, m) VALUES (0, ?)", map("v1", 1, "v2", 2)); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v1", 1, "v2", 2)) - ); - - execute("UPDATE %s SET m[?] = ?, m[?] = ? WHERE k = 0", "v3", 3, "v4", 4); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v1", 1, "v2", 2, "v3", 3, "v4", 4)) - ); - - execute("DELETE m[?] FROM %s WHERE k = 0", "v1"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v2", 2, "v3", 3, "v4", 4)) - ); - - // Full overwrite - execute("UPDATE %s SET m = ? WHERE k = 0", map("v6", 6, "v5", 5)); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v5", 5, "v6", 6)) - ); - - execute("UPDATE %s SET m = m + ? WHERE k = 0", map("v7", 7)); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v5", 5, "v6", 6, "v7", 7)) - ); - - execute("DELETE m[?] FROM %s WHERE k = 0", "v7"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v5", 5, "v6", 6)) - ); - - execute("DELETE m[?] FROM %s WHERE k = 0", "v6"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row(map("v5", 5)) - ); - - execute("DELETE m[?] FROM %s WHERE k = 0", "v5"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row((Object)null) - ); - - // Deleting a non-existing key should succeed - execute("DELETE m[?] FROM %s WHERE k = 0", "v5"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row((Object) null) - ); - - // The empty map is parsed as an empty set (because we don't have enough info at parsing - // time when we see a {}) and special cased later. This test checks this work properly - execute("UPDATE %s SET m = {} WHERE k = 0"); - - assertRows(execute("SELECT m FROM %s WHERE k = 0"), - row((Object)null) - ); - } - - @Test - public void testLists() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, l list<text>)"); - - execute("INSERT INTO %s(k, l) VALUES (0, ?)", list("v1", "v2", "v3")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v1", "v2", "v3"))); - - execute("DELETE l[?] FROM %s WHERE k = 0", 1); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v1", "v3"))); - - execute("UPDATE %s SET l[?] = ? WHERE k = 0", 1, "v4"); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v1", "v4"))); - - // Full overwrite - execute("UPDATE %s SET l = ? WHERE k = 0", list("v6", "v5")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v6", "v5"))); - - execute("UPDATE %s SET l = l + ? WHERE k = 0", list("v7", "v8")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v6", "v5", "v7", "v8"))); - - execute("UPDATE %s SET l = ? + l WHERE k = 0", list("v9")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v9", "v6", "v5", "v7", "v8"))); - - execute("UPDATE %s SET l = l - ? WHERE k = 0", list("v5", "v8")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row(list("v9", "v6", "v7"))); - - execute("DELETE l FROM %s WHERE k = 0"); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row((Object) null)); - - assertInvalidMessage("Attempted to delete an element from a list which is null", - "DELETE l[0] FROM %s WHERE k=0 "); - - assertInvalidMessage("Attempted to set an element on a list which is null", - "UPDATE %s SET l[0] = ? WHERE k=0", list("v10")); - - execute("UPDATE %s SET l = l - ? WHERE k=0 ", list("v11")); - - assertRows(execute("SELECT l FROM %s WHERE k = 0"), row((Object) null)); - } - - @Test - public void testMapWithUnsetValues() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, m map<text,text>)"); - // set up - Object m = map("k", "v"); - execute("INSERT INTO %s (k, m) VALUES (10, ?)", m); - assertRows(execute("SELECT m FROM %s WHERE k = 10"), - row(m) - ); - - // test putting an unset map, should not delete the contents - execute("INSERT INTO %s (k, m) VALUES (10, ?)", unset()); - assertRows(execute("SELECT m FROM %s WHERE k = 10"), - row(m) - ); - // test unset variables in a map update operaiotn, should not delete the contents - execute("UPDATE %s SET m['k'] = ? WHERE k = 10", unset()); - assertRows(execute("SELECT m FROM %s WHERE k = 10"), - row(m) - ); - assertInvalidMessage("Invalid unset map key", "UPDATE %s SET m[?] = 'foo' WHERE k = 10", unset()); - - // test unset value for map key - assertInvalidMessage("Invalid unset map key", "DELETE m[?] FROM %s WHERE k = 10", unset()); - } - - @Test - public void testListWithUnsetValues() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, l list<text>)"); - // set up - Object l = list("foo", "foo"); - execute("INSERT INTO %s (k, l) VALUES (10, ?)", l); - assertRows(execute("SELECT l FROM %s WHERE k = 10"), - row(l) - ); - - // replace list with unset value - execute("INSERT INTO %s (k, l) VALUES (10, ?)", unset()); - assertRows(execute("SELECT l FROM %s WHERE k = 10"), - row(l) - ); - - // add to position - execute("UPDATE %s SET l[1] = ? WHERE k = 10", unset()); - assertRows(execute("SELECT l FROM %s WHERE k = 10"), - row(l) - ); - - // set in index - assertInvalidMessage("Invalid unset value for list index", "UPDATE %s SET l[?] = 'foo' WHERE k = 10", unset()); - - // remove element by index - execute("DELETE l[?] FROM %s WHERE k = 10", unset()); - assertRows(execute("SELECT l FROM %s WHERE k = 10"), - row(l) - ); - - // remove all occurrences of element - execute("UPDATE %s SET l = l - ? WHERE k = 10", unset()); - assertRows(execute("SELECT l FROM %s WHERE k = 10"), - row(l) - ); - - // select with in clause - assertInvalidMessage("Invalid unset value for column k", "SELECT * FROM %s WHERE k IN ?", unset()); - assertInvalidMessage("Invalid unset value for column k", "SELECT * FROM %s WHERE k IN (?)", unset()); - } - - @Test - public void testSetWithUnsetValues() throws Throwable - { - createTable("CREATE TABLE %s (k int PRIMARY KEY, s set<text>)"); - - Object s = set("bar", "baz", "foo"); - execute("INSERT INTO %s (k, s) VALUES (10, ?)", s); - assertRows(execute("SELECT s FROM %s WHERE k = 10"), - row(s) - ); - - // replace set with unset value - execute("INSERT INTO %s (k, s) VALUES (10, ?)", unset()); - assertRows(execute("SELECT s FROM %s WHERE k = 10"), - row(s) - ); - - // add to set - execute("UPDATE %s SET s = s + ? WHERE k = 10", unset()); - assertRows(execute("SELECT s FROM %s WHERE k = 10"), - row(s) - ); - - // remove all occurrences of element - execute("UPDATE %s SET s = s - ? WHERE k = 10", unset()); - assertRows(execute("SELECT s FROM %s WHERE k = 10"), - row(s) - ); - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java b/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java deleted file mode 100644 index a987bb2..0000000 --- a/test/unit/org/apache/cassandra/cql3/ContainsRelationTest.java +++ /dev/null @@ -1,283 +0,0 @@ -package org.apache.cassandra.cql3; - -import org.junit.Test; - -public class ContainsRelationTest extends CQLTester -{ - @Test - public void testSetContains() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories set<text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(categories)"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, set("lmn")); - - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "xyz", "lmn")); - - assertRows(execute("SELECT * FROM %s WHERE categories CONTAINS ?", "lmn"), - row("test", 5, set("lmn")) - ); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "test", "lmn"), - row("test", 5, set("lmn")) - ); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, "lmn"), - row("test", 5, set("lmn")) - ); - - assertInvalidMessage("Unsupported null value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, null); - - assertInvalidMessage("Unsupported unset value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, unset()); - - assertInvalidMessage("Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING", - "SELECT * FROM %s WHERE account = ? AND categories CONTAINS ? AND categories CONTAINS ?", "xyz", "lmn", "notPresent"); - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ? AND categories CONTAINS ? ALLOW FILTERING", "xyz", "lmn", "notPresent")); - } - - @Test - public void testListContains() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories list<text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(categories)"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, list("lmn")); - - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "xyz", "lmn")); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?;", "test", "lmn"), - row("test", 5, list("lmn")) - ); - - assertRows(execute("SELECT * FROM %s WHERE categories CONTAINS ?", "lmn"), - row("test", 5, list("lmn")) - ); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?;", "test", 5, "lmn"), - row("test", 5, list("lmn")) - ); - - assertInvalidMessage("Unsupported null value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, null); - - assertInvalidMessage("Unsupported unset value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, unset()); - - assertInvalidMessage("Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ? AND categories CONTAINS ?", - "test", 5, "lmn", "notPresent"); - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ? AND categories CONTAINS ? ALLOW FILTERING", - "test", 5, "lmn", "notPresent")); - } - - @Test - public void testListContainsWithFiltering() throws Throwable - { - createTable("CREATE TABLE %s (e int PRIMARY KEY, f list<text>, s int)"); - createIndex("CREATE INDEX ON %s(f)"); - for(int i = 0; i < 3; i++) - { - execute("INSERT INTO %s (e, f, s) VALUES (?, ?, ?)", i, list("Dubai"), 4); - } - for(int i = 3; i < 5; i++) - { - execute("INSERT INTO %s (e, f, s) VALUES (?, ?, ?)", i, list("Dubai"), 3); - } - assertRows(execute("SELECT * FROM %s WHERE f CONTAINS ? AND s=? allow filtering", "Dubai", 3), - row(3, list("Dubai"), 3), - row(4, list("Dubai"), 3)); - } - - @Test - public void testMapKeyContains() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories map<text,text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(keys(categories))"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, map("lmn", "foo")); - - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ?", "xyz", "lmn")); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ?", "test", "lmn"), - row("test", 5, map("lmn", "foo")) - ); - assertRows(execute("SELECT * FROM %s WHERE categories CONTAINS KEY ?", "lmn"), - row("test", 5, map("lmn", "foo")) - ); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ?", "test", 5, "lmn"), - row("test", 5, map("lmn", "foo")) - ); - - assertInvalidMessage("Unsupported null value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ?", "test", 5, null); - - assertInvalidMessage("Unsupported unset value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ?", "test", 5, unset()); - - assertInvalidMessage("Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ? AND categories CONTAINS KEY ?", - "test", 5, "lmn", "notPresent"); - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ? AND categories CONTAINS KEY ? ALLOW FILTERING", - "test", 5, "lmn", "notPresent")); - - assertInvalidMessage("Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS KEY ? AND categories CONTAINS ?", - "test", 5, "lmn", "foo"); - } - - @Test - public void testMapValueContains() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories map<text,text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(categories)"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, map("lmn", "foo")); - - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "xyz", "foo")); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "test", "foo"), - row("test", 5, map("lmn", "foo")) - ); - - assertRows(execute("SELECT * FROM %s WHERE categories CONTAINS ?", "foo"), - row("test", 5, map("lmn", "foo")) - ); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, "foo"), - row("test", 5, map("lmn", "foo")) - ); - - assertInvalidMessage("Unsupported null value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, null); - - assertInvalidMessage("Unsupported unset value for indexed column categories", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ?", "test", 5, unset()); - - assertInvalidMessage("Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING", - "SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ? AND categories CONTAINS ?" - , "test", 5, "foo", "notPresent"); - - assertEmpty(execute("SELECT * FROM %s WHERE account = ? AND id = ? AND categories CONTAINS ? AND categories CONTAINS ? ALLOW FILTERING" - , "test", 5, "foo", "notPresent")); - } - - // See CASSANDRA-7525 - @Test - public void testQueryMultipleIndexTypes() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories map<text,text>, PRIMARY KEY (account, id))"); - - // create an index on - createIndex("CREATE INDEX id_index ON %s(id)"); - createIndex("CREATE INDEX categories_values_index ON %s(categories)"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, map("lmn", "foo")); - - assertRows(execute("SELECT * FROM %s WHERE categories CONTAINS ? AND id = ? ALLOW FILTERING", "foo", 5), - row("test", 5, map("lmn", "foo")) - ); - - assertRows( - execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ? AND id = ? ALLOW FILTERING", "test", "foo", 5), - row("test", 5, map("lmn", "foo")) - ); - } - - // See CASSANDRA-8033 - @Test - public void testFilterForContains() throws Throwable - { - createTable("CREATE TABLE %s (k1 int, k2 int, v set<int>, PRIMARY KEY ((k1, k2)))"); - createIndex("CREATE INDEX ON %s(k2)"); - - execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 0, 0, set(1, 2, 3)); - execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 0, 1, set(2, 3, 4)); - execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 1, 0, set(3, 4, 5)); - execute("INSERT INTO %s (k1, k2, v) VALUES (?, ?, ?)", 1, 1, set(4, 5, 6)); - - assertRows(execute("SELECT * FROM %s WHERE k2 = ?", 1), - row(0, 1, set(2, 3, 4)), - row(1, 1, set(4, 5, 6)) - ); - - assertRows(execute("SELECT * FROM %s WHERE k2 = ? AND v CONTAINS ? ALLOW FILTERING", 1, 6), - row(1, 1, set(4, 5, 6)) - ); - - assertEmpty(execute("SELECT * FROM %s WHERE k2 = ? AND v CONTAINS ? ALLOW FILTERING", 1, 7)); - } - - // See CASSANDRA-8073 - @Test - public void testIndexLookupWithClusteringPrefix() throws Throwable - { - createTable("CREATE TABLE %s (a int, b int, c int, d set<int>, PRIMARY KEY (a, b, c))"); - createIndex("CREATE INDEX ON %s(d)"); - execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, set(1, 2, 3)); - execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 1, set(3, 4, 5)); - execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 1, 0, set(1, 2, 3)); - execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 1, 1, set(3, 4, 5)); - - assertRows(execute("SELECT * FROM %s WHERE a=? AND b=? AND d CONTAINS ?", 0, 1, 3), - row(0, 1, 0, set(1, 2, 3)), - row(0, 1, 1, set(3, 4, 5)) - ); - - assertRows(execute("SELECT * FROM %s WHERE a=? AND b=? AND d CONTAINS ?", 0, 1, 2), - row(0, 1, 0, set(1, 2, 3)) - ); - - assertRows(execute("SELECT * FROM %s WHERE a=? AND b=? AND d CONTAINS ?", 0, 1, 5), - row(0, 1, 1, set(3, 4, 5)) - ); - } - - @Test - public void testContainsKeyAndContainsWithIndexOnMapKey() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories map<text,text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(keys(categories))"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, map("lmn", "foo")); - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 6, map("lmn", "foo2")); - - assertInvalidMessage("No secondary indexes on the restricted columns support the provided operators: 'categories CONTAINS <value>'", - "SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "test", "foo"); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ?", "test", "lmn"), - row("test", 5, map("lmn", "foo")), - row("test", 6, map("lmn", "foo2"))); - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ? AND categories CONTAINS ? ALLOW FILTERING", - "test", "lmn", "foo"), - row("test", 5, map("lmn", "foo"))); - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ? AND categories CONTAINS KEY ? ALLOW FILTERING", - "test", "foo", "lmn"), - row("test", 5, map("lmn", "foo"))); - } - - @Test - public void testContainsKeyAndContainsWithIndexOnMapValue() throws Throwable - { - createTable("CREATE TABLE %s (account text, id int, categories map<text,text>, PRIMARY KEY (account, id))"); - createIndex("CREATE INDEX ON %s(categories)"); - - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 5, map("lmn", "foo")); - execute("INSERT INTO %s (account, id , categories) VALUES (?, ?, ?)", "test", 6, map("lmn2", "foo")); - - assertInvalidMessage("No secondary indexes on the restricted columns support the provided operators: 'categories CONTAINS KEY <value>'", - "SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ?", "test", "lmn"); - - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ?", "test", "foo"), - row("test", 5, map("lmn", "foo")), - row("test", 6, map("lmn2", "foo"))); - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS KEY ? AND categories CONTAINS ? ALLOW FILTERING", - "test", "lmn", "foo"), - row("test", 5, map("lmn", "foo"))); - assertRows(execute("SELECT * FROM %s WHERE account = ? AND categories CONTAINS ? AND categories CONTAINS KEY ? ALLOW FILTERING", - "test", "foo", "lmn"), - row("test", 5, map("lmn", "foo"))); - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java b/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java deleted file mode 100644 index ac3ffbc..0000000 --- a/test/unit/org/apache/cassandra/cql3/CrcCheckChanceTest.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import junit.framework.Assert; -import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.db.ColumnFamilyStore; -import org.apache.cassandra.db.Keyspace; -import org.apache.cassandra.db.compaction.CompactionInterruptedException; -import org.apache.cassandra.db.compaction.CompactionManager; -import org.apache.cassandra.utils.FBUtilities; - -import org.junit.Test; - - -public class CrcCheckChanceTest extends CQLTester -{ - @Test - public void testChangingCrcCheckChance() throws Throwable - { - //Start with crc_check_chance of 99% - createTable("CREATE TABLE %s (p text, c text, v text, s text static, PRIMARY KEY (p, c)) WITH compression = {'sstable_compression': 'LZ4Compressor', 'crc_check_chance' : 0.99}"); - - execute("CREATE INDEX foo ON %s(v)"); - - execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1"); - execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2"); - execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2"); - - - ColumnFamilyStore cfs = Keyspace.open(CQLTester.KEYSPACE).getColumnFamilyStore(currentTable()); - ColumnFamilyStore indexCfs = cfs.indexManager.getIndexesBackedByCfs().iterator().next(); - cfs.forceBlockingFlush(); - - Assert.assertEquals(0.99, cfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals(0.99, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - Assert.assertEquals(0.99, indexCfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals(0.99, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - - //Test for stack overflow - cfs.setCrcCheckChance(0.99); - - assertRows(execute("SELECT * FROM %s WHERE p=?", "p1"), - row("p1", "k1", "sv1", "v1"), - row("p1", "k2", "sv1", "v2") - ); - - assertRows(execute("SELECT * FROM %s WHERE v=?", "v1"), - row("p1", "k1", "sv1", "v1") - ); - - - - //Write a few SSTables then Compact - - execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1"); - execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2"); - execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2"); - - cfs.forceBlockingFlush(); - - - execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1"); - execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2"); - execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2"); - - cfs.forceBlockingFlush(); - - execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1"); - execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2"); - execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2"); - - cfs.forceBlockingFlush(); - - cfs.forceMajorCompaction(); - - //Verify when we alter the value the live sstable readers hold the new one - alterTable("ALTER TABLE %s WITH compression = {'sstable_compression': 'LZ4Compressor', 'crc_check_chance': 0.01}"); - - Assert.assertEquals( 0.01, cfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals( 0.01, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - Assert.assertEquals( 0.01, indexCfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals( 0.01, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - - assertRows(execute("SELECT * FROM %s WHERE p=?", "p1"), - row("p1", "k1", "sv1", "v1"), - row("p1", "k2", "sv1", "v2") - ); - - assertRows(execute("SELECT * FROM %s WHERE v=?", "v1"), - row("p1", "k1", "sv1", "v1") - ); - - - //Verify the call used by JMX still works - cfs.setCrcCheckChance(0.03); - Assert.assertEquals( 0.03, cfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals( 0.03, cfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - Assert.assertEquals( 0.03, indexCfs.metadata.compressionParameters.getCrcCheckChance()); - Assert.assertEquals( 0.03, indexCfs.getSSTables().iterator().next().getCompressionMetadata().parameters.getCrcCheckChance()); - - } - - - @Test - public void testDropDuringCompaction() throws Throwable - { - CompactionManager.instance.disableAutoCompaction(); - - //Start with crc_check_chance of 99% - createTable("CREATE TABLE %s (p text, c text, v text, s text static, PRIMARY KEY (p, c)) WITH compression = {'sstable_compression': 'LZ4Compressor', 'crc_check_chance' : 0.99}"); - - ColumnFamilyStore cfs = Keyspace.open(CQLTester.KEYSPACE).getColumnFamilyStore(currentTable()); - - //Write a few SSTables then Compact, and drop - for (int i = 0; i < 100; i++) - { - execute("INSERT INTO %s(p, c, v, s) values (?, ?, ?, ?)", "p1", "k1", "v1", "sv1"); - execute("INSERT INTO %s(p, c, v) values (?, ?, ?)", "p1", "k2", "v2"); - execute("INSERT INTO %s(p, s) values (?, ?)", "p2", "sv2"); - - cfs.forceBlockingFlush(); - } - - DatabaseDescriptor.setCompactionThroughputMbPerSec(1); - List<Future<?>> futures = CompactionManager.instance.submitMaximal(cfs, CompactionManager.getDefaultGcBefore(cfs), false); - execute("DROP TABLE %s"); - - try - { - FBUtilities.waitOnFutures(futures); - } - catch (Throwable t) - { - if (!(t.getCause() instanceof ExecutionException) || !(t.getCause().getCause() instanceof CompactionInterruptedException)) - throw t; - } - } -} - http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CreateAndAlterKeyspaceTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CreateAndAlterKeyspaceTest.java b/test/unit/org/apache/cassandra/cql3/CreateAndAlterKeyspaceTest.java deleted file mode 100644 index 9e0ca21..0000000 --- a/test/unit/org/apache/cassandra/cql3/CreateAndAlterKeyspaceTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import org.junit.Test; - -public class CreateAndAlterKeyspaceTest extends CQLTester -{ - @Test - // tests CASSANDRA-9565 - public void testCreateAndAlterWithDoubleWith() throws Throwable - { - String[] stmts = new String[] {"ALTER KEYSPACE WITH WITH DURABLE_WRITES = true", - "ALTER KEYSPACE ks WITH WITH DURABLE_WRITES = true", - "CREATE KEYSPACE WITH WITH DURABLE_WRITES = true", - "CREATE KEYSPACE ks WITH WITH DURABLE_WRITES = true"}; - - for (String stmt : stmts) { - assertInvalidSyntaxMessage("no viable alternative at input 'WITH'", stmt); - } - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CreateIndexStatementTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CreateIndexStatementTest.java b/test/unit/org/apache/cassandra/cql3/CreateIndexStatementTest.java deleted file mode 100644 index 1e2e084..0000000 --- a/test/unit/org/apache/cassandra/cql3/CreateIndexStatementTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import java.util.Locale; - -import org.apache.commons.lang3.StringUtils; - -import org.junit.Test; - -public class CreateIndexStatementTest extends CQLTester -{ - @Test - public void testCreateAndDropIndex() throws Throwable - { - testCreateAndDropIndex("test", false); - testCreateAndDropIndex("test2", true); - } - - @Test - public void testCreateAndDropIndexWithQuotedIdentifier() throws Throwable - { - testCreateAndDropIndex("\"quoted_ident\"", false); - testCreateAndDropIndex("\"quoted_ident2\"", true); - } - - @Test - public void testCreateAndDropIndexWithCamelCaseIdentifier() throws Throwable - { - testCreateAndDropIndex("CamelCase", false); - testCreateAndDropIndex("CamelCase2", true); - } - - /** - * Test creating and dropping an index with the specified name. - * - * @param indexName the index name - * @param addKeyspaceOnDrop add the keyspace name in the drop statement - * @throws Throwable if an error occurs - */ - private void testCreateAndDropIndex(String indexName, boolean addKeyspaceOnDrop) throws Throwable - { - execute("USE system"); - assertInvalidMessage("Index '" + removeQuotes(indexName.toLowerCase(Locale.US)) + "' could not be found", "DROP INDEX " + indexName + ";"); - - createTable("CREATE TABLE %s (a int primary key, b int);"); - createIndex("CREATE INDEX " + indexName + " ON %s(b);"); - createIndex("CREATE INDEX IF NOT EXISTS " + indexName + " ON %s(b);"); - - assertInvalidMessage("Index already exists", "CREATE INDEX " + indexName + " ON %s(b)"); - - execute("INSERT INTO %s (a, b) values (?, ?);", 0, 0); - execute("INSERT INTO %s (a, b) values (?, ?);", 1, 1); - execute("INSERT INTO %s (a, b) values (?, ?);", 2, 2); - execute("INSERT INTO %s (a, b) values (?, ?);", 3, 1); - - assertRows(execute("SELECT * FROM %s where b = ?", 1), row(1, 1), row(3, 1)); - assertInvalidMessage("Index '" + removeQuotes(indexName.toLowerCase(Locale.US)) + "' could not be found in any of the tables of keyspace 'system'", "DROP INDEX " + indexName); - - if (addKeyspaceOnDrop) - { - dropIndex("DROP INDEX " + KEYSPACE + "." + indexName); - } - else - { - execute("USE " + KEYSPACE); - execute("DROP INDEX " + indexName); - } - - assertInvalidMessage("No secondary indexes on the restricted columns support the provided operators", - "SELECT * FROM %s where b = ?", 1); - dropIndex("DROP INDEX IF EXISTS " + indexName); - assertInvalidMessage("Index '" + removeQuotes(indexName.toLowerCase(Locale.US)) + "' could not be found", "DROP INDEX " + indexName); - } - - /** - * Removes the quotes from the specified index name. - * - * @param indexName the index name from which the quotes must be removed. - * @return the unquoted index name. - */ - private static String removeQuotes(String indexName) - { - return StringUtils.remove(indexName, '\"'); - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CreateTableTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CreateTableTest.java b/test/unit/org/apache/cassandra/cql3/CreateTableTest.java deleted file mode 100644 index d14e87b..0000000 --- a/test/unit/org/apache/cassandra/cql3/CreateTableTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import org.junit.Test; - -import org.apache.cassandra.utils.ByteBufferUtil; - -import static junit.framework.Assert.assertFalse; - -public class CreateTableTest extends CQLTester -{ - @Test - public void testCQL3PartitionKeyOnlyTable() - { - createTable("CREATE TABLE %s (id text PRIMARY KEY);"); - assertFalse(currentTableMetadata().isThriftCompatible()); - } - - @Test - public void testCreateTableWithSmallintColumns() throws Throwable - { - createTable("CREATE TABLE %s (a text, b smallint, c smallint, primary key (a, b));"); - execute("INSERT INTO %s (a, b, c) VALUES ('1', 1, 2)"); - execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "2", Short.MAX_VALUE, Short.MIN_VALUE); - - assertRows(execute("SELECT * FROM %s"), - row("1", (short) 1, (short) 2), - row("2", Short.MAX_VALUE, Short.MIN_VALUE)); - - assertInvalidMessage("Expected 2 bytes for a smallint (4)", - "INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "3", 1, 2); - assertInvalidMessage("Expected 2 bytes for a smallint (0)", - "INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "3", (short) 1, ByteBufferUtil.EMPTY_BYTE_BUFFER); - } - - @Test - public void testCreateTinyintColumns() throws Throwable - { - createTable("CREATE TABLE %s (a text, b tinyint, c tinyint, primary key (a, b));"); - execute("INSERT INTO %s (a, b, c) VALUES ('1', 1, 2)"); - execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "2", Byte.MAX_VALUE, Byte.MIN_VALUE); - - assertRows(execute("SELECT * FROM %s"), - row("1", (byte) 1, (byte) 2), - row("2", Byte.MAX_VALUE, Byte.MIN_VALUE)); - - assertInvalidMessage("Expected 1 byte for a tinyint (4)", - "INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "3", 1, 2); - - assertInvalidMessage("Expected 1 byte for a tinyint (0)", - "INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", "3", (byte) 1, ByteBufferUtil.EMPTY_BYTE_BUFFER); - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/01115f72/test/unit/org/apache/cassandra/cql3/CreateTriggerStatementTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/CreateTriggerStatementTest.java b/test/unit/org/apache/cassandra/cql3/CreateTriggerStatementTest.java deleted file mode 100644 index 6557c16..0000000 --- a/test/unit/org/apache/cassandra/cql3/CreateTriggerStatementTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3; - -import java.nio.ByteBuffer; -import java.util.Collection; -import java.util.Collections; - -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.Schema; -import org.apache.cassandra.config.TriggerDefinition; -import org.apache.cassandra.db.ColumnFamily; -import org.apache.cassandra.db.Mutation; -import org.apache.cassandra.triggers.ITrigger; -import org.junit.Test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class CreateTriggerStatementTest extends CQLTester -{ - @Test - public void testCreateTrigger() throws Throwable - { - createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a))"); - execute("CREATE TRIGGER trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - execute("CREATE TRIGGER trigger_2 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_2", TestTrigger.class); - assertInvalid("CREATE TRIGGER trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - execute("CREATE TRIGGER \"Trigger 3\" ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("Trigger 3", TestTrigger.class); - } - - @Test - public void testCreateTriggerIfNotExists() throws Throwable - { - createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a, b))"); - - execute("CREATE TRIGGER IF NOT EXISTS trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - - execute("CREATE TRIGGER IF NOT EXISTS trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - } - - @Test - public void testDropTrigger() throws Throwable - { - createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a))"); - - execute("CREATE TRIGGER trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - - execute("DROP TRIGGER trigger_1 ON %s"); - assertTriggerDoesNotExists("trigger_1", TestTrigger.class); - - execute("CREATE TRIGGER trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - - assertInvalid("DROP TRIGGER trigger_2 ON %s"); - - execute("CREATE TRIGGER \"Trigger 3\" ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("Trigger 3", TestTrigger.class); - - execute("DROP TRIGGER \"Trigger 3\" ON %s"); - assertTriggerDoesNotExists("Trigger 3", TestTrigger.class); - } - - @Test - public void testDropTriggerIfExists() throws Throwable - { - createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a))"); - - execute("DROP TRIGGER IF EXISTS trigger_1 ON %s"); - assertTriggerDoesNotExists("trigger_1", TestTrigger.class); - - execute("CREATE TRIGGER trigger_1 ON %s USING '" + TestTrigger.class.getName() + "'"); - assertTriggerExists("trigger_1", TestTrigger.class); - - execute("DROP TRIGGER IF EXISTS trigger_1 ON %s"); - assertTriggerDoesNotExists("trigger_1", TestTrigger.class); - } - - private void assertTriggerExists(String name, Class<?> clazz) - { - CFMetaData cfm = Schema.instance.getCFMetaData(keyspace(), currentTable()).copy(); - assertTrue("the trigger does not exist", cfm.containsTriggerDefinition(TriggerDefinition.create(name, - clazz.getName()))); - } - - private void assertTriggerDoesNotExists(String name, Class<?> clazz) - { - CFMetaData cfm = Schema.instance.getCFMetaData(keyspace(), currentTable()).copy(); - assertFalse("the trigger exists", cfm.containsTriggerDefinition(TriggerDefinition.create(name, - clazz.getName()))); - } - - public static class TestTrigger implements ITrigger - { - public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) - { - return Collections.emptyList(); - } - } -}
