Commit Graph

659 Commits

Author SHA1 Message Date
Mark Paluch
8ff1f0e3fc DATACASS-333 - Switch tests to AssertJ. 2016-10-25 09:37:13 +02:00
Mark Paluch
fcd383ef15 DATACASS-349 - Consider custom write converters for collection types.
We now consider registered custom write converters for top-level collection types (like Map<String, Collection<String>>) to convert properties to Java types. Previously, only collection component types and non-collection top-level types were used to determine a converter.
2016-10-24 15:03:32 +02:00
Mark Paluch
6b683f4346 DATACASS-350 - Add since version to existing deprecations. 2016-10-24 12:17:20 +02:00
Mark Paluch
b7bdd4cd7c DATACASS-350 - Deprecate CassandraTemplate methods accepting collections of entities.
Methods accepting a List of entities perform batching operations (insert/update/delete).
This can be fine for entities sharing a partition key but leads in most cases to distributed batches across a Cassandra cluster which is an anti-pattern. CassandraTemplate exposes CassandraBatchOperations for batching operations. As of Version 1.5, all methods accepting a List of entities are deprecated because there is no alternative of inserting multiple rows in an atomic way that guarantees not to harm Cassandra performance. These methods will be removed in Version 2.0.
2016-10-24 12:17:20 +02:00
John Blum
aee38017ba DATACASS-117 - Polish. 2016-10-18 22:21:01 -07:00
Mark Paluch
1bc460ca0a DATACASS-117 - Support named and expression parameters in String-based repository query methods.
We now support named and expression parameters in String-based repository query methods. Name-based parameters are referenced with :parameter. Expression parameters can reference either parameter names (if provided) with :#{expression}/#{#fieldname} or index-based with ?#{[0]}.

String-based query creation now also serializes parameters using the configured CodecRegistry so escaping and serialization is handled by the driver itself which leads to correct queries.

public interface SampleRepository extends Repository<Person, String> {

  @Query("SELECT * FROM person WHERE lastname = ?0;")
  Person findByLastname(String lastname);

  @Query("SELECT * FROM person WHERE lastname = :lastname;")
  Person findByNamedParameter(@Param("lastname") String lastname);

  @Query("SELECT * FROM person WHERE lastname = ?#{[0]};")
  Person findByIndexExpressionParameter(String lastname);

  @Query("SELECT * FROM person WHERE lastnames IN (?0) AND age = ?1;")
  Person findByLastNamesAndAge(Collection<String> lastname, int age);

  @Query("SELECT * FROM person WHERE lastname = :#{#lastname == 'Matthews' ? 'Admin' : #lastname};")
  Person findByConditionalExpressionParameter(@Param("lastname") String lastname);
}

Related tickets: DATACASS-122, DATACASS-240
2016-10-18 22:20:55 -07:00
John Blum
fac4323372 DATACASS-258 - Polish. 2016-10-17 22:09:07 -07:00
Mark Paluch
c3700eede3 DATACASS-258 - Split metadata verifier for Entities and PrimaryKey types.
We provide now two separate verifiers for Table types and PrimaryKey types. Exception messages are aligned between both verifiers and the checks use simplified code instead to perform checks. VerifierMappingExceptions introduces now immutability and methods introducing mutability are deprecated.
2016-10-17 22:08:59 -07:00
Mark Paluch
8c39fa4787 DATACASS-276 - Polishing.
Truncate table while it contains data to reach a defined state for testing.
2016-10-12 14:42:11 +02:00
Mark Paluch
24ffba5d2f DATACASS-276 - Use Row.getObject(…) instead of deserialization with CodecRegistry and ProtocolVersion.
We now rely on Row.getObject(…) to retrieve data from a Cassandra Column. CodecRegistry and ProtocolVersion are configured on Cluster so there's no need to use a static configured CodecRegistry and ProtocolVersion that might not fit the configured values.
2016-10-12 14:42:06 +02:00
Mark Paluch
527e4e3184 DATACASS-340 - Consider cluster column ordering in CreateTableSpecification.
We now consider the ordering of clustered columns when creating a CreateTableSpecification for mapped classes without a primary key class. Previously, the ordering was dropped silently.
2016-10-12 14:11:51 +02:00
Mark Paluch
54c7ab6928 DATACASS-335 - Reuse Cluster connection resources during tests where possible.
High client churn seems to affect Cassandra in a negative way (connection timeouts, driver considers hosts as down). Almost all integration tests bootstrap their own Cluster instance and dispose it once the tests has finished. Identify tests where reuse of a global Cluster instance provided by CassandraRule is possible and switch from context bootstrapping to reuse. This helps to prevent integration test failures.
2016-10-12 14:11:51 +02:00
Mark Paluch
add4cab01b DATACASS-347 - Support NettyOptions configuration in XML-based configuration.
We now support `NettyOptions` bean references in XML-based configuration.

