From 3a145b1df059ddcfc90054e966921b46328e261f Mon Sep 17 00:00:00 2001 From: Samuel Padou Date: Sat, 18 Jan 2020 19:37:06 +0100 Subject: [PATCH] DATACASS-720 - Fix CassandraAdminTemplate.getKeyspaceMetadata() to quote keyspace name if necessary. Original pull request: #170. --- .../cassandra/core/CassandraAdminTemplate.java | 7 +++++-- .../CassandraAdminTemplateIntegrationTests.java | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java index a63022aca..8174d4385 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java @@ -33,6 +33,7 @@ import org.springframework.data.cassandra.core.mapping.CassandraPersistentEntity import org.springframework.util.Assert; import com.datastax.driver.core.KeyspaceMetadata; +import com.datastax.driver.core.Metadata; import com.datastax.driver.core.Session; import com.datastax.driver.core.TableMetadata; @@ -43,6 +44,7 @@ import com.datastax.driver.core.TableMetadata; * @author Fabio J. Mendes * @author John Blum * @author Vagif Zeynalov + * @author Samuel Padou */ public class CassandraAdminTemplate extends CassandraTemplate implements CassandraAdminOperations { @@ -166,10 +168,11 @@ public class CassandraAdminTemplate extends CassandraTemplate implements Cassand // noinspection ConstantConditions return getCqlOperations().execute((SessionCallback) session -> { - KeyspaceMetadata keyspaceMetadata = session.getCluster().getMetadata().getKeyspace(session.getLoggedKeyspace()); + String keyspace = Metadata.quoteIfNecessary(session.getLoggedKeyspace()); + KeyspaceMetadata keyspaceMetadata = session.getCluster().getMetadata().getKeyspace(keyspace); Assert.state(keyspaceMetadata != null, - String.format("Metadata for keyspace [%s] not available", session.getLoggedKeyspace())); + String.format("Metadata for keyspace [%s] not available", keyspace)); return keyspaceMetadata; }); diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/CassandraAdminTemplateIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/CassandraAdminTemplateIntegrationTests.java index b82ba2117..28e546c3c 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/CassandraAdminTemplateIntegrationTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/CassandraAdminTemplateIntegrationTests.java @@ -36,6 +36,7 @@ import com.datastax.driver.core.TableMetadata; * Integration tests for {@link CassandraAdminTemplate}. * * @author Mark Paluch + * @author Samuel Padou */ public class CassandraAdminTemplateIntegrationTests extends AbstractKeyspaceCreatingIntegrationTest { @@ -85,4 +86,20 @@ public class CassandraAdminTemplateIntegrationTests extends AbstractKeyspaceCrea assertThat(getKeyspaceMetadata().getTables()).hasSize(0); } + + @Test // DATACASS-720 + public void testCaseSensitiveKeyspaceMetadata() { + + String quotedCaseSensitiveKeyspace = "\"CaseSensitive\""; + + session.execute(String.format("DROP KEYSPACE IF EXISTS %s;", quotedCaseSensitiveKeyspace)); + session.execute(String.format( + "CREATE KEYSPACE %s WITH durable_writes = false AND replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};", + quotedCaseSensitiveKeyspace)); + session.execute(String.format("USE %s;", quotedCaseSensitiveKeyspace)); + assertThat(cassandraAdminTemplate.getKeyspaceMetadata()).isNotNull(); + + session.execute(String.format("USE %s;", keyspace)); + assertThat(cassandraAdminTemplate.getKeyspaceMetadata()).isNotNull(); + } }