DATAKV-36
+ refactored SortQuery by adding get params as well
This commit is contained in:
@@ -1954,19 +1954,15 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
|
||||
// Sort operations
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<V> sort(SortQuery<K> query) {
|
||||
return sort(query, null);
|
||||
}
|
||||
|
||||
public List<V> sort(SortQuery<K> query, String getKeyPattern) {
|
||||
return sort(query, getKeyPattern, valueSerializer);
|
||||
return sort(query, valueSerializer);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> List<T> sort(SortQuery<K> query, String getKeyPattern, RedisSerializer<T> resultSerializer) {
|
||||
public <T> List<T> sort(SortQuery<K> query, RedisSerializer<T> resultSerializer) {
|
||||
final byte[] rawKey = rawKey(query.getKey());
|
||||
final SortParameters params = convertQuery(query,
|
||||
(getKeyPattern != null ? Collections.singletonList(getKeyPattern) : null), stringSerializer);
|
||||
final SortParameters params = convertQuery(query, stringSerializer);
|
||||
|
||||
List<byte[]> vals = execute(new RedisCallback<List<byte[]>>() {
|
||||
@Override
|
||||
@@ -1978,9 +1974,9 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
return (List<T>) deserializeValues(vals, List.class, resultSerializer);
|
||||
}
|
||||
|
||||
public <T> List<T> sort(SortQuery<K> query, List<String> getKeyPattern, BulkMapper<T> bulkMapper) {
|
||||
public <T> List<T> sort(SortQuery<K> query, BulkMapper<T> bulkMapper) {
|
||||
final byte[] rawKey = rawKey(query.getKey());
|
||||
final SortParameters params = convertQuery(query, getKeyPattern, stringSerializer);
|
||||
final SortParameters params = convertQuery(query, stringSerializer);
|
||||
|
||||
List<byte[]> vals = execute(new RedisCallback<List<byte[]>>() {
|
||||
@Override
|
||||
@@ -1989,7 +1985,7 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}
|
||||
}, true);
|
||||
|
||||
int bulkSize = getKeyPattern.size();
|
||||
int bulkSize = query.getGetPattern().size();
|
||||
List<T> result = new ArrayList<T>(vals.size() / bulkSize + 1);
|
||||
|
||||
final List<byte[]> bulk = new ArrayList<byte[]>(bulkSize);
|
||||
@@ -2006,14 +2002,10 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
return result;
|
||||
}
|
||||
|
||||
public void sortAndStore(SortQuery<K> query, K storeKey) {
|
||||
sortAndStore(query, null, storeKey);
|
||||
}
|
||||
|
||||
public void sortAndStore(SortQuery<K> query, List<String> getKeyPattern, K storeKey) {
|
||||
public void sort(SortQuery<K> query, K storeKey) {
|
||||
final byte[] rawStoreKey = rawKey(storeKey);
|
||||
final byte[] rawKey = rawKey(query.getKey());
|
||||
final SortParameters params = convertQuery(query, getKeyPattern, stringSerializer);
|
||||
final SortParameters params = convertQuery(query, stringSerializer);
|
||||
|
||||
execute(new RedisCallback<Object>() {
|
||||
@Override
|
||||
@@ -2024,10 +2016,10 @@ public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperation
|
||||
}, true);
|
||||
}
|
||||
|
||||
private static <K> SortParameters convertQuery(SortQuery<K> query, List<String> getKeyPattern, RedisSerializer<String> stringSerializer) {
|
||||
private static <K> SortParameters convertQuery(SortQuery<K> query, RedisSerializer<String> stringSerializer) {
|
||||
|
||||
return new DefaultSortParameters(stringSerializer.serialize(query.getBy()), query.getLimit(), serialize(
|
||||
getKeyPattern, stringSerializer), query.getOrder(), query.isAlphabetic());
|
||||
query.getGetPattern(), stringSerializer), query.getOrder(), query.isAlphabetic());
|
||||
}
|
||||
|
||||
private static byte[][] serialize(List<String> strings, RedisSerializer<String> stringSerializer) {
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
*/
|
||||
package org.springframework.data.keyvalue.redis.core.query;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Order;
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Range;
|
||||
|
||||
@@ -25,6 +28,7 @@ class DefaultSortCriterion<K> implements SortCriterion<K> {
|
||||
|
||||
private final K key;
|
||||
private String by;
|
||||
private final List<String> getKeys = new ArrayList<String>(4);
|
||||
|
||||
private Range limit;
|
||||
private Order order;
|
||||
@@ -42,7 +46,7 @@ class DefaultSortCriterion<K> implements SortCriterion<K> {
|
||||
|
||||
@Override
|
||||
public SortQuery<K> build() {
|
||||
return new DefaultSortQuery<K>(key, by, limit, order, alpha);
|
||||
return new DefaultSortQuery<K>(key, by, limit, order, alpha, getKeys);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,6 +67,12 @@ class DefaultSortCriterion<K> implements SortCriterion<K> {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SortCriterion<K> get(String getPattern) {
|
||||
this.getKeys.add(getPattern);
|
||||
return this;
|
||||
}
|
||||
|
||||
SortCriterion<K> addBy(String keyPattern) {
|
||||
this.by = keyPattern;
|
||||
return this;
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.data.keyvalue.redis.core.query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Order;
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Range;
|
||||
|
||||
@@ -30,13 +32,15 @@ class DefaultSortQuery<K> implements SortQuery<K> {
|
||||
private final Order order;
|
||||
private final Range limit;
|
||||
private final String by;
|
||||
private final List<String> gets;
|
||||
|
||||
DefaultSortQuery(K key, String by, Range limit, Order order, Boolean alpha) {
|
||||
DefaultSortQuery(K key, String by, Range limit, Order order, Boolean alpha, List<String> gets) {
|
||||
this.key = key;
|
||||
this.by = by;
|
||||
this.limit = limit;
|
||||
this.order = order;
|
||||
this.alpha = alpha;
|
||||
this.gets = gets;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,4 +67,9 @@ class DefaultSortQuery<K> implements SortQuery<K> {
|
||||
public K getKey() {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getGetPattern() {
|
||||
return gets;
|
||||
}
|
||||
}
|
||||
@@ -31,5 +31,7 @@ public interface SortCriterion<K> {
|
||||
|
||||
SortCriterion<K> alphabetical(boolean alpha);
|
||||
|
||||
SortCriterion<K> get(String pattern);
|
||||
|
||||
SortQuery<K> build();
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package org.springframework.data.keyvalue.redis.core.query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Order;
|
||||
import org.springframework.data.keyvalue.redis.connection.SortParameters.Range;
|
||||
|
||||
@@ -48,16 +50,23 @@ public interface SortQuery<K> {
|
||||
Range getLimit();
|
||||
|
||||
/**
|
||||
* Target key for sorting.
|
||||
* Return the target key for sorting.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
K getKey();
|
||||
|
||||
/**
|
||||
* Pattern of external key used for sorting.
|
||||
* Returns the pattern of the external key used for sorting.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
String getBy();
|
||||
|
||||
/**
|
||||
* Returns the external key(s) whose values are returned by the sort.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<String> getGetPattern();
|
||||
}
|
||||
Reference in New Issue
Block a user