<bean id="nettyOptions" class="…" />

<cass:cluster contact-points="…" netty-options-ref="nettyOptions" />
2016-10-12 14:11:50 +02:00
Mark Paluch
45d77ff73e DATACASS-344 - Polishing.
Switch heartbeatIntervalSeconds, idleTimeoutSeconds and poolTimeoutMilliseconds to primitive integers and compare values against defaults to decide whether to set these properties on PoolingOptions.
2016-10-12 14:11:50 +02:00
Mark Paluch
071c101c28 DATACASS-344 - Upgrade Cassandra Driver to 3.1.1.
We are now compatible with Datastax’ Cassandra Driver 3.1.1 and support the newly introduced configuration options MaxQueueSize for PoolingOptions.

This change also removes test assertions for PoolTimeoutMillis as this option was deprecated and made unusable with 3.1.1.
2016-10-12 14:11:47 +02:00
Mark Paluch
b07c708c7c DATACASS-346 - Upgrade embedded Cassandra to 3.9. 2016-10-12 12:25:45 +02:00
Oliver Gierke
5f57ce33e1 DATACASS-337 - Updated changelog. 2016-09-29 14:42:03 +02:00
Oliver Gierke
898d9bc716 DATACASS-341 - Updated changelog. 2016-09-29 11:42:05 +02:00
Mark Paluch
c3ee567196 DATACASS-339 - Rename Spring Data Cassandra to Spring Data for Apache Cassandra. 2016-09-21 09:47:46 +02:00
Oliver Gierke
a5cdf38c86 DATACASS-336 - Updated changelog. 2016-09-21 08:06:35 +02:00
Oliver Gierke
c6699b8b87 DATACASS-303 - Updated changelog. 2016-09-21 08:06:34 +02:00
John Blum
f293516ecd DATACASS-217 - Polish.
Original pull request: #82.
2016-08-29 16:10:19 -07:00
Mark Paluch
23cb654b18 DATACASS-217 - Add support for LZ4 compression.
Original pull request: #82.
2016-08-29 16:10:11 -07:00
Mark Paluch
5465afdbcf DATACASS-331 - Include netty as transient dependency of cassandra-driver-core.
Remove the previously added netty dependency exclusion in 237ac88 to include netty as transient dependency. Netty was excluded because of a dependency conflict between cassandra-driver-dse and cassandra-all. The conflict gets visible during build-time on CI hosts with symptoms of 100% CPU usage or network timeouts.

We now use cassandra-all 3.7 and cassandra-driver-core 3.1.0 which both require netty 4.0.37.Final.

