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 d1bbb4a6a..d89b0e4fd 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 @@ -32,6 +32,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; @@ -42,6 +43,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 { @@ -144,10 +146,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(); + } }