DATAKV-36

+ refactored SortQuery by adding get params as well
This commit is contained in:
Costin Leau
2011-03-07 19:51:50 +02:00
parent ea8806aa61
commit ed68913d09
5 changed files with 46 additions and 24 deletions

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -31,5 +31,7 @@ public interface SortCriterion<K> {
SortCriterion<K> alphabetical(boolean alpha);
SortCriterion<K> get(String pattern);
SortQuery<K> build();
}

View File

@@ -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();
}