Related pull request: #43.
2016-08-23 08:45:40 +02:00
Mark Paluch
cba267e80a DATACASS-334 - Upgrade embedded Cassandra to 3.7. 2016-08-23 08:45:30 +02:00
Mark Paluch
c4cb79aab5 DATACASS-332 - Assert compatibility with Cassandra driver 3.1.0. 2016-08-22 10:27:47 +02:00
Mark Paluch
25686fd2e2 DATACASS-326 - Assert compatibility with Spring 5.
Enable spring5-next profile build. Adopt tests to use the correct version comparison.
2016-08-22 10:01:54 +02:00
John Blum
c407aad8cf DATACASS-328 - Polish.
Original pull request: #81.
2016-08-09 14:59:39 -07:00
Mark Paluch
fd8e430592 DATACASS-328 - Revise QueryOptions and WriteOptions.
Deprecate our org.springframework.cassandra.core.ConsistencyLevel enum. Having an own consistency level type leads to confusion and it's always behind the driver. We don't want to maintain that type, so we decided to deprecate the own type and use the driver consistency levels.

We allow now the use of the driver retry policies aside of our consistency level enumeration. For most cases, our enumeration is the simpler approach. Some retry policies (IdempotenceAwareRetryPolicy, LoggingRetryPolicies) require further configuration and cannot be applied with just using a static enum value. We now support ReadTimeout, FetchSize, and Tracing via QueryOptions and WriteOptions and provide builders for QueryOptions and WriteOptions.

Original pull request: #81.
2016-08-09 14:59:28 -07:00
Mark Paluch
43ab34ac54 DATACASS-202 - Polishing.
Add author tags. Extend date range in headers. Simplify resolution by removing intermediate variables. Add test to verify ConsistencyLevel resolution. Guard consistency level against null.

Originall pull request: #54.
2016-07-28 15:27:17 +02:00
Antoine Toulme
da263df25c DATACASS-202 - Fix misspelled ConsistencyLevel enum constants.
Deprecate all misspelled consistency level enum values and add new consistency level enum values with correct spellings.

Original pull request: #54.
2016-07-28 15:26:25 +02:00
Oliver Gierke
e6f4822450 DATACASS-269 - After release cleanups. 2016-07-27 14:32:37 +02:00
Oliver Gierke
229dbce133 DATACASS-269 - Prepare next development iteration. 2016-07-27 14:32:34 +02:00
Oliver Gierke
96d21eda0d DATACASS-269 - Release version 1.5 M1 (Ingalls). 2016-07-27 13:52:12 +02:00
Oliver Gierke
24a0d65648 DATACASS-269 - Prepare 1.5 M1 (Ingalls). 2016-07-27 13:51:37 +02:00
Oliver Gierke
fc34ca5f57 DATACASS-269 - Updated changelog. 2016-07-27 13:51:29 +02:00
Mark Paluch
7d5b79b9e4 DATACASS-238 - Polishing.
Reformat field declarations. Add/enhance JavaDoc. Add since tags to the new methods.

Original pull requests: #79, #80.
2016-07-26 12:14:01 +02:00
John Blum
58ed9789de DATACASS-325 - Add ClusterBuilderConfigurer configuration API.
We allow users to provide a ClusterBuilderConfigurer that can be applied to the Cluster Builder. ClusterBuilderConfigurer is a callback interface to handle extended configuration when the DataStax API changes. It allows configuration of options after all provided properties were set.

Original pull request: #79.
Related pull request: #80.
2016-07-26 12:04:35 +02:00
John Blum
dfc7e3a716 DATACASS-238 - Add Cluster configuration options.
We now support configuration of the cluster name, AddressTranslator, MaxSchemaAgreementWaitSeconds, SpeculativeExecutionPolicy and TimestampGenerator in the Cassandra Cluster factory. The cluster name is derived from the bean name, if not configured otherwise.

Related tickets: DATACASS-120, DATACASS-316, DATACASS-317, DATACASS-319, DATACASS-320.
Original pull request: #79.
Related pull request: #80.
2016-07-26 12:04:29 +02:00
John Blum
d0610b2812 DATACASS-288 - Polish.
Re-implemented CassandraBatchTemplate to take a vararg array of Object entities rather than a single entity and guarded against null.

