diff --git a/spring-cassandra/src/main/java/org/springframework/cassandra/core/cql/KeyspaceIdentifier.java b/spring-cassandra/src/main/java/org/springframework/cassandra/core/cql/KeyspaceIdentifier.java
new file mode 100644
index 000000000..062c4626a
--- /dev/null
+++ b/spring-cassandra/src/main/java/org/springframework/cassandra/core/cql/KeyspaceIdentifier.java
@@ -0,0 +1,123 @@
+package org.springframework.cassandra.core.cql;
+
+import java.util.regex.Pattern;
+
+import org.springframework.cassandra.core.ReservedKeyword;
+import org.springframework.util.Assert;
+
+/**
+ * This encapsulates the logic for keyspace identifiers.
+ *
+ * Keyspace identifiers are converted to lower case. To render, use any of the methods {@link #toCql()},
+ * {@link #toCql(StringBuilder)}, or {@link #toString()}.
+ *
+ * @see #KeyspaceIdentifier(String)
+ * @see #toCql()
+ * @see #toCql(StringBuilder)
+ * @see #toString()
+ *
+ * @author Matthew T. Adams
+ */
+public final class KeyspaceIdentifier implements Comparable {
+
+ public static final String REGEX = "(?i)[a-z][\\w]{0,47}";
+ public static final Pattern PATTERN = Pattern.compile(REGEX);
+
+ /**
+ * Factory method for {@link KeyspaceIdentifier}. Convenient if imported statically.
+ */
+ public static KeyspaceIdentifier ksId(CharSequence identifier) {
+ return new KeyspaceIdentifier(identifier);
+ }
+
+ /**
+ * Returns true if the given {@link CharSequence} is a legal keyspace identifier.
+ */
+ public static boolean isIdentifier(CharSequence chars) {
+ return PATTERN.matcher(chars).matches() && !ReservedKeyword.isReserved(chars);
+ }
+
+ private String identifier;
+
+ /**
+ * Creates a new {@link KeyspaceIdentifier}.
+ */
+ public KeyspaceIdentifier(CharSequence identifier) {
+ setIdentifier(identifier);
+ }
+
+ /**
+ * Tests & sets the given identifier.
+ */
+ private void setIdentifier(CharSequence identifier) {
+
+ Assert.notNull(identifier);
+
+ String string = identifier.toString();
+ Assert.hasText(string);
+
+ if (!isIdentifier(string)) {
+ throw new IllegalArgumentException(String.format("given string [%s] is not a valid keyspace identifier",
+ identifier));
+ }
+ this.identifier = string.toLowerCase();
+ }
+
+ /**
+ * Renders this identifier appropriately.
+ */
+ public String toCql() {
+ return identifier;
+ }
+
+ /**
+ * Appends the rendering of this identifier to the given {@link StringBuilder}, then returns that
+ * {@link StringBuilder}. If null is given, a new {@link StringBuilder} is created, appended to, and
+ * returned.
+ */
+ public StringBuilder toCql(StringBuilder sb) {
+ sb = sb == null ? new StringBuilder() : sb;
+ return sb.append(toCql());
+ }
+
+ /**
+ * Alias for {@link #toCql()}.
+ */
+ @Override
+ public String toString() {
+ return toCql();
+ }
+
+ @Override
+ public int hashCode() {
+ return identifier.hashCode();
+ }
+
+ /**
+ * Compares this {@link KeyspaceIdentifier} to the given object. Note that if a {@link CharSequence} is given, a new
+ * {@link KeyspaceIdentifier} is created from it and compared, such that a {@link CharSequence} can be effectively
+ * equal to a {@link KeyspaceIdentifier}.
+ */
+ @Override
+ public boolean equals(Object that) {
+ if (this == that) {
+ return true;
+ }
+ if (that == null) {
+ return false;
+ }
+ if (!(that instanceof KeyspaceIdentifier) && !(that instanceof CharSequence)) {
+ return false;
+ }
+
+ KeyspaceIdentifier other = (that instanceof KeyspaceIdentifier) ? (KeyspaceIdentifier) that
+ : ksId((CharSequence) that);
+
+ return this.identifier.equals(other.identifier);
+ }
+
+ @Override
+ public int compareTo(KeyspaceIdentifier that) {
+ return this.identifier.compareTo(that.identifier);
+ }
+}
diff --git a/spring-cassandra/src/main/java/org/springframework/cassandra/core/keyspace/AlterKeyspaceSpecification.java b/spring-cassandra/src/main/java/org/springframework/cassandra/core/keyspace/AlterKeyspaceSpecification.java
index b3864df49..d9a07ceb5 100644
--- a/spring-cassandra/src/main/java/org/springframework/cassandra/core/keyspace/AlterKeyspaceSpecification.java
+++ b/spring-cassandra/src/main/java/org/springframework/cassandra/core/keyspace/AlterKeyspaceSpecification.java
@@ -15,6 +15,8 @@
*/
package org.springframework.cassandra.core.keyspace;
+import org.springframework.cassandra.core.cql.KeyspaceIdentifier;
+
public class AlterKeyspaceSpecification extends KeyspaceOptionsSpecification {
/**
@@ -24,4 +26,23 @@ public class AlterKeyspaceSpecification extends KeyspaceOptionsSpecificationIF NOT EXISTS clause.
*
@@ -88,7 +116,7 @@ public class CreateKeyspaceSpecification extends KeyspaceSpecification {
+ /**
+ * Entry point into the {@link DropKeyspaceSpecification}'s fluent API to drop a keyspace. Convenient if imported
+ * statically.
+ */
+ public static DropKeyspaceSpecification dropKeyspace() {
+ return new DropKeyspaceSpecification();
+ }
+
+ /**
+ * Entry point into the {@link DropKeyspaceSpecification}'s fluent API to drop a keyspace. Convenient if imported
+ * statically.
+ */
+ public static DropKeyspaceSpecification dropKeyspace(KeyspaceIdentifier name) {
+ return new DropKeyspaceSpecification(name);
+ }
+
+ /**
+ * Entry point into the {@link DropKeyspaceSpecification}'s fluent API to drop a keyspace. Convenient if imported
+ * statically.
+ */
+ public static DropKeyspaceSpecification dropKeyspace(String name) {
+ return new DropKeyspaceSpecification(name);
+ }
+
private boolean ifExists;
+ public DropKeyspaceSpecification() {
+ }
+
+ public DropKeyspaceSpecification(String name) {
+ name(name);
+ }
+
+ public DropKeyspaceSpecification(KeyspaceIdentifier name) {
+ name(name);
+ }
+
public DropKeyspaceSpecification ifExists() {
return ifExists(true);
}
@@ -31,12 +68,4 @@ public class DropKeyspaceSpecification extends KeyspaceActionSpecification propertyMappings = new HashMap();
public EntityMapping(String entityClassName, String tableName) {
- this(entityClassName, tableName, false);
+ this(entityClassName, tableName, Boolean.FALSE.toString());
}
- public EntityMapping(String entityClassName, String tableName, boolean forceQuote) {
+ public EntityMapping(String entityClassName, String tableName, String forceQuote) {
setEntityClassName(entityClassName);
setTableName(tableName);
@@ -77,15 +74,17 @@ public class EntityMapping {
public void setTableName(String tableName) {
- Assert.hasText(tableName);
+ Assert.notNull(tableName);
this.tableName = tableName;
}
- public boolean getForceQuote() {
+ public String getForceQuote() {
return forceQuote;
}
- public void setForceQuote(boolean forceQuote) {
+ public void setForceQuote(String forceQuote) {
+
+ Assert.notNull(forceQuote);
this.forceQuote = forceQuote;
}
@@ -103,12 +102,12 @@ public class EntityMapping {
EntityMapping other = (EntityMapping) that;
- return this.entityClassName.equals(other.entityClassName)
- && (forceQuote ? quotedCqlId(this.tableName) : cqlId(this.tableName)).equals(other.tableName);
+ return this.entityClassName.equals(other.entityClassName) && this.forceQuote.equals(other.forceQuote)
+ && this.tableName.equals(other.tableName);
}
@Override
public int hashCode() {
- return entityClassName.hashCode() ^ (forceQuote ? quotedCqlId(this.tableName) : cqlId(this.tableName)).hashCode();
+ return entityClassName.hashCode() ^ forceQuote.hashCode() ^ tableName.hashCode();
}
}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/collections/CollectionsRowValueProviderTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/collections/CollectionsRowValueProviderTest.java
index c168323bd..b7d3a7b95 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/collections/CollectionsRowValueProviderTest.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/collections/CollectionsRowValueProviderTest.java
@@ -15,10 +15,7 @@
*/
package org.springframework.data.cassandra.test.integration.collections;
-import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
-
import java.io.IOException;
-import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -31,9 +28,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.test.integration.simpletons.Book;
import org.springframework.data.cassandra.test.integration.simpletons.BookHistory;
import org.springframework.data.cassandra.test.integration.simpletons.BookReference;
@@ -56,16 +51,6 @@ public class CollectionsRowValueProviderTest extends AbstractSpringDataEmbeddedC
@Configuration
public static class Config extends IntegrationTestConfig {
- @Override
- public SchemaAction getSchemaAction() {
- return SchemaAction.RECREATE;
- }
-
- @Override
- protected List getKeyspaceCreations() {
- return Arrays.asList(createKeyspace().name(getKeyspaceName()).withSimpleReplication());
- }
-
@Override
public String[] getEntityBasePackages() {
return new String[] { Book.class.getPackage().getName() };
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
index 2a3ea384c..07ffa027c 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/composites/CommentRepositoryJavaConfigIntegrationTests.java
@@ -15,18 +15,11 @@
*/
package org.springframework.data.cassandra.test.integration.composites;
-import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
-
-import java.util.ArrayList;
-import java.util.List;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
import org.springframework.data.cassandra.test.integration.repository.UserRepository;
@@ -48,24 +41,10 @@ public class CommentRepositoryJavaConfigIntegrationTests extends AbstractSpringD
@EnableCassandraRepositories(basePackageClasses = CommentRepository.class)
public static class Config extends IntegrationTestConfig {
- @Override
- protected String getKeyspaceName() {
- return CommentRepositoryJavaConfigIntegrationTests.class.getSimpleName();
- }
-
- @Override
- protected List getKeyspaceCreations() {
- List creates = new ArrayList();
-
- creates.add(createKeyspace().name(getKeyspaceName()).withSimpleReplication());
-
- return creates;
- }
-
- @Override
- public SchemaAction getSchemaAction() {
- return SchemaAction.RECREATE;
- }
+ // @Override
+ // protected String getKeyspaceName() {
+ // return CommentRepositoryJavaConfigIntegrationTests.class.getSimpleName();
+ // }
@Override
public String[] getEntityBasePackages() {
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Explicit.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Explicit.java
new file mode 100644
index 000000000..62c1f961c
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Explicit.java
@@ -0,0 +1,31 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import java.util.UUID;
+
+import org.springframework.data.cassandra.mapping.PrimaryKey;
+import org.springframework.data.cassandra.mapping.Table;
+
+@Table(forceQuote = true, value = Explicit.TABLE_NAME)
+public class Explicit {
+
+ public static final String TABLE_NAME = "Xx";
+
+ @PrimaryKey
+ String key;
+
+ public Explicit() {
+ this(UUID.randomUUID().toString());
+ }
+
+ public Explicit(String key) {
+ setKey(key);
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ExplicitRepository.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ExplicitRepository.java
new file mode 100644
index 000000000..3dec3a438
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ExplicitRepository.java
@@ -0,0 +1,6 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import org.springframework.data.cassandra.repository.CassandraRepository;
+
+public interface ExplicitRepository extends CassandraRepository {
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryIntegrationTests.java
new file mode 100644
index 000000000..4dd20e4c6
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryIntegrationTests.java
@@ -0,0 +1,58 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+import org.springframework.data.cassandra.core.CassandraTemplate;
+
+public class ForceQuotedRepositoryIntegrationTests {
+
+ ImplicitRepository implicits;
+ ExplicitRepository explicits;
+ CassandraTemplate template;
+
+ public ForceQuotedRepositoryIntegrationTests() {
+ }
+
+ public ForceQuotedRepositoryIntegrationTests(ImplicitRepository implicits, ExplicitRepository explicits,
+ CassandraTemplate template) {
+ this.implicits = implicits;
+ this.explicits = explicits;
+ this.template = template;
+ }
+
+ public void before() {
+ template.deleteAll(Implicit.class);
+ }
+
+ public void testImplicit() {
+ Implicit entity = new Implicit();
+ String key = entity.getKey();
+
+ Implicit si = implicits.save(entity);
+ assertSame(si, entity);
+
+ Implicit fi = implicits.findOne(key);
+ assertNotSame(fi, entity);
+
+ implicits.delete(key);
+
+ assertNull(implicits.findOne(key));
+ }
+
+ public void testExplicit() {
+ Explicit entity = new Explicit();
+ String key = entity.getKey();
+
+ Explicit si = explicits.save(entity);
+ assertSame(si, entity);
+
+ Explicit fi = explicits.findOne(key);
+ assertNotSame(fi, entity);
+
+ explicits.delete(key);
+
+ assertNull(explicits.findOne(key));
+ }
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryJavaConfigIntegrationTests.java
new file mode 100644
index 000000000..13c48298b
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryJavaConfigIntegrationTests.java
@@ -0,0 +1,50 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.cassandra.core.CassandraTemplate;
+import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
+import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
+import org.springframework.data.cassandra.test.integration.support.IntegrationTestConfig;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration
+public class ForceQuotedRepositoryJavaConfigIntegrationTests extends AbstractSpringDataEmbeddedCassandraIntegrationTest {
+
+ @Configuration
+ @EnableCassandraRepositories(basePackageClasses = ForceQuotedRepositoryIntegrationTests.class)
+ public static class Config extends IntegrationTestConfig {
+ }
+
+ @Autowired
+ ImplicitRepository implicits;
+
+ @Autowired
+ ExplicitRepository explicits;
+
+ @Autowired
+ CassandraTemplate template;
+
+ ForceQuotedRepositoryIntegrationTests tests;
+
+ @Before
+ public void before() {
+ tests = new ForceQuotedRepositoryIntegrationTests(implicits, explicits, template);
+ tests.before();
+ }
+
+ @Test
+ public void testImplicit() {
+ tests.testImplicit();
+ }
+
+ @Test
+ public void testExplicit() {
+ tests.testExplicit();
+ }
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests.java
new file mode 100644
index 000000000..c94b40b28
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests.java
@@ -0,0 +1,42 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.cassandra.core.CassandraTemplate;
+import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration
+public class ForceQuotedRepositoryXmlConfigIntegrationTests extends AbstractSpringDataEmbeddedCassandraIntegrationTest {
+
+ @Autowired
+ ImplicitRepository implicits;
+
+ @Autowired
+ ExplicitRepository explicits;
+
+ @Autowired
+ CassandraTemplate template;
+
+ ForceQuotedRepositoryIntegrationTests tests;
+
+ @Before
+ public void before() {
+ tests = new ForceQuotedRepositoryIntegrationTests(implicits, explicits, template);
+ tests.before();
+ }
+
+ @Test
+ public void testImplicit() {
+ tests.testImplicit();
+ }
+
+ @Test
+ public void testExplicit() {
+ tests.testExplicit();
+ }
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Implicit.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Implicit.java
new file mode 100644
index 000000000..87cd247eb
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/Implicit.java
@@ -0,0 +1,29 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import java.util.UUID;
+
+import org.springframework.data.cassandra.mapping.PrimaryKey;
+import org.springframework.data.cassandra.mapping.Table;
+
+@Table(forceQuote = true)
+public class Implicit {
+
+ @PrimaryKey
+ String key;
+
+ public Implicit() {
+ this(UUID.randomUUID().toString());
+ }
+
+ public Implicit(String key) {
+ setKey(key);
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ImplicitRepository.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ImplicitRepository.java
new file mode 100644
index 000000000..606f3fea7
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/config/ImplicitRepository.java
@@ -0,0 +1,6 @@
+package org.springframework.data.cassandra.test.integration.forcequote.config;
+
+import org.springframework.data.cassandra.repository.CassandraRepository;
+
+public interface ImplicitRepository extends CassandraRepository {
+}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/simple/ForceQuotedEntitiesSimpleIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/simple/ForceQuotedEntitiesSimpleIntegrationTests.java
new file mode 100644
index 000000000..1966dd64b
--- /dev/null
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/forcequote/simple/ForceQuotedEntitiesSimpleIntegrationTests.java
@@ -0,0 +1,39 @@
+package org.springframework.data.cassandra.test.integration.forcequote.simple;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.springframework.data.cassandra.mapping.BasicCassandraPersistentEntity;
+import org.springframework.data.cassandra.mapping.Table;
+import org.springframework.data.util.ClassTypeInformation;
+
+public class ForceQuotedEntitiesSimpleIntegrationTests {
+
+ @Test
+ public void testImplicitTableNameForceQuoted() {
+ BasicCassandraPersistentEntity entity = new BasicCassandraPersistentEntity(
+ ClassTypeInformation.from(ImplicitTableNameForceQuoted.class));
+
+ assertEquals("\"" + ImplicitTableNameForceQuoted.class.getSimpleName() + "\"", entity.getTableName().toCql());
+ assertEquals(ImplicitTableNameForceQuoted.class.getSimpleName(), entity.getTableName().getUnquoted());
+ }
+
+ @Table(forceQuote = true)
+ public static class ImplicitTableNameForceQuoted {
+ }
+
+ public static final String EXPLICIT_TABLE_NAME = "Xx";
+
+ @Test
+ public void testExplicitTableNameForceQuoted() {
+ BasicCassandraPersistentEntity entity = new BasicCassandraPersistentEntity(
+ ClassTypeInformation.from(ExplicitTableNameForceQuoted.class));
+
+ assertEquals("\"" + EXPLICIT_TABLE_NAME + "\"", entity.getTableName().toCql());
+ assertEquals(EXPLICIT_TABLE_NAME, entity.getTableName().getUnquoted());
+ }
+
+ @Table(value = EXPLICIT_TABLE_NAME, forceQuote = true)
+ public static class ExplicitTableNameForceQuoted {
+ }
+}
\ No newline at end of file
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java
index 2449945b9..9ac54d563 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/mapping/BasicCassandraPersistentEntityIntegrationTests.java
@@ -26,16 +26,16 @@ import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.data.cassandra.mapping.BasicCassandraPersistentEntity;
import org.springframework.data.cassandra.mapping.Table;
-import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
import org.springframework.data.util.ClassTypeInformation;
/**
* Integration tests for {@link BasicCassandraPersistentEntity}.
*
* @author Alex Shvid
+ * @author Matthew T. Adams
*/
@RunWith(MockitoJUnitRunner.class)
-public class BasicCassandraPersistentEntityIntegrationTests extends AbstractSpringDataEmbeddedCassandraIntegrationTest {
+public class BasicCassandraPersistentEntityIntegrationTests {
@Mock
ApplicationContext context;
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
index 6f5e5196a..992dd8ec0 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/repository/UserRepositoryJavaConfigIntegrationTests.java
@@ -15,19 +15,11 @@
*/
package org.springframework.data.cassandra.test.integration.repository;
-import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.core.CassandraOperations;
import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
@@ -48,24 +40,10 @@ public class UserRepositoryJavaConfigIntegrationTests extends AbstractSpringData
@EnableCassandraRepositories(basePackageClasses = UserRepository.class)
public static class Config extends IntegrationTestConfig {
- @Override
- protected String getKeyspaceName() {
- return UserRepositoryJavaConfigIntegrationTests.class.getSimpleName();
- }
-
- @Override
- protected List getKeyspaceCreations() {
- List creates = new ArrayList();
-
- creates.add(createKeyspace().name(getKeyspaceName()).withSimpleReplication());
-
- return creates;
- }
-
- @Override
- public SchemaAction getSchemaAction() {
- return SchemaAction.RECREATE;
- }
+ // @Override
+ // protected String getKeyspaceName() {
+ // return UserRepositoryJavaConfigIntegrationTests.class.getSimpleName();
+ // }
@Override
public String[] getEntityBasePackages() {
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/IntegrationTestConfig.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/IntegrationTestConfig.java
index f16ff8f21..5c13d75a6 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/IntegrationTestConfig.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/support/IntegrationTestConfig.java
@@ -15,8 +15,15 @@
*/
package org.springframework.data.cassandra.test.integration.support;
+import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.cassandra.test.unit.support.Utils;
import org.springframework.context.annotation.Configuration;
+import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.config.java.AbstractSpringDataCassandraConfiguration;
/**
@@ -34,13 +41,23 @@ public class IntegrationTestConfig extends AbstractSpringDataCassandraConfigurat
public String keyspaceName = Utils.randomKeyspaceName();
+ @Override
+ protected int getPort() {
+ return PORT;
+ }
+
+ @Override
+ public SchemaAction getSchemaAction() {
+ return SchemaAction.RECREATE;
+ }
+
@Override
protected String getKeyspaceName() {
return keyspaceName;
}
@Override
- protected int getPort() {
- return PORT;
+ protected List getKeyspaceCreations() {
+ return Arrays.asList(createKeyspace().name(getKeyspaceName()).withSimpleReplication());
}
}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
index 987a63624..9fd7bffdb 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/template/CassandraDataOperationsTest.java
@@ -15,11 +15,7 @@
*/
package org.springframework.data.cassandra.test.integration.template;
-import static org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification.createKeyspace;
-
-import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@@ -31,9 +27,7 @@ import org.junit.runner.RunWith;
import org.springframework.cassandra.core.ConsistencyLevel;
import org.springframework.cassandra.core.QueryOptions;
import org.springframework.cassandra.core.RetryPolicy;
-import org.springframework.cassandra.core.keyspace.CreateKeyspaceSpecification;
import org.springframework.context.annotation.Configuration;
-import org.springframework.data.cassandra.config.SchemaAction;
import org.springframework.data.cassandra.test.integration.simpletons.Book;
import org.springframework.data.cassandra.test.integration.support.AbstractSpringDataEmbeddedCassandraIntegrationTest;
import org.springframework.data.cassandra.test.integration.support.IntegrationTestConfig;
@@ -56,16 +50,6 @@ public class CassandraDataOperationsTest extends AbstractSpringDataEmbeddedCassa
@Configuration
public static class Config extends IntegrationTestConfig {
- @Override
- public SchemaAction getSchemaAction() {
- return SchemaAction.RECREATE;
- }
-
- @Override
- protected List getKeyspaceCreations() {
- return Arrays.asList(createKeyspace().name(getKeyspaceName()).withSimpleReplication());
- }
-
@Override
public String[] getEntityBasePackages() {
return new String[] { Book.class.getPackage().getName() };
diff --git a/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests-context.xml b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests-context.xml
new file mode 100644
index 000000000..4357dea16
--- /dev/null
+++ b/spring-data-cassandra/src/test/resources/org/springframework/data/cassandra/test/integration/forcequote/config/ForceQuotedRepositoryXmlConfigIntegrationTests-context.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+