DATACASS-720 - Fix CassandraAdminTemplate.getKeyspaceMetadata() to quote keyspace name if necessary.

Original pull request: #170.
This commit is contained in:
Samuel Padou
2020-01-18 19:37:06 +01:00
committed by Mark Paluch
parent 076c939d9b
commit 3a145b1df0
2 changed files with 22 additions and 2 deletions

View File

@@ -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<KeyspaceMetadata>) 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;
});

View File

@@ -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();
}
}