DATACASS-656 - Migrate QueryOptions.fetchSize and readTimeout to pageSize and timeout.
Use renamed Statement options by introducing new pageSize(…) and timeout(…) methods. Deprecated existing methods. Also, deprecate retryPolicy method in preparation for execution profiles. Original pull request: #167.
This commit is contained in:
@@ -27,8 +27,8 @@ import org.springframework.data.cassandra.core.query.Filter;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.RetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
|
||||
|
||||
/**
|
||||
* Extension to {@link WriteOptions} for use with {@code DELETE} operations.
|
||||
@@ -132,6 +132,7 @@ public class DeleteOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#retryPolicy(com.datastax.driver.core.policies.RetryPolicy)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public DeleteOptionsBuilder retryPolicy(RetryPolicy driverRetryPolicy) {
|
||||
|
||||
super.retryPolicy(driverRetryPolicy);
|
||||
@@ -142,16 +143,28 @@ public class DeleteOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#fetchSize(int)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public DeleteOptionsBuilder fetchSize(int fetchSize) {
|
||||
|
||||
super.fetchSize(fetchSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#pageSize(int)
|
||||
*/
|
||||
@Override
|
||||
public DeleteOptionsBuilder pageSize(int pageSize) {
|
||||
|
||||
super.pageSize(pageSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(long)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public DeleteOptionsBuilder readTimeout(long readTimeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
@@ -173,9 +186,9 @@ public class DeleteOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(java.time.Duration)
|
||||
*/
|
||||
@Override
|
||||
public DeleteOptionsBuilder readTimeout(Duration readTimeout) {
|
||||
public DeleteOptionsBuilder timeout(Duration timeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
super.timeout(timeout);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -299,7 +312,7 @@ public class DeleteOptions extends WriteOptions {
|
||||
*/
|
||||
public DeleteOptions build() {
|
||||
|
||||
return new DeleteOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.fetchSize, this.readTimeout,
|
||||
return new DeleteOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.pageSize, this.timeout,
|
||||
this.ttl, this.timestamp, this.ifExists, this.ifCondition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.springframework.data.cassandra.core.cql.WriteOptions;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.RetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
|
||||
|
||||
/**
|
||||
* Extension to {@link WriteOptions} for use with {@code INSERT} operations.
|
||||
@@ -124,7 +124,7 @@ public class InsertOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#consistencyLevel(com.datastax.driver.core.ConsistencyLevel)
|
||||
*/
|
||||
@Override
|
||||
public InsertOptionsBuilder consistencyLevel(com.datastax.driver.core.ConsistencyLevel consistencyLevel) {
|
||||
public InsertOptionsBuilder consistencyLevel(ConsistencyLevel consistencyLevel) {
|
||||
|
||||
super.consistencyLevel(consistencyLevel);
|
||||
return this;
|
||||
@@ -134,7 +134,8 @@ public class InsertOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#retryPolicy(com.datastax.driver.core.policies.RetryPolicy)
|
||||
*/
|
||||
@Override
|
||||
public InsertOptionsBuilder retryPolicy(com.datastax.driver.core.policies.RetryPolicy driverRetryPolicy) {
|
||||
@Deprecated
|
||||
public InsertOptionsBuilder retryPolicy(RetryPolicy driverRetryPolicy) {
|
||||
|
||||
super.retryPolicy(driverRetryPolicy);
|
||||
return this;
|
||||
@@ -144,14 +145,24 @@ public class InsertOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#fetchSize(int)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public InsertOptionsBuilder fetchSize(int fetchSize) {
|
||||
return (InsertOptionsBuilder) super.fetchSize(fetchSize);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#pageSize(int)
|
||||
*/
|
||||
@Override
|
||||
public InsertOptionsBuilder pageSize(int pageSize) {
|
||||
return (InsertOptionsBuilder) super.pageSize(pageSize);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(long)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public InsertOptionsBuilder readTimeout(long readTimeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
@@ -173,9 +184,9 @@ public class InsertOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(java.time.Duration)
|
||||
*/
|
||||
@Override
|
||||
public InsertOptionsBuilder readTimeout(Duration readTimeout) {
|
||||
public InsertOptionsBuilder timeout(Duration timeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
super.timeout(timeout);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -295,7 +306,7 @@ public class InsertOptions extends WriteOptions {
|
||||
* @return a new {@link InsertOptions} with the configured values
|
||||
*/
|
||||
public InsertOptions build() {
|
||||
return new InsertOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.fetchSize, this.readTimeout,
|
||||
return new InsertOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.pageSize, this.timeout,
|
||||
this.ttl, this.timestamp, this.ifNotExists, this.insertNulls);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ import org.springframework.data.cassandra.core.query.Filter;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.RetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
|
||||
|
||||
/**
|
||||
* Extension to {@link WriteOptions} for use with {@code UPDATE} operations.
|
||||
@@ -128,7 +128,7 @@ public class UpdateOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#consistencyLevel(com.datastax.driver.core.ConsistencyLevel)
|
||||
*/
|
||||
@Override
|
||||
public UpdateOptionsBuilder consistencyLevel(com.datastax.driver.core.ConsistencyLevel consistencyLevel) {
|
||||
public UpdateOptionsBuilder consistencyLevel(ConsistencyLevel consistencyLevel) {
|
||||
|
||||
super.consistencyLevel(consistencyLevel);
|
||||
return this;
|
||||
@@ -138,7 +138,8 @@ public class UpdateOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#retryPolicy(com.datastax.driver.core.policies.RetryPolicy)
|
||||
*/
|
||||
@Override
|
||||
public UpdateOptionsBuilder retryPolicy(com.datastax.driver.core.policies.RetryPolicy driverRetryPolicy) {
|
||||
@Deprecated
|
||||
public UpdateOptionsBuilder retryPolicy(RetryPolicy driverRetryPolicy) {
|
||||
|
||||
super.retryPolicy(driverRetryPolicy);
|
||||
return this;
|
||||
@@ -148,16 +149,28 @@ public class UpdateOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#fetchSize(int)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public UpdateOptionsBuilder fetchSize(int fetchSize) {
|
||||
|
||||
super.fetchSize(fetchSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#pageSize(int)
|
||||
*/
|
||||
@Override
|
||||
public UpdateOptionsBuilder pageSize(int pageSize) {
|
||||
|
||||
super.pageSize(pageSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(long)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public UpdateOptionsBuilder readTimeout(long readTimeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
@@ -179,9 +192,9 @@ public class UpdateOptions extends WriteOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.WriteOptions.WriteOptionsBuilder#readTimeout(java.time.Duration)
|
||||
*/
|
||||
@Override
|
||||
public UpdateOptionsBuilder readTimeout(Duration readTimeout) {
|
||||
public UpdateOptionsBuilder timeout(Duration timeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
super.timeout(timeout);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -307,7 +320,7 @@ public class UpdateOptions extends WriteOptions {
|
||||
*/
|
||||
public UpdateOptions build() {
|
||||
|
||||
return new UpdateOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.fetchSize, this.readTimeout,
|
||||
return new UpdateOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.pageSize, this.timeout,
|
||||
this.ttl, this.timestamp, this.ifExists, this.ifCondition);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,8 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.SocketOptions;
|
||||
import com.datastax.driver.core.policies.RetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
|
||||
|
||||
/**
|
||||
* Cassandra Query Options for queries. {@link QueryOptions} allow tuning of various query options on a per-request
|
||||
@@ -45,7 +44,7 @@ public class QueryOptions {
|
||||
|
||||
private final Duration readTimeout;
|
||||
|
||||
private final @Nullable Integer fetchSize;
|
||||
private final @Nullable Integer pageSize;
|
||||
|
||||
private final @Nullable RetryPolicy retryPolicy;
|
||||
|
||||
@@ -55,7 +54,7 @@ public class QueryOptions {
|
||||
this.consistencyLevel = consistencyLevel;
|
||||
this.retryPolicy = retryPolicy;
|
||||
this.tracing = tracing;
|
||||
this.fetchSize = fetchSize;
|
||||
this.pageSize = fetchSize;
|
||||
this.readTimeout = readTimeout;
|
||||
}
|
||||
|
||||
@@ -72,7 +71,7 @@ public class QueryOptions {
|
||||
this.consistencyLevel = consistencyLevel;
|
||||
this.retryPolicy = retryPolicy;
|
||||
this.tracing = false;
|
||||
this.fetchSize = null;
|
||||
this.pageSize = null;
|
||||
this.readTimeout = Duration.ofMillis(-1);
|
||||
}
|
||||
|
||||
@@ -120,8 +119,8 @@ public class QueryOptions {
|
||||
* @since 1.5
|
||||
*/
|
||||
@Nullable
|
||||
protected Integer getFetchSize() {
|
||||
return this.fetchSize;
|
||||
protected Integer getPageSize() {
|
||||
return this.pageSize;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,9 +160,9 @@ public class QueryOptions {
|
||||
|
||||
protected @Nullable ConsistencyLevel consistencyLevel;
|
||||
|
||||
protected Duration readTimeout = Duration.ofMillis(-1);
|
||||
protected Duration timeout = Duration.ofMillis(-1);
|
||||
|
||||
protected @Nullable Integer fetchSize;
|
||||
protected @Nullable Integer pageSize;
|
||||
|
||||
protected @Nullable RetryPolicy retryPolicy;
|
||||
|
||||
@@ -172,8 +171,8 @@ public class QueryOptions {
|
||||
QueryOptionsBuilder(QueryOptions queryOptions) {
|
||||
|
||||
this.consistencyLevel = queryOptions.consistencyLevel;
|
||||
this.fetchSize = queryOptions.fetchSize;
|
||||
this.readTimeout = queryOptions.readTimeout;
|
||||
this.pageSize = queryOptions.pageSize;
|
||||
this.timeout = queryOptions.readTimeout;
|
||||
this.retryPolicy = queryOptions.retryPolicy;
|
||||
this.tracing = queryOptions.tracing;
|
||||
}
|
||||
@@ -199,7 +198,9 @@ public class QueryOptions {
|
||||
*
|
||||
* @param retryPolicy must not be {@literal null}.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @deprecated since 3.0, use execution profiles instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public QueryOptionsBuilder retryPolicy(RetryPolicy retryPolicy) {
|
||||
|
||||
Assert.notNull(retryPolicy, "RetryPolicy must not be null");
|
||||
@@ -210,7 +211,7 @@ public class QueryOptions {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the query fetch size for {@link com.datastax.driver.core.ResultSet} chunks.
|
||||
* Sets the query fetch size for {@link com.datastax.oss.driver.api.core.cql.ResultSet} chunks.
|
||||
* <p>
|
||||
* The fetch size controls how much resulting rows will be retrieved simultaneously (the goal being to avoid loading
|
||||
* too much results in memory for queries yielding large results). Please note that while value as low as 1 can be
|
||||
@@ -219,14 +220,29 @@ public class QueryOptions {
|
||||
* @param fetchSize the number of rows to fetch per chunking request. To disable chunking of the result set, use
|
||||
* {@code fetchSize == Integer.MAX_VALUE}. Negative values are not allowed.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @see com.datastax.driver.core.QueryOptions#getFetchSize()
|
||||
* @see com.datastax.driver.core.Cluster.Builder#withQueryOptions(com.datastax.driver.core.QueryOptions)
|
||||
* @deprecated since 3.0, use {@link #pageSize(int)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public QueryOptionsBuilder fetchSize(int fetchSize) {
|
||||
return pageSize(fetchSize);
|
||||
}
|
||||
|
||||
Assert.isTrue(fetchSize >= 0, "FetchSize must be greater than equal to zero");
|
||||
/**
|
||||
* Sets the query fetch size for {@link com.datastax.oss.driver.api.core.cql.ResultSet} chunks.
|
||||
* <p>
|
||||
* The fetch size controls how much resulting rows will be retrieved simultaneously (the goal being to avoid loading
|
||||
* too much results in memory for queries yielding large results). Please note that while value as low as 1 can be
|
||||
* used, it is *highly* discouraged to use such a low value in practice as it will yield very poor performance.
|
||||
*
|
||||
* @param pageSize the number of rows to fetch per chunking request. To disable chunking of the result set, use
|
||||
* {@code pageSize == Integer.MAX_VALUE}. Negative values are not allowed.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
*/
|
||||
public QueryOptionsBuilder pageSize(int pageSize) {
|
||||
|
||||
this.fetchSize = fetchSize;
|
||||
Assert.isTrue(pageSize >= 0, "Page size must be greater than equal to zero");
|
||||
|
||||
this.pageSize = pageSize;
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -237,11 +253,12 @@ public class QueryOptions {
|
||||
* @param readTimeout the read timeout in milliseconds. Negative values are not allowed. If it is {@code 0}, the
|
||||
* read timeout will be disabled for this statement.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @see SocketOptions#getReadTimeoutMillis()
|
||||
* @see com.datastax.driver.core.Cluster.Builder#withSocketOptions(SocketOptions)
|
||||
* @see com.datastax.oss.driver.api.core.cql.SimpleStatement#setTimeout(Duration)
|
||||
* @deprecated since 3.0, use {@link #timeout(Duration)}
|
||||
*/
|
||||
@Deprecated
|
||||
public QueryOptionsBuilder readTimeout(long readTimeout) {
|
||||
return readTimeout(Duration.ofMillis(readTimeout));
|
||||
return timeout(Duration.ofMillis(readTimeout));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -251,9 +268,8 @@ public class QueryOptions {
|
||||
* will be disabled for this statement.
|
||||
* @param timeUnit the {@link TimeUnit} for the supplied timeout; must not be {@literal null}.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @see SocketOptions#getReadTimeoutMillis()
|
||||
* @see com.datastax.driver.core.Cluster.Builder#withSocketOptions(SocketOptions)
|
||||
* @deprecated since 2.0, use {@link #readTimeout(Duration)}.
|
||||
* @see com.datastax.oss.driver.api.core.cql.SimpleStatement#setTimeout(Duration)
|
||||
* @deprecated since 2.0, use {@link #timeout(Duration)}.
|
||||
*/
|
||||
@Deprecated
|
||||
public QueryOptionsBuilder readTimeout(long readTimeout, TimeUnit timeUnit) {
|
||||
@@ -261,7 +277,7 @@ public class QueryOptions {
|
||||
Assert.isTrue(readTimeout >= 0, "ReadTimeout must be greater than equal to zero");
|
||||
Assert.notNull(timeUnit, "TimeUnit must not be null");
|
||||
|
||||
return readTimeout(Duration.ofMillis(timeUnit.toMillis(readTimeout)));
|
||||
return timeout(Duration.ofMillis(timeUnit.toMillis(readTimeout)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -270,16 +286,35 @@ public class QueryOptions {
|
||||
* @param readTimeout the read timeout. Negative values are not allowed. If it is {@code 0}, the read timeout will
|
||||
* be disabled for this statement.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @see SocketOptions#getReadTimeoutMillis()
|
||||
* @see com.datastax.driver.core.Cluster.Builder#withSocketOptions(SocketOptions)
|
||||
* @see com.datastax.oss.driver.api.core.cql.SimpleStatement#setTimeout(Duration)
|
||||
* @since 2.0
|
||||
* @deprecated since 3.0, use {@link #timeout(Duration)}
|
||||
*/
|
||||
@Deprecated
|
||||
public QueryOptionsBuilder readTimeout(Duration readTimeout) {
|
||||
|
||||
Assert.isTrue(!readTimeout.isZero() && !readTimeout.isNegative(),
|
||||
"ReadTimeout must be greater than equal to zero");
|
||||
|
||||
this.readTimeout = readTimeout;
|
||||
this.timeout = readTimeout;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the request timeout. Overrides the default timeout.
|
||||
*
|
||||
* @param timeout the read timeout. Negative values are not allowed. If it is {@code 0}, the read timeout will be
|
||||
* disabled for this statement.
|
||||
* @return {@code this} {@link QueryOptionsBuilder}
|
||||
* @see com.datastax.oss.driver.api.core.cql.SimpleStatement#setTimeout(Duration)
|
||||
* @since 3.0
|
||||
*/
|
||||
public QueryOptionsBuilder timeout(Duration timeout) {
|
||||
|
||||
Assert.isTrue(!timeout.isZero() && !timeout.isNegative(), "ReadTimeout must be greater than equal to zero");
|
||||
|
||||
this.timeout = timeout;
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -312,7 +347,7 @@ public class QueryOptions {
|
||||
* @return a new {@link QueryOptions} with the configured values
|
||||
*/
|
||||
public QueryOptions build() {
|
||||
return new QueryOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.fetchSize, this.readTimeout);
|
||||
return new QueryOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.pageSize, this.timeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,12 +17,11 @@ package org.springframework.data.cassandra.core.cql;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.datastax.driver.core.PreparedStatement;
|
||||
import com.datastax.driver.core.Statement;
|
||||
import com.datastax.driver.core.querybuilder.Delete;
|
||||
import com.datastax.driver.core.querybuilder.Insert;
|
||||
import com.datastax.driver.core.querybuilder.QueryBuilder;
|
||||
import com.datastax.driver.core.querybuilder.Update;
|
||||
import com.datastax.oss.driver.api.core.cql.SimpleStatementBuilder;
|
||||
import com.datastax.oss.driver.api.core.cql.Statement;
|
||||
import com.datastax.oss.driver.api.querybuilder.delete.Delete;
|
||||
import com.datastax.oss.driver.api.querybuilder.insert.Insert;
|
||||
import com.datastax.oss.driver.api.querybuilder.update.Update;
|
||||
|
||||
/**
|
||||
* Utility class to associate {@link QueryOptions} and {@link WriteOptions} with QueryBuilder {@link Statement}s.
|
||||
@@ -33,27 +32,6 @@ import com.datastax.driver.core.querybuilder.Update;
|
||||
*/
|
||||
public abstract class QueryOptionsUtil {
|
||||
|
||||
/**
|
||||
* Add common {@link QueryOptions} to Cassandra {@link PreparedStatement}s.
|
||||
*
|
||||
* @param preparedStatement the Cassandra {@link PreparedStatement}, must not be {@literal null}.
|
||||
* @param queryOptions query options (e.g. consistency level) to add to the Cassandra {@link PreparedStatement}.
|
||||
*/
|
||||
public static PreparedStatement addPreparedStatementOptions(PreparedStatement preparedStatement,
|
||||
QueryOptions queryOptions) {
|
||||
|
||||
Assert.notNull(preparedStatement, "PreparedStatement must not be null");
|
||||
|
||||
if (queryOptions.getConsistencyLevel() != null) {
|
||||
preparedStatement.setConsistencyLevel(queryOptions.getConsistencyLevel());
|
||||
}
|
||||
if (queryOptions.getRetryPolicy() != null) {
|
||||
preparedStatement.setRetryPolicy(queryOptions.getRetryPolicy());
|
||||
}
|
||||
|
||||
return preparedStatement;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add common {@link QueryOptions} to all types of queries.
|
||||
*
|
||||
@@ -61,35 +39,68 @@ public abstract class QueryOptionsUtil {
|
||||
* @param queryOptions query options (e.g. consistency level) to add to the CQL statement.
|
||||
* @return the given {@link Statement}.
|
||||
*/
|
||||
public static <T extends Statement> T addQueryOptions(T statement, QueryOptions queryOptions) {
|
||||
public static <T extends Statement<?>> T addQueryOptions(T statement, QueryOptions queryOptions) {
|
||||
|
||||
Assert.notNull(statement, "Statement must not be null");
|
||||
Statement<?> statementToUse = statement;
|
||||
|
||||
if (queryOptions.getConsistencyLevel() != null) {
|
||||
statement.setConsistencyLevel(queryOptions.getConsistencyLevel());
|
||||
statementToUse = statementToUse.setConsistencyLevel(queryOptions.getConsistencyLevel());
|
||||
}
|
||||
|
||||
if (queryOptions.getRetryPolicy() != null) {
|
||||
statement.setRetryPolicy(queryOptions.getRetryPolicy());
|
||||
}
|
||||
|
||||
if (queryOptions.getFetchSize() != null) {
|
||||
statement.setFetchSize(queryOptions.getFetchSize());
|
||||
if (queryOptions.getPageSize() != null) {
|
||||
statementToUse = statementToUse.setPageSize(queryOptions.getPageSize());
|
||||
}
|
||||
|
||||
if (!queryOptions.getReadTimeout().isNegative()) {
|
||||
statement.setReadTimeoutMillis(Math.toIntExact(queryOptions.getReadTimeout().toMillis()));
|
||||
statementToUse = statementToUse.setTimeout(queryOptions.getReadTimeout());
|
||||
}
|
||||
|
||||
if (queryOptions.getTracing() != null) {
|
||||
if (queryOptions.getTracing()) {
|
||||
statement.enableTracing();
|
||||
statementToUse = statementToUse.setTracing(true);
|
||||
} else {
|
||||
statement.disableTracing();
|
||||
statementToUse = statementToUse.setTracing(false);
|
||||
}
|
||||
}
|
||||
|
||||
return statement;
|
||||
return (T) statementToUse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add common {@link QueryOptions} to all types of queries.
|
||||
*
|
||||
* @param statement a {@link SimpleStatementBuilder}, must not be {@literal null}.
|
||||
* @param queryOptions query options (e.g. consistency level) to add to the CQL statement.
|
||||
*/
|
||||
public static void addQueryOptions(SimpleStatementBuilder statementBuilder, QueryOptions queryOptions) {
|
||||
|
||||
Assert.notNull(statementBuilder, "SimpleStatementBuilder must not be null");
|
||||
|
||||
if (queryOptions.getConsistencyLevel() != null) {
|
||||
statementBuilder.setConsistencyLevel(queryOptions.getConsistencyLevel());
|
||||
}
|
||||
|
||||
// TODO:
|
||||
/*if (queryOptions.getRetryPolicy() != null) {
|
||||
statementToUse = statementToUse.setRetryPolicy(queryOptions.getRetryPolicy());
|
||||
} */
|
||||
|
||||
if (queryOptions.getPageSize() != null) {
|
||||
statementBuilder.setPageSize(queryOptions.getPageSize());
|
||||
}
|
||||
|
||||
if (!queryOptions.getReadTimeout().isNegative()) {
|
||||
statementBuilder.setTimeout(queryOptions.getReadTimeout());
|
||||
}
|
||||
|
||||
if (queryOptions.getTracing() != null) {
|
||||
if (queryOptions.getTracing()) {
|
||||
statementBuilder.setTracing(true);
|
||||
} else {
|
||||
statementBuilder.setTracing(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,18 +113,19 @@ public abstract class QueryOptionsUtil {
|
||||
public static Insert addWriteOptions(Insert insert, WriteOptions writeOptions) {
|
||||
|
||||
Assert.notNull(insert, "Insert must not be null");
|
||||
Assert.notNull(writeOptions, "WriteOptions must not be null");
|
||||
|
||||
addQueryOptions(insert, writeOptions);
|
||||
Insert insertToUse = insert;
|
||||
|
||||
if (!writeOptions.getTtl().isNegative()) {
|
||||
insert.using(QueryBuilder.ttl(Math.toIntExact(writeOptions.getTtl().getSeconds())));
|
||||
insertToUse = insertToUse.usingTtl(Math.toIntExact(writeOptions.getTtl().getSeconds()));
|
||||
}
|
||||
|
||||
if (writeOptions.getTimestamp() != null) {
|
||||
insert.using(QueryBuilder.timestamp(writeOptions.getTimestamp()));
|
||||
insertToUse = insertToUse.usingTimestamp(writeOptions.getTimestamp());
|
||||
}
|
||||
|
||||
return insert;
|
||||
return insertToUse;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -127,12 +139,9 @@ public abstract class QueryOptionsUtil {
|
||||
public static Delete addWriteOptions(Delete delete, WriteOptions writeOptions) {
|
||||
|
||||
Assert.notNull(delete, "Delete must not be null");
|
||||
Assert.notNull(writeOptions, "WriteOptions must not be null");
|
||||
|
||||
addQueryOptions(delete, writeOptions);
|
||||
|
||||
if (writeOptions.getTimestamp() != null) {
|
||||
delete.using(QueryBuilder.timestamp(writeOptions.getTimestamp()));
|
||||
}
|
||||
// TODO: Timestamp? TTL
|
||||
|
||||
return delete;
|
||||
}
|
||||
@@ -147,15 +156,9 @@ public abstract class QueryOptionsUtil {
|
||||
public static Update addWriteOptions(Update update, WriteOptions writeOptions) {
|
||||
|
||||
Assert.notNull(update, "Update must not be null");
|
||||
Assert.notNull(writeOptions, "WriteOptions must not be null");
|
||||
|
||||
addQueryOptions(update, writeOptions);
|
||||
|
||||
if (!writeOptions.getTtl().isNegative()) {
|
||||
update.using(QueryBuilder.ttl(Math.toIntExact(writeOptions.getTtl().getSeconds())));
|
||||
}
|
||||
if (writeOptions.getTimestamp() != null) {
|
||||
update.using(QueryBuilder.timestamp(writeOptions.getTimestamp()));
|
||||
}
|
||||
// TODO: Timestamp, TTL?
|
||||
|
||||
return update;
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ import java.util.concurrent.TimeUnit;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.RetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.ConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.retry.RetryPolicy;
|
||||
|
||||
/**
|
||||
* Cassandra Write Options are an extension to {@link QueryOptions} for write operations. {@link WriteOptions}allow
|
||||
@@ -157,17 +157,18 @@ public class WriteOptions extends QueryOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#consistencyLevel(com.datastax.driver.core.ConsistencyLevel)
|
||||
*/
|
||||
@Override
|
||||
public WriteOptionsBuilder consistencyLevel(com.datastax.driver.core.ConsistencyLevel consistencyLevel) {
|
||||
public WriteOptionsBuilder consistencyLevel(ConsistencyLevel consistencyLevel) {
|
||||
|
||||
super.consistencyLevel(consistencyLevel);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#retryPolicy(org.springframework.data.cassandra.core.cql.RetryPolicy)
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#retryPolicy(com.datastax.oss.driver.api.core.retry.RetryPolicy)
|
||||
*/
|
||||
@Override
|
||||
public WriteOptionsBuilder retryPolicy(com.datastax.driver.core.policies.RetryPolicy driverRetryPolicy) {
|
||||
@Deprecated
|
||||
public WriteOptionsBuilder retryPolicy(RetryPolicy driverRetryPolicy) {
|
||||
|
||||
super.retryPolicy(driverRetryPolicy);
|
||||
return this;
|
||||
@@ -177,9 +178,20 @@ public class WriteOptions extends QueryOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#fetchSize(int)
|
||||
*/
|
||||
@Override
|
||||
public WriteOptionsBuilder fetchSize(int fetchSize) {
|
||||
@Deprecated
|
||||
public WriteOptionsBuilder fetchSize(int pageSize) {
|
||||
|
||||
super.fetchSize(fetchSize);
|
||||
super.fetchSize(pageSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#pageSize(int)
|
||||
*/
|
||||
@Override
|
||||
public WriteOptionsBuilder pageSize(int pageSize) {
|
||||
|
||||
super.pageSize(pageSize);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -187,6 +199,7 @@ public class WriteOptions extends QueryOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#readTimeout(long)
|
||||
*/
|
||||
@Override
|
||||
@Deprecated
|
||||
public WriteOptionsBuilder readTimeout(long readTimeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
@@ -208,9 +221,9 @@ public class WriteOptions extends QueryOptions {
|
||||
* @see org.springframework.data.cassandra.core.cql.QueryOptions.QueryOptionsBuilder#readTimeout(java.time.Duration)
|
||||
*/
|
||||
@Override
|
||||
public WriteOptionsBuilder readTimeout(Duration readTimeout) {
|
||||
public WriteOptionsBuilder timeout(Duration timeout) {
|
||||
|
||||
super.readTimeout(readTimeout);
|
||||
super.timeout(timeout);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -305,7 +318,7 @@ public class WriteOptions extends QueryOptions {
|
||||
* @return a new {@link WriteOptions} with the configured values
|
||||
*/
|
||||
public WriteOptions build() {
|
||||
return new WriteOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.fetchSize, this.readTimeout,
|
||||
return new WriteOptions(this.consistencyLevel, this.retryPolicy, this.tracing, this.pageSize, this.timeout,
|
||||
this.ttl, this.timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,17 +15,13 @@
|
||||
*/
|
||||
package org.springframework.data.cassandra.core.cql;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.DefaultRetryPolicy;
|
||||
import com.datastax.driver.core.policies.DowngradingConsistencyRetryPolicy;
|
||||
import com.datastax.driver.core.policies.FallthroughRetryPolicy;
|
||||
import com.datastax.driver.core.policies.LoggingRetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link QueryOptions}.
|
||||
@@ -37,62 +33,30 @@ public class QueryOptionsUnitTests {
|
||||
@Test // DATACASS-202
|
||||
public void buildQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder()
|
||||
.consistencyLevel(ConsistencyLevel.ANY)
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.readTimeout(Duration.ofSeconds(1))
|
||||
.fetchSize(10)
|
||||
.tracing(true)
|
||||
.build();
|
||||
QueryOptions queryOptions = QueryOptions.builder().consistencyLevel(DefaultConsistencyLevel.ANY)
|
||||
.timeout(Duration.ofSeconds(1)).pageSize(10).tracing(true).build();
|
||||
|
||||
assertThat(queryOptions.getClass()).isEqualTo(QueryOptions.class);
|
||||
assertThat(queryOptions.getRetryPolicy()).isEqualTo(FallthroughRetryPolicy.INSTANCE);
|
||||
assertThat(queryOptions.getConsistencyLevel()).isEqualTo(ConsistencyLevel.ANY);
|
||||
assertThat(queryOptions.getConsistencyLevel()).isEqualTo(DefaultConsistencyLevel.ANY);
|
||||
assertThat(queryOptions.getReadTimeout()).isEqualTo(Duration.ofSeconds(1));
|
||||
assertThat(queryOptions.getFetchSize()).isEqualTo(10);
|
||||
assertThat(queryOptions.getPageSize()).isEqualTo(10);
|
||||
assertThat(queryOptions.getTracing()).isTrue();
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void buildQueryOptionsWithDriverRetryPolicy() {
|
||||
|
||||
QueryOptions writeOptions = QueryOptions.builder()
|
||||
.retryPolicy(new LoggingRetryPolicy(DefaultRetryPolicy.INSTANCE))
|
||||
.build();
|
||||
|
||||
assertThat(writeOptions.getRetryPolicy()).isInstanceOf(LoggingRetryPolicy.class);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void buildQueryOptionsWithRetryPolicy() {
|
||||
|
||||
QueryOptions writeOptions = QueryOptions.builder()
|
||||
.retryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
|
||||
.build();
|
||||
|
||||
assertThat(writeOptions.getRetryPolicy()).isEqualTo(DowngradingConsistencyRetryPolicy.INSTANCE);
|
||||
}
|
||||
|
||||
@Test // DATACASS-56
|
||||
public void buildQueryOptionsMutate() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder()
|
||||
.consistencyLevel(ConsistencyLevel.ANY)
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.readTimeout(Duration.ofSeconds(1))
|
||||
.fetchSize(10)
|
||||
.tracing(true)
|
||||
.build();
|
||||
QueryOptions queryOptions = QueryOptions.builder().consistencyLevel(DefaultConsistencyLevel.ANY)
|
||||
.timeout(Duration.ofSeconds(1)).pageSize(10).tracing(true).build();
|
||||
|
||||
QueryOptions mutated = queryOptions.mutate().readTimeout(Duration.ofSeconds(5)).build();
|
||||
QueryOptions mutated = queryOptions.mutate().timeout(Duration.ofSeconds(5)).build();
|
||||
|
||||
assertThat(mutated).isNotNull();
|
||||
assertThat(mutated).isNotSameAs(queryOptions);
|
||||
assertThat(mutated.getClass()).isEqualTo(QueryOptions.class);
|
||||
assertThat(mutated.getRetryPolicy()).isEqualTo(FallthroughRetryPolicy.INSTANCE);
|
||||
assertThat(mutated.getConsistencyLevel()).isEqualTo(ConsistencyLevel.ANY);
|
||||
assertThat(mutated.getConsistencyLevel()).isEqualTo(DefaultConsistencyLevel.ANY);
|
||||
assertThat(mutated.getReadTimeout()).isEqualTo(Duration.ofSeconds(5));
|
||||
assertThat(mutated.getFetchSize()).isEqualTo(10);
|
||||
assertThat(mutated.getPageSize()).isEqualTo(10);
|
||||
assertThat(mutated.getTracing()).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,23 +17,16 @@ package org.springframework.data.cassandra.core.cql;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.PreparedStatement;
|
||||
import com.datastax.driver.core.Session;
|
||||
import com.datastax.driver.core.Statement;
|
||||
import com.datastax.driver.core.policies.FallthroughRetryPolicy;
|
||||
import com.datastax.driver.core.querybuilder.Delete;
|
||||
import com.datastax.driver.core.querybuilder.Insert;
|
||||
import com.datastax.driver.core.querybuilder.Update;
|
||||
import com.datastax.driver.core.querybuilder.Using;
|
||||
import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
|
||||
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link QueryOptionsUtil}.
|
||||
@@ -42,65 +35,20 @@ import com.datastax.driver.core.querybuilder.Using;
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@SuppressWarnings("unchecked")
|
||||
public class QueryOptionsUtilUnitTests {
|
||||
|
||||
@Mock Insert mockInsert;
|
||||
@Mock PreparedStatement mockPreparedStatement;
|
||||
@Mock Session mockSession;
|
||||
@Mock Statement mockStatement;
|
||||
@Mock Update mockUpdate;
|
||||
@Mock Delete mockDelete;
|
||||
@Mock(stubOnly = true) SimpleStatement simpleStatement;
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addPreparedStatementOptionsShouldAddDriverQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder() //
|
||||
.consistencyLevel(ConsistencyLevel.EACH_QUORUM) //
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE) //
|
||||
.consistencyLevel(DefaultConsistencyLevel.EACH_QUORUM) //
|
||||
.build();
|
||||
|
||||
QueryOptionsUtil.addPreparedStatementOptions(mockPreparedStatement, queryOptions);
|
||||
QueryOptionsUtil.addQueryOptions(simpleStatement, queryOptions);
|
||||
|
||||
verify(mockPreparedStatement).setConsistencyLevel(ConsistencyLevel.EACH_QUORUM);
|
||||
verify(mockPreparedStatement).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addPreparedStatementOptionsShouldAddOurQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder().retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.consistencyLevel(ConsistencyLevel.LOCAL_QUORUM).build();
|
||||
|
||||
QueryOptionsUtil.addPreparedStatementOptions(mockPreparedStatement, queryOptions);
|
||||
|
||||
verify(mockPreparedStatement).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
verify(mockPreparedStatement).setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addStatementQueryOptionsShouldAddDriverQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder().consistencyLevel(ConsistencyLevel.EACH_QUORUM) //
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE) //
|
||||
.build();
|
||||
|
||||
QueryOptionsUtil.addQueryOptions(mockStatement, queryOptions);
|
||||
|
||||
verify(mockStatement).setConsistencyLevel(ConsistencyLevel.EACH_QUORUM);
|
||||
verify(mockStatement).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addStatementQueryOptionsShouldAddOurQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder().retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.consistencyLevel(ConsistencyLevel.LOCAL_QUORUM).build();
|
||||
|
||||
QueryOptionsUtil.addQueryOptions(mockStatement, queryOptions);
|
||||
|
||||
verify(mockStatement).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
verify(mockStatement).setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
|
||||
verify(simpleStatement).setConsistencyLevel(DefaultConsistencyLevel.EACH_QUORUM);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
@@ -108,76 +56,24 @@ public class QueryOptionsUtilUnitTests {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder().build();
|
||||
|
||||
QueryOptionsUtil.addQueryOptions(mockStatement, queryOptions);
|
||||
QueryOptionsUtil.addQueryOptions(simpleStatement, queryOptions);
|
||||
|
||||
verifyZeroInteractions(mockStatement);
|
||||
verifyNoInteractions(simpleStatement);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addStatementQueryOptionsShouldAddGenericQueryOptions() {
|
||||
|
||||
QueryOptions queryOptions = QueryOptions.builder() //
|
||||
.fetchSize(10) //
|
||||
.pageSize(10) //
|
||||
.readTimeout(1, TimeUnit.MINUTES) //
|
||||
.withTracing() //
|
||||
.build();
|
||||
|
||||
QueryOptionsUtil.addQueryOptions(mockStatement, queryOptions);
|
||||
QueryOptionsUtil.addQueryOptions(simpleStatement, queryOptions);
|
||||
|
||||
verify(mockStatement).setReadTimeoutMillis(60 * 1000);
|
||||
verify(mockStatement).setFetchSize(10);
|
||||
verify(mockStatement).enableTracing();
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addInsertWriteOptionsShouldAddDriverQueryOptions() {
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder() //
|
||||
.consistencyLevel(ConsistencyLevel.EACH_QUORUM) //
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE) //
|
||||
.readTimeout(10) //
|
||||
.ttl(10) //
|
||||
.build();
|
||||
|
||||
QueryOptionsUtil.addWriteOptions(mockInsert, writeOptions);
|
||||
|
||||
verify(mockInsert).setConsistencyLevel(ConsistencyLevel.EACH_QUORUM);
|
||||
verify(mockInsert).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
verify(mockInsert).setReadTimeoutMillis(10);
|
||||
verify(mockInsert).using(Mockito.any(Using.class));
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void addUpdateWriteOptionsShouldAddDriverQueryOptions() {
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder() //
|
||||
.consistencyLevel(ConsistencyLevel.EACH_QUORUM) //
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE) //
|
||||
.ttl(10) //
|
||||
.tracing(false).build();
|
||||
|
||||
QueryOptionsUtil.addWriteOptions(mockUpdate, writeOptions);
|
||||
|
||||
verify(mockUpdate).setConsistencyLevel(ConsistencyLevel.EACH_QUORUM);
|
||||
verify(mockUpdate).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
verify(mockUpdate).using(Mockito.any(Using.class));
|
||||
verify(mockUpdate).disableTracing();
|
||||
}
|
||||
|
||||
@Test // DATACASS-155
|
||||
public void addDeleteWriteOptionsShouldAddDriverQueryOptions() {
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder() //
|
||||
.consistencyLevel(ConsistencyLevel.EACH_QUORUM) //
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE) //
|
||||
.timestamp(42) //
|
||||
.tracing(false).build();
|
||||
|
||||
QueryOptionsUtil.addWriteOptions(mockDelete, writeOptions);
|
||||
|
||||
verify(mockDelete).setConsistencyLevel(ConsistencyLevel.EACH_QUORUM);
|
||||
verify(mockDelete).setRetryPolicy(FallthroughRetryPolicy.INSTANCE);
|
||||
verify(mockDelete).using(Mockito.any(Using.class));
|
||||
verify(mockDelete).disableTracing();
|
||||
verify(simpleStatement).setTimeout(Duration.ofMinutes(1));
|
||||
verify(simpleStatement).setPageSize(10);
|
||||
verify(simpleStatement).setTracing(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package org.springframework.data.cassandra.core.cql;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
@@ -24,9 +24,7 @@ import java.time.ZoneOffset;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.datastax.driver.core.ConsistencyLevel;
|
||||
import com.datastax.driver.core.policies.DowngradingConsistencyRetryPolicy;
|
||||
import com.datastax.driver.core.policies.FallthroughRetryPolicy;
|
||||
import com.datastax.oss.driver.api.core.DefaultConsistencyLevel;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link WriteOptions}.
|
||||
@@ -39,74 +37,55 @@ public class WriteOptionsUnitTests {
|
||||
public void buildWriteOptions() {
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder()
|
||||
.consistencyLevel(com.datastax.driver.core.ConsistencyLevel.ANY)
|
||||
.consistencyLevel(DefaultConsistencyLevel.ANY)
|
||||
.ttl(123)
|
||||
.timestamp(1519000753)
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.readTimeout(1)
|
||||
.fetchSize(10)
|
||||
.pageSize(10)
|
||||
.withTracing()
|
||||
.build();
|
||||
|
||||
assertThat(writeOptions.getTtl()).isEqualTo(Duration.ofSeconds(123));
|
||||
assertThat(writeOptions.getTimestamp()).isEqualTo(1519000753);
|
||||
assertThat(writeOptions.getRetryPolicy()).isEqualTo(FallthroughRetryPolicy.INSTANCE);
|
||||
assertThat(writeOptions.getConsistencyLevel()).isEqualTo(ConsistencyLevel.ANY);
|
||||
assertThat(writeOptions.getConsistencyLevel()).isEqualTo(DefaultConsistencyLevel.ANY);
|
||||
assertThat(writeOptions.getReadTimeout()).isEqualTo(Duration.ofMillis(1));
|
||||
assertThat(writeOptions.getFetchSize()).isEqualTo(10);
|
||||
assertThat(writeOptions.getPageSize()).isEqualTo(10);
|
||||
assertThat(writeOptions.getTracing()).isTrue();
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void buildReadTimeoutOptionsWriteOptions() {
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder().readTimeout(Duration.ofMinutes(1)).build();
|
||||
WriteOptions writeOptions = WriteOptions.builder().timeout(Duration.ofMinutes(1)).build();
|
||||
|
||||
assertThat(writeOptions.getReadTimeout()).isEqualTo(Duration.ofSeconds(60));
|
||||
assertThat(writeOptions.getFetchSize()).isNull();
|
||||
assertThat(writeOptions.getPageSize()).isNull();
|
||||
assertThat(writeOptions.getTracing()).isNull();
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void buildQueryOptionsWithDriverRetryPolicy() {
|
||||
|
||||
QueryOptions writeOptions = QueryOptions.builder().retryPolicy(FallthroughRetryPolicy.INSTANCE).build();
|
||||
|
||||
assertThat(writeOptions.getRetryPolicy()).isEqualTo(FallthroughRetryPolicy.INSTANCE);
|
||||
}
|
||||
|
||||
@Test // DATACASS-202
|
||||
public void buildQueryOptionsWithRetryPolicy() {
|
||||
|
||||
QueryOptions writeOptions = QueryOptions.builder().retryPolicy(FallthroughRetryPolicy.INSTANCE).build();
|
||||
|
||||
assertThat(writeOptions.getRetryPolicy()).isEqualTo(FallthroughRetryPolicy.INSTANCE);
|
||||
}
|
||||
|
||||
@Test // DATACASS-56
|
||||
public void buildWriteOptionsMutate() {
|
||||
Instant now = LocalDateTime.now().toInstant(ZoneOffset.UTC);
|
||||
|
||||
WriteOptions writeOptions = WriteOptions.builder()
|
||||
.consistencyLevel(com.datastax.driver.core.ConsistencyLevel.ANY)
|
||||
.consistencyLevel(DefaultConsistencyLevel.ANY)
|
||||
.ttl(123)
|
||||
.timestamp(now)
|
||||
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
|
||||
.readTimeout(1)
|
||||
.fetchSize(10)
|
||||
.pageSize(10)
|
||||
.withTracing()
|
||||
.build();
|
||||
|
||||
WriteOptions mutated = writeOptions.mutate().retryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE).build();
|
||||
WriteOptions mutated = writeOptions.mutate().timeout(Duration.ofMillis(100)).build();
|
||||
|
||||
assertThat(mutated).isNotNull();
|
||||
assertThat(mutated).isNotSameAs(writeOptions);
|
||||
assertThat(mutated.getTtl()).isEqualTo(Duration.ofSeconds(123));
|
||||
assertThat(mutated.getTimestamp()).isEqualTo(now.toEpochMilli() * 1000);
|
||||
assertThat(mutated.getRetryPolicy()).isEqualTo(DowngradingConsistencyRetryPolicy.INSTANCE);
|
||||
assertThat(mutated.getConsistencyLevel()).isEqualTo(ConsistencyLevel.ANY);
|
||||
assertThat(mutated.getReadTimeout()).isEqualTo(Duration.ofMillis(1));
|
||||
assertThat(mutated.getFetchSize()).isEqualTo(10);
|
||||
assertThat(mutated.getConsistencyLevel()).isEqualTo(DefaultConsistencyLevel.ANY);
|
||||
assertThat(mutated.getReadTimeout()).isEqualTo(Duration.ofMillis(100));
|
||||
assertThat(mutated.getPageSize()).isEqualTo(10);
|
||||
assertThat(mutated.getTracing()).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user