diff --git a/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java b/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java index 0b0361dfe..dbb5cb6d1 100644 --- a/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java +++ b/src/main/java/org/springframework/data/cassandra/core/CassandraOperations.java @@ -545,35 +545,35 @@ public interface CassandraOperations { * * @param object */ - void deleteAsychronously(T entity); + void deleteAsynchronously(T entity); /** * @param entity * @param tableName * @param options */ - void deleteAsychronously(T entity, QueryOptions options); + void deleteAsynchronously(T entity, QueryOptions options); /** * @param entity * @param tableName * @param optionsByName */ - void deleteAsychronously(T entity, Map optionsByName); + void deleteAsynchronously(T entity, Map optionsByName); /** * @param entity * @param tableName * @param options */ - void deleteAsychronously(T entity, String tableName, QueryOptions options); + void deleteAsynchronously(T entity, String tableName, QueryOptions options); /** * @param entity * @param tableName * @param optionsByName */ - void deleteAsychronously(T entity, String tableName, Map optionsByName); + void deleteAsynchronously(T entity, String tableName, Map optionsByName); /** * Removes the given object from the given table. @@ -581,14 +581,14 @@ public interface CassandraOperations { * @param object * @param table must not be {@literal null} or empty. */ - void deleteAsychronously(T entity, String tableName); + void deleteAsynchronously(T entity, String tableName); /** * Remove the given object from the table by id. * * @param object */ - void deleteAsychronously(List entities); + void deleteAsynchronously(List entities); /** * Removes the given object from the given table. @@ -596,35 +596,35 @@ public interface CassandraOperations { * @param object * @param table must not be {@literal null} or empty. */ - void deleteAsychronously(List entities, String tableName); + void deleteAsynchronously(List entities, String tableName); /** * @param entities * @param tableName * @param options */ - void deleteAsychronously(List entities, QueryOptions options); + void deleteAsynchronously(List entities, QueryOptions options); /** * @param entities * @param tableName * @param optionsByName */ - void deleteAsychronously(List entities, Map optionsByName); + void deleteAsynchronously(List entities, Map optionsByName); /** * @param entities * @param tableName * @param options */ - void deleteAsychronously(List entities, String tableName, QueryOptions options); + void deleteAsynchronously(List entities, String tableName, QueryOptions options); /** * @param entities * @param tableName * @param optionsByName */ - void deleteAsychronously(List entities, String tableName, Map optionsByName); + void deleteAsynchronously(List entities, String tableName, Map optionsByName); /** * Returns the underlying {@link CassandraConverter}. diff --git a/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java b/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java index c69951073..70d2d0b2b 100644 --- a/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java +++ b/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java @@ -234,48 +234,48 @@ public class CassandraTemplate implements CassandraOperations { } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List) */ @Override - public void deleteAsychronously(List entities) { + public void deleteAsynchronously(List entities) { String tableName = getTableName(entities.get(0).getClass()); Assert.notNull(tableName); - deleteAsychronously(entities, tableName); + deleteAsynchronously(entities, tableName); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List, java.util.Map) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List, java.util.Map) */ @Override - public void deleteAsychronously(List entities, Map optionsByName) { + public void deleteAsynchronously(List entities, Map optionsByName) { String tableName = getTableName(entities.get(0).getClass()); Assert.notNull(tableName); - deleteAsychronously(entities, tableName, optionsByName); + deleteAsynchronously(entities, tableName, optionsByName); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List, org.springframework.data.cassandra.core.QueryOptions) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List, org.springframework.data.cassandra.core.QueryOptions) */ @Override - public void deleteAsychronously(List entities, QueryOptions options) { + public void deleteAsynchronously(List entities, QueryOptions options) { String tableName = getTableName(entities.get(0).getClass()); Assert.notNull(tableName); - deleteAsychronously(entities, tableName, options); + deleteAsynchronously(entities, tableName, options); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List, java.lang.String) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List, java.lang.String) */ @Override - public void deleteAsychronously(List entities, String tableName) { + public void deleteAsynchronously(List entities, String tableName) { insertAsynchronously(entities, tableName, new HashMap()); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List, java.lang.String, java.util.Map) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List, java.lang.String, java.util.Map) */ @Override - public void deleteAsychronously(List entities, String tableName, Map optionsByName) { + public void deleteAsynchronously(List entities, String tableName, Map optionsByName) { Assert.notNull(entities); Assert.notEmpty(entities); Assert.notNull(tableName); @@ -284,56 +284,56 @@ public class CassandraTemplate implements CassandraOperations { } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.util.List, java.lang.String, org.springframework.data.cassandra.core.QueryOptions) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.util.List, java.lang.String, org.springframework.data.cassandra.core.QueryOptions) */ @Override - public void deleteAsychronously(List entities, String tableName, QueryOptions options) { - deleteAsychronously(entities, tableName, options.toMap()); + public void deleteAsynchronously(List entities, String tableName, QueryOptions options) { + deleteAsynchronously(entities, tableName, options.toMap()); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object) */ @Override - public void deleteAsychronously(T entity) { + public void deleteAsynchronously(T entity) { String tableName = getTableName(entity.getClass()); Assert.notNull(tableName); - deleteAsychronously(entity, tableName); + deleteAsynchronously(entity, tableName); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object, java.util.Map) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object, java.util.Map) */ @Override - public void deleteAsychronously(T entity, Map optionsByName) { + public void deleteAsynchronously(T entity, Map optionsByName) { String tableName = getTableName(entity.getClass()); Assert.notNull(tableName); - deleteAsychronously(entity, tableName, optionsByName); + deleteAsynchronously(entity, tableName, optionsByName); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object, org.springframework.data.cassandra.core.QueryOptions) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object, org.springframework.data.cassandra.core.QueryOptions) */ @Override - public void deleteAsychronously(T entity, QueryOptions options) { + public void deleteAsynchronously(T entity, QueryOptions options) { String tableName = getTableName(entity.getClass()); Assert.notNull(tableName); - deleteAsychronously(entity, tableName, options); + deleteAsynchronously(entity, tableName, options); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object, java.lang.String) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object, java.lang.String) */ @Override - public void deleteAsychronously(T entity, String tableName) { - deleteAsychronously(entity, tableName, new HashMap()); + public void deleteAsynchronously(T entity, String tableName) { + deleteAsynchronously(entity, tableName, new HashMap()); } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object, java.lang.String, java.util.Map) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object, java.lang.String, java.util.Map) */ @Override - public void deleteAsychronously(T entity, String tableName, Map optionsByName) { + public void deleteAsynchronously(T entity, String tableName, Map optionsByName) { Assert.notNull(entity); Assert.notNull(tableName); Assert.notNull(optionsByName); @@ -341,11 +341,11 @@ public class CassandraTemplate implements CassandraOperations { } /* (non-Javadoc) - * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsychronously(java.lang.Object, java.lang.String, org.springframework.data.cassandra.core.QueryOptions) + * @see org.springframework.data.cassandra.core.CassandraOperations#deleteAsynchronously(java.lang.Object, java.lang.String, org.springframework.data.cassandra.core.QueryOptions) */ @Override - public void deleteAsychronously(T entity, String tableName, QueryOptions options) { - deleteAsychronously(entity, tableName, options.toMap()); + public void deleteAsynchronously(T entity, String tableName, QueryOptions options) { + deleteAsynchronously(entity, tableName, options.toMap()); } /* (non-Javadoc) diff --git a/src/main/java/org/springframework/data/cassandra/util/CqlUtils.java b/src/main/java/org/springframework/data/cassandra/util/CqlUtils.java index 90cfe1610..89aee635a 100644 --- a/src/main/java/org/springframework/data/cassandra/util/CqlUtils.java +++ b/src/main/java/org/springframework/data/cassandra/util/CqlUtils.java @@ -31,7 +31,6 @@ import com.datastax.driver.core.querybuilder.QueryBuilder; import com.datastax.driver.core.querybuilder.Update; /** - * * Utilties to convert Cassandra Annotated objects to Queries and CQL. * * @author Alex Shvid @@ -204,11 +203,9 @@ public abstract class CqlUtils { * * @param keyspaceName * @param tableName - * @param entity * @param objectToSave + * @param entity * @param optionsByName - * @param mappingContext - * @param beanClassLoader * * @return The Query object to run with session.execute(); * @throws EntityWriterException @@ -270,11 +267,9 @@ public abstract class CqlUtils { * * @param keyspaceName * @param tableName - * @param entity * @param objectToSave + * @param entity * @param optionsByName - * @param mappingContext - * @param beanClassLoader * * @return The Query object to run with session.execute(); * @throws EntityWriterException @@ -340,10 +335,9 @@ public abstract class CqlUtils { * * @param keyspaceName * @param tableName - * @param entity * @param objectsToSave - * @param mappingContext - * @param beanClassLoader + * @param entity + * @param optionsByName * * @return The Query object to run with session.execute(); * @throws EntityWriterException @@ -374,10 +368,9 @@ public abstract class CqlUtils { * * @param keyspaceName * @param tableName - * @param entity * @param objectsToSave - * @param mappingContext - * @param beanClassLoader + * @param entity + * @param optionsByName * * @return The Query object to run with session.execute(); * @throws EntityWriterException @@ -404,10 +397,13 @@ public abstract class CqlUtils { } /** + * Create a Delete Query Object from an annotated POJO + * * @param keyspace * @param tableName * @param objectToRemove * @param entity + * @param optionsByName * @return * @throws EntityWriterException */ @@ -496,10 +492,14 @@ public abstract class CqlUtils { } /** + * Create a Batch Query object for multiple deletes. + * * @param keyspace * @param tableName * @param entities - * @param cPEntity + * @param entity + * @param optionsByName + * * @return * @throws EntityWriterException */ diff --git a/src/test/java/org/springframework/data/cassandra/template/CassandraOperationsTest.java b/src/test/java/org/springframework/data/cassandra/template/CassandraOperationsTest.java index da42d9af8..7e0764012 100644 --- a/src/test/java/org/springframework/data/cassandra/template/CassandraOperationsTest.java +++ b/src/test/java/org/springframework/data/cassandra/template/CassandraOperationsTest.java @@ -359,6 +359,283 @@ public class CassandraOperationsTest { return books; } + @Test + public void updateTest() { + + insertTest(); + + QueryOptions options = new QueryOptions(); + options.setConsistencyLevel(ConsistencyLevel.ONE); + options.setRetryPolicy(RetryPolicy.DOWNGRADING_CONSISTENCY); + + Map optionsByName = new HashMap(); + optionsByName.put(QueryOptions.QueryOptionMapKeys.CONSISTENCY_LEVEL, ConsistencyLevel.ALL); + optionsByName.put(QueryOptions.QueryOptionMapKeys.RETRY_POLICY, RetryPolicy.FALLTHROUGH); + optionsByName.put(QueryOptions.QueryOptionMapKeys.TTL, 30); + + /* + * Test Single Insert with entity + */ + Book b1 = new Book(); + b1.setIsbn("123456-1"); + b1.setTitle("Spring Data Cassandra Book"); + b1.setAuthor("Cassandra Guru"); + b1.setPages(521); + + cassandraTemplate.update(b1); + + Book b2 = new Book(); + b2.setIsbn("123456-2"); + b2.setTitle("Spring Data Cassandra Book"); + b2.setAuthor("Cassandra Guru"); + b2.setPages(521); + + cassandraTemplate.update(b2, "book_alt"); + + /* + * Test Single Insert with entity + */ + Book b3 = new Book(); + b3.setIsbn("123456-3"); + b3.setTitle("Spring Data Cassandra Book"); + b3.setAuthor("Cassandra Guru"); + b3.setPages(265); + + cassandraTemplate.update(b3, "book", options); + + /* + * Test Single Insert with entity + */ + Book b4 = new Book(); + b4.setIsbn("123456-4"); + b4.setTitle("Spring Data Cassandra Book"); + b4.setAuthor("Cassandra Guru"); + b4.setPages(465); + + cassandraTemplate.update(b4, "book", optionsByName); + + /* + * Test Single Insert with entity + */ + Book b5 = new Book(); + b5.setIsbn("123456-5"); + b5.setTitle("Spring Data Cassandra Book"); + b5.setAuthor("Cassandra Guru"); + b5.setPages(265); + + cassandraTemplate.update(b5, options); + + /* + * Test Single Insert with entity + */ + Book b6 = new Book(); + b6.setIsbn("123456-6"); + b6.setTitle("Spring Data Cassandra Book"); + b6.setAuthor("Cassandra Guru"); + b6.setPages(465); + + cassandraTemplate.update(b6, optionsByName); + + } + + @Test + public void updateAsynchronouslyTest() { + + insertTest(); + + QueryOptions options = new QueryOptions(); + options.setConsistencyLevel(ConsistencyLevel.ONE); + options.setRetryPolicy(RetryPolicy.DOWNGRADING_CONSISTENCY); + + Map optionsByName = new HashMap(); + optionsByName.put(QueryOptions.QueryOptionMapKeys.CONSISTENCY_LEVEL, ConsistencyLevel.ALL); + optionsByName.put(QueryOptions.QueryOptionMapKeys.RETRY_POLICY, RetryPolicy.FALLTHROUGH); + optionsByName.put(QueryOptions.QueryOptionMapKeys.TTL, 30); + + /* + * Test Single Insert with entity + */ + Book b1 = new Book(); + b1.setIsbn("123456-1"); + b1.setTitle("Spring Data Cassandra Book"); + b1.setAuthor("Cassandra Guru"); + b1.setPages(521); + + cassandraTemplate.updateAsynchronously(b1); + + Book b2 = new Book(); + b2.setIsbn("123456-2"); + b2.setTitle("Spring Data Cassandra Book"); + b2.setAuthor("Cassandra Guru"); + b2.setPages(521); + + cassandraTemplate.updateAsynchronously(b2, "book_alt"); + + /* + * Test Single Insert with entity + */ + Book b3 = new Book(); + b3.setIsbn("123456-3"); + b3.setTitle("Spring Data Cassandra Book"); + b3.setAuthor("Cassandra Guru"); + b3.setPages(265); + + cassandraTemplate.updateAsynchronously(b3, "book", options); + + /* + * Test Single Insert with entity + */ + Book b4 = new Book(); + b4.setIsbn("123456-4"); + b4.setTitle("Spring Data Cassandra Book"); + b4.setAuthor("Cassandra Guru"); + b4.setPages(465); + + cassandraTemplate.updateAsynchronously(b4, "book", optionsByName); + + /* + * Test Single Insert with entity + */ + Book b5 = new Book(); + b5.setIsbn("123456-5"); + b5.setTitle("Spring Data Cassandra Book"); + b5.setAuthor("Cassandra Guru"); + b5.setPages(265); + + cassandraTemplate.updateAsynchronously(b5, options); + + /* + * Test Single Insert with entity + */ + Book b6 = new Book(); + b6.setIsbn("123456-6"); + b6.setTitle("Spring Data Cassandra Book"); + b6.setAuthor("Cassandra Guru"); + b6.setPages(465); + + cassandraTemplate.updateAsynchronously(b6, optionsByName); + + } + + @Test + public void deleteTest() { + + insertTest(); + + QueryOptions options = new QueryOptions(); + options.setConsistencyLevel(ConsistencyLevel.ONE); + options.setRetryPolicy(RetryPolicy.DOWNGRADING_CONSISTENCY); + + Map optionsByName = new HashMap(); + optionsByName.put(QueryOptions.QueryOptionMapKeys.CONSISTENCY_LEVEL, ConsistencyLevel.ALL); + optionsByName.put(QueryOptions.QueryOptionMapKeys.RETRY_POLICY, RetryPolicy.FALLTHROUGH); + + /* + * Test Single Insert with entity + */ + Book b1 = new Book(); + b1.setIsbn("123456-1"); + + cassandraTemplate.delete(b1); + + Book b2 = new Book(); + b2.setIsbn("123456-2"); + + cassandraTemplate.delete(b2, "book_alt"); + + /* + * Test Single Insert with entity + */ + Book b3 = new Book(); + b3.setIsbn("123456-3"); + + cassandraTemplate.delete(b3, "book", options); + + /* + * Test Single Insert with entity + */ + Book b4 = new Book(); + b4.setIsbn("123456-4"); + + cassandraTemplate.delete(b4, "book", optionsByName); + + /* + * Test Single Insert with entity + */ + Book b5 = new Book(); + b5.setIsbn("123456-5"); + + cassandraTemplate.delete(b5, options); + + /* + * Test Single Insert with entity + */ + Book b6 = new Book(); + b6.setIsbn("123456-6"); + + cassandraTemplate.delete(b6, optionsByName); + + } + + @Test + public void deleteAsynchronouslyTest() { + + insertTest(); + + QueryOptions options = new QueryOptions(); + options.setConsistencyLevel(ConsistencyLevel.ONE); + options.setRetryPolicy(RetryPolicy.DOWNGRADING_CONSISTENCY); + + Map optionsByName = new HashMap(); + optionsByName.put(QueryOptions.QueryOptionMapKeys.CONSISTENCY_LEVEL, ConsistencyLevel.ALL); + optionsByName.put(QueryOptions.QueryOptionMapKeys.RETRY_POLICY, RetryPolicy.FALLTHROUGH); + + /* + * Test Single Insert with entity + */ + Book b1 = new Book(); + b1.setIsbn("123456-1"); + + cassandraTemplate.deleteAsynchronously(b1); + + Book b2 = new Book(); + b2.setIsbn("123456-2"); + + cassandraTemplate.deleteAsynchronously(b2, "book_alt"); + + /* + * Test Single Insert with entity + */ + Book b3 = new Book(); + b3.setIsbn("123456-3"); + + cassandraTemplate.deleteAsynchronously(b3, "book", options); + + /* + * Test Single Insert with entity + */ + Book b4 = new Book(); + b4.setIsbn("123456-4"); + + cassandraTemplate.deleteAsynchronously(b4, "book", optionsByName); + + /* + * Test Single Insert with entity + */ + Book b5 = new Book(); + b5.setIsbn("123456-5"); + + cassandraTemplate.deleteAsynchronously(b5, options); + + /* + * Test Single Insert with entity + */ + Book b6 = new Book(); + b6.setIsbn("123456-6"); + + cassandraTemplate.deleteAsynchronously(b6, optionsByName); + } + @After public void clearCassandra() { EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();