Original pull request: #78.
2016-07-24 20:23:29 -07:00
Mark Paluch
e818d3bc29 DATACASS-288 - Add support for Cassandra Batch operations.
We now support Cassandra batching via CassandraBatchOperations. Batch operations allow to insert/update/delete entities in an atomic way.

  Group walter = new Group(new GroupKey("users", "0x1", "walter"));
  Group mike = new Group(new GroupKey("users", "0x1", "mike"));
  Group tuco = new Group(new GroupKey("users", "0x1", "tuco"));

  CassandraBatchOperations batchOperations = cassandraOperations.batchOps();
  batchOperations.insert(walter).update(mike).delete(tuco).execute();

Original pull request: #78.
2016-07-24 20:23:23 -07:00
John Blum
f96e9383f3 DATACASS-7 - Polish.
Origin pull request: #74.
2016-07-24 19:34:05 -07:00
Mark Paluch
43fc7518b3 DATACASS-7 - Support query derivation in Cassandra repositories.
We now support query derivation in Cassandra repositories. Repositories may declare query methods and queries are created based on the repository declaration.

interface PersonRepository extends CassandraRepository<Person> {

	List<Person> findByLastname(@CassandraType(type = Name.VARCHAR) String lastname);
	List<Person> findByLastname(String lastname, Sort sort);
	List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
	Collection<PersonProjection> findPersonProjectedBy();

	interface PersonProjection {

		String getFirstname();
	}
}

@Table
@Data
public class Person {
	@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED, ordinal = 0)
	private String lastname;

	@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED, ordinal = 1)
	private String firstname;
}

Query derivation supports a basic set of where predicates:
* = (Equals/Simple property)
* >= (Greater or equal)
* > (Greater)
* < (Less)
* <= (Less or equal)
* IN, LIKE (Like, Starting with, Ending with), CONTAINING
* = true (Is true)
* = false (Is false)

Derived queries work with primary-key and non-primary key columns. Non-primary key columns require a secondary index otherwise these fields can't be queried.

Original pull request: #74.
2016-07-24 19:33:52 -07:00
Ruben Dijkstra
6e176ba28d DATACASS-308 - Fix parameter assertion in MappingCassandraConverter.getWhereClauses(…).
Assert.notNull now checks the id parameter in MappingCassandraConverter.getWhereClauses(…).

Original pull request: #77.
2016-07-21 17:20:05 +02:00
Mark Paluch
491472d273 DATACASS-321 - Integrate version badge from spring.io.
Add version badge from spring.io and replace fixed version numbers in the repository readme file.
2016-07-20 09:05:31 +02:00
Mark Paluch
332443f9fa DATACASS-315 - Upgrade Cassandra Driver to 3.0.3. 2016-07-15 14:14:23 +02:00
Mark Paluch
1cc85fa68e DATACASS-305 - Polishing.
Add generics to list of specifications. Extract CQL generation in own method. Add author tag.

Original pull request: #70.
2016-07-05 09:34:33 +02:00
Stefan Birkner
5154d2b531 DATACASS-305 - Improve readability of CassandraCqlClusterFactoryBean.executeSpecsAndScripts.
We now check first whether any CQL statements need to be executed. This makes the code simpler because we don't have to check whether the session has already been created. Rename the Session variable system to session to omit confusion. Remove CQL logging here as CQL statements are logged inside the CqlTemplate.

Original pull request: #70.
2016-07-05 09:34:19 +02:00
John Blum
570d71a905 DATACASS-304 - CqlTemplate.doExecute does not translate Cassandra Exceptions. 2016-07-01 17:50:32 -07:00
John Blum
ab73021187 DATACASS-310 - Fix CqlTemplate and CassandraTemplate returning null for data access operations returning a Collection. 2016-07-01 17:26:04 -07:00