Repository: cassandra Updated Branches: refs/heads/trunk aaf201128 -> cff8dadbe
Make CQLTester.createIndex return the index name patch by Andrés de la Peña; reviewed by Benjamin Lerer for CASSANDRA-13385 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/cff8dadb Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/cff8dadb Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/cff8dadb Branch: refs/heads/trunk Commit: cff8dadbe853c43fc53a827fce965d85e30d5de7 Parents: aaf2011 Author: Andrés de la Peña <a.penya.gar...@gmail.com> Authored: Mon May 8 15:54:01 2017 +0200 Committer: Benjamin Lerer <b.le...@gmail.com> Committed: Mon May 8 15:54:01 2017 +0200 ---------------------------------------------------------------------- .../org/apache/cassandra/cql3/CQLTester.java | 42 ++++++++++++++++++-- .../apache/cassandra/cql3/KeyCacheCqlTest.java | 12 +++--- .../validation/entities/SecondaryIndexTest.java | 35 ++++++++-------- .../apache/cassandra/index/CustomIndexTest.java | 4 +- 4 files changed, 66 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/cff8dadb/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 26437c9..5a73c8d 100644 --- a/test/unit/org/apache/cassandra/cql3/CQLTester.java +++ b/test/unit/org/apache/cassandra/cql3/CQLTester.java @@ -29,9 +29,12 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import com.google.common.base.Objects; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import org.junit.*; import org.slf4j.Logger; @@ -96,6 +99,14 @@ public abstract class CQLTester public static final List<ProtocolVersion> PROTOCOL_VERSIONS = new ArrayList<>(ProtocolVersion.SUPPORTED.size()); + private static final String CREATE_INDEX_NAME_REGEX = "(\\s*(\\w*|\"\\w*\")\\s*)"; + private static final String CREATE_INDEX_REGEX = String.format("\\A\\s*CREATE(?:\\s+CUSTOM)?\\s+INDEX" + + "(?:\\s+IF\\s+NOT\\s+EXISTS)?\\s*" + + "%s?\\s*ON\\s+(%<s\\.)?%<s\\s*" + + "(\\((?:\\s*\\w+\\s*\\()?%<s\\))?", + CREATE_INDEX_NAME_REGEX); + private static final Pattern CREATE_INDEX_PATTERN = Pattern.compile(CREATE_INDEX_REGEX, Pattern.CASE_INSENSITIVE); + /** Return the current server version if supported by the driver, else * the latest that is supported. * @@ -634,15 +645,40 @@ public abstract class CQLTester schemaChange(formattedQuery); } - protected void createIndex(String query) + protected String createIndex(String query) { - createFormattedIndex(formatQuery(query)); + String formattedQuery = formatQuery(query); + return createFormattedIndex(formattedQuery); } - protected void createFormattedIndex(String formattedQuery) + protected String createFormattedIndex(String formattedQuery) { logger.info(formattedQuery); + String indexName = getCreateIndexName(formattedQuery); schemaChange(formattedQuery); + return indexName; + } + + protected static String getCreateIndexName(String formattedQuery) + { + Matcher matcher = CREATE_INDEX_PATTERN.matcher(formattedQuery); + if (!matcher.find()) + throw new IllegalArgumentException("Expected valid create index query but found: " + formattedQuery); + + String index = matcher.group(2); + if (!Strings.isNullOrEmpty(index)) + return index; + + String keyspace = matcher.group(5); + if (Strings.isNullOrEmpty(keyspace)) + throw new IllegalArgumentException("Keyspace name should be specified: " + formattedQuery); + + String table = matcher.group(7); + if (Strings.isNullOrEmpty(table)) + throw new IllegalArgumentException("Table name should be specified: " + formattedQuery); + + String column = matcher.group(9); + return Indexes.getAvailableIndexName(keyspace, table, Strings.isNullOrEmpty(column) ? null : column); } /** http://git-wip-us.apache.org/repos/asf/cassandra/blob/cff8dadb/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java b/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java index 79cb497..b76cc78 100644 --- a/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java +++ b/test/unit/org/apache/cassandra/cql3/KeyCacheCqlTest.java @@ -119,9 +119,9 @@ public class KeyCacheCqlTest extends CQLTester } @Override - protected void createIndex(String query) + protected String createIndex(String query) { - createFormattedIndex(formatQuery(KEYSPACE_PER_TEST, query)); + return createFormattedIndex(formatQuery(KEYSPACE_PER_TEST, query)); } @Override @@ -246,8 +246,8 @@ public class KeyCacheCqlTest extends CQLTester String table = createTable("CREATE TABLE %s (" + commonColumnsDef + "PRIMARY KEY ((part_key_a, part_key_b),clust_key_a,clust_key_b,clust_key_c))"); - createIndex("CREATE INDEX some_index ON %s (col_int)"); - insertData(table, "some_index", true); + String indexName = createIndex("CREATE INDEX ON %s (col_int)"); + insertData(table, indexName, true); clearCache(); CacheMetrics metrics = CacheService.instance.keyCache.getMetrics(); @@ -331,8 +331,8 @@ public class KeyCacheCqlTest extends CQLTester String table = createTable("CREATE TABLE %s (" + commonColumnsDef + "PRIMARY KEY ((part_key_a, part_key_b),clust_key_a,clust_key_b,clust_key_c))"); - createIndex("CREATE INDEX some_index ON %s (col_int)"); - insertData(table, "some_index", true); + String indexName = createIndex("CREATE INDEX ON %s (col_int)"); + insertData(table, indexName, true); clearCache(); CacheMetrics metrics = CacheService.instance.keyCache.getMetrics(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/cff8dadb/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java index 2dbf5ec..c5fb45d 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java @@ -1090,12 +1090,12 @@ public class SecondaryIndexTest extends CQLTester public void droppingIndexInvalidatesPreparedStatements() throws Throwable { createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY ((a), b))"); - createIndex("CREATE INDEX c_idx ON %s(c)"); + String indexName = createIndex("CREATE INDEX ON %s(c)"); MD5Digest cqlId = prepareStatement("SELECT * FROM %s.%s WHERE c=?").statementId; assertNotNull(QueryProcessor.instance.getPrepared(cqlId)); - dropIndex("DROP INDEX %s.c_idx"); + dropIndex("DROP INDEX %s." + indexName); assertNull(QueryProcessor.instance.getPrepared(cqlId)); } @@ -1428,10 +1428,10 @@ public class SecondaryIndexTest extends CQLTester Object udt2 = userType("a", 2); execute("INSERT INTO %s (k, v) VALUES (?, ?)", 0, udt1); - execute("CREATE INDEX idx ON %s (v)"); + String indexName = createIndex("CREATE INDEX ON %s (v)"); execute("INSERT INTO %s (k, v) VALUES (?, ?)", 1, udt2); execute("INSERT INTO %s (k, v) VALUES (?, ?)", 1, udt1); - assertTrue(waitForIndex(keyspace(), tableName, "idx")); + assertTrue(waitForIndex(keyspace(), tableName, indexName)); assertRows(execute("SELECT * FROM %s WHERE v = ?", udt1), row(1, udt1), row(0, udt1)); assertEmpty(execute("SELECT * FROM %s WHERE v = ?", udt2)); @@ -1439,8 +1439,9 @@ public class SecondaryIndexTest extends CQLTester execute("DELETE FROM %s WHERE k = 0"); assertRows(execute("SELECT * FROM %s WHERE v = ?", udt1), row(1, udt1)); - dropIndex("DROP INDEX %s.idx"); - assertInvalidMessage("Index 'idx' could not be found", "DROP INDEX " + KEYSPACE + ".idx"); + dropIndex("DROP INDEX %s." + indexName); + assertInvalidMessage(String.format("Index '%s' could not be found", indexName), + String.format("DROP INDEX %s.%s", KEYSPACE, indexName)); assertInvalidMessage(StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE, "SELECT * FROM %s WHERE v = ?", udt1); } @@ -1457,10 +1458,10 @@ public class SecondaryIndexTest extends CQLTester execute("INSERT INTO %s (k, v) VALUES (?, ?)", 1, set(udt1, udt2)); assertInvalidMessage("Frozen collections only support full()", "CREATE INDEX idx ON %s (keys(v))"); assertInvalidMessage("Frozen collections only support full()", "CREATE INDEX idx ON %s (values(v))"); - execute("CREATE INDEX idx ON %s (full(v))"); + String indexName = createIndex("CREATE INDEX ON %s (full(v))"); execute("INSERT INTO %s (k, v) VALUES (?, ?)", 2, set(udt2)); - assertTrue(waitForIndex(keyspace(), tableName, "idx")); + assertTrue(waitForIndex(keyspace(), tableName, indexName)); assertInvalidMessage(StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE, "SELECT * FROM %s WHERE v CONTAINS ?", udt1); @@ -1471,8 +1472,9 @@ public class SecondaryIndexTest extends CQLTester execute("DELETE FROM %s WHERE k = 2"); assertEmpty(execute("SELECT * FROM %s WHERE v = ?", set(udt2))); - dropIndex("DROP INDEX %s.idx"); - assertInvalidMessage("Index 'idx' could not be found", "DROP INDEX " + KEYSPACE + ".idx"); + dropIndex("DROP INDEX %s." + indexName); + assertInvalidMessage(String.format("Index '%s' could not be found", indexName), + String.format("DROP INDEX %s.%s", KEYSPACE, indexName)); assertInvalidMessage(StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE, "SELECT * FROM %s WHERE v CONTAINS ?", udt1); } @@ -1488,14 +1490,14 @@ public class SecondaryIndexTest extends CQLTester execute("INSERT INTO %s (k, v) VALUES (?, ?)", 1, set(udt1)); assertInvalidMessage("Cannot create index on keys of column v with non-map type", - "CREATE INDEX idx ON %s (keys(v))"); + "CREATE INDEX ON %s (keys(v))"); assertInvalidMessage("full() indexes can only be created on frozen collections", - "CREATE INDEX idx ON %s (full(v))"); - execute("CREATE INDEX idx ON %s (values(v))"); + "CREATE INDEX ON %s (full(v))"); + String indexName = createIndex("CREATE INDEX ON %s (values(v))"); execute("INSERT INTO %s (k, v) VALUES (?, ?)", 2, set(udt2)); execute("UPDATE %s SET v = v + ? WHERE k = ?", set(udt2), 1); - assertTrue(waitForIndex(keyspace(), tableName, "idx")); + assertTrue(waitForIndex(keyspace(), tableName, indexName)); assertRows(execute("SELECT * FROM %s WHERE v CONTAINS ?", udt1), row(1, set(udt1, udt2))); assertRows(execute("SELECT * FROM %s WHERE v CONTAINS ?", udt2), row(1, set(udt1, udt2)), row(2, set(udt2))); @@ -1504,8 +1506,9 @@ public class SecondaryIndexTest extends CQLTester assertEmpty(execute("SELECT * FROM %s WHERE v CONTAINS ?", udt1)); assertRows(execute("SELECT * FROM %s WHERE v CONTAINS ?", udt2), row(2, set(udt2))); - dropIndex("DROP INDEX %s.idx"); - assertInvalidMessage("Index 'idx' could not be found", "DROP INDEX " + KEYSPACE + ".idx"); + dropIndex("DROP INDEX %s." + indexName); + assertInvalidMessage(String.format("Index '%s' could not be found", indexName), + String.format("DROP INDEX %s.%s", KEYSPACE, indexName)); assertInvalidMessage(StatementRestrictions.REQUIRES_ALLOW_FILTERING_MESSAGE, "SELECT * FROM %s WHERE v CONTAINS ?", udt1); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/cff8dadb/test/unit/org/apache/cassandra/index/CustomIndexTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/index/CustomIndexTest.java b/test/unit/org/apache/cassandra/index/CustomIndexTest.java index b6b401d..ed999fa 100644 --- a/test/unit/org/apache/cassandra/index/CustomIndexTest.java +++ b/test/unit/org/apache/cassandra/index/CustomIndexTest.java @@ -68,7 +68,7 @@ public class CustomIndexTest extends CQLTester // test to ensure that we don't deadlock when flushing CFS backed custom indexers // see CASSANDRA-10181 createTable("CREATE TABLE %s (a int, b int, c int, d int, PRIMARY KEY (a, b))"); - createIndex("CREATE CUSTOM INDEX myindex ON %s(c) USING 'org.apache.cassandra.index.internal.CustomCassandraIndex'"); + createIndex("CREATE CUSTOM INDEX ON %s(c) USING 'org.apache.cassandra.index.internal.CustomCassandraIndex'"); execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 0, 0, 2); execute("INSERT INTO %s (a, b, c, d) VALUES (?, ?, ?, ?)", 0, 1, 0, 1); @@ -81,7 +81,7 @@ public class CustomIndexTest extends CQLTester // deadlocks and times out the test in the face of the synchronisation // issues described in the comments on CASSANDRA-9669 createTable("CREATE TABLE %s (a int, b int, c int, PRIMARY KEY (a))"); - createIndex("CREATE CUSTOM INDEX b_index ON %s(b) USING 'org.apache.cassandra.index.StubIndex'"); + createIndex("CREATE CUSTOM INDEX ON %s(b) USING 'org.apache.cassandra.index.StubIndex'"); execute("INSERT INTO %s (a, b, c) VALUES (?, ?, ?)", 0, 1, 2); getCurrentColumnFamilyStore().truncateBlocking(); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org