diff --git a/pom.xml b/pom.xml
index 5c74f2f735..33a1c9bd36 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
redis.clients.jedis
1.7.36
1.7.1
- 2.17.0
+ 2.17.1
3.2.5
diff --git a/src/main/java/redis/clients/jedis/CommandArguments.java b/src/main/java/redis/clients/jedis/CommandArguments.java
index b9190245ce..c630ae76de 100644
--- a/src/main/java/redis/clients/jedis/CommandArguments.java
+++ b/src/main/java/redis/clients/jedis/CommandArguments.java
@@ -1,6 +1,7 @@
package redis.clients.jedis;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@@ -29,6 +30,35 @@ public ProtocolCommand getCommand() {
return (ProtocolCommand) args.get(0);
}
+ public CommandArguments add(Rawable arg) {
+ args.add(arg);
+ return this;
+ }
+
+ public CommandArguments add(byte[] arg) {
+ return add(RawableFactory.from(arg));
+ }
+
+ public CommandArguments add(boolean arg) {
+ return add(RawableFactory.from(arg));
+ }
+
+ public CommandArguments add(int arg) {
+ return add(RawableFactory.from(arg));
+ }
+
+ public CommandArguments add(long arg) {
+ return add(RawableFactory.from(arg));
+ }
+
+ public CommandArguments add(double arg) {
+ return add(RawableFactory.from(arg));
+ }
+
+ public CommandArguments add(String arg) {
+ return add(RawableFactory.from(arg));
+ }
+
public CommandArguments add(Object arg) {
if (arg == null) {
throw new IllegalArgumentException("null is not a valid argument.");
@@ -36,12 +66,14 @@ public CommandArguments add(Object arg) {
args.add((Rawable) arg);
} else if (arg instanceof byte[]) {
args.add(RawableFactory.from((byte[]) arg));
+ } else if (arg instanceof Boolean) {
+ args.add(RawableFactory.from((Boolean) arg));
} else if (arg instanceof Integer) {
args.add(RawableFactory.from((Integer) arg));
+ } else if (arg instanceof Long) {
+ args.add(RawableFactory.from((Long) arg));
} else if (arg instanceof Double) {
args.add(RawableFactory.from((Double) arg));
- } else if (arg instanceof Boolean) {
- args.add(RawableFactory.from((Boolean) arg ? 1 : 0));
} else if (arg instanceof float[]) {
args.add(RawableFactory.from(RediSearchUtil.toByteArray((float[]) arg)));
} else if (arg instanceof String) {
@@ -87,14 +119,12 @@ public CommandArguments key(Object key) {
}
public final CommandArguments keys(Object... keys) {
- for (Object key : keys) {
- key(key);
- }
+ Arrays.stream(keys).forEach(this::key);
return this;
}
public final CommandArguments keys(Collection keys) {
- keys.forEach(key -> key(key));
+ keys.forEach(this::key);
return this;
}
diff --git a/src/main/java/redis/clients/jedis/args/RawableFactory.java b/src/main/java/redis/clients/jedis/args/RawableFactory.java
index 8bce7f0e78..813ddd021b 100644
--- a/src/main/java/redis/clients/jedis/args/RawableFactory.java
+++ b/src/main/java/redis/clients/jedis/args/RawableFactory.java
@@ -10,6 +10,15 @@
*/
public final class RawableFactory {
+ /**
+ * Get a {@link Rawable} from a {@code boolean}.
+ * @param b boolean value
+ * @return raw
+ */
+ public static Rawable from(boolean b) {
+ return from(toByteArray(b));
+ }
+
/**
* Get a {@link Rawable} from an {@code int}.
* @param i integer value
@@ -19,6 +28,15 @@ public static Rawable from(int i) {
return from(toByteArray(i));
}
+ /**
+ * Get a {@link Rawable} from a {@code long}.
+ * @param l long value
+ * @return raw
+ */
+ public static Rawable from(long l) {
+ return from(toByteArray(l));
+ }
+
/**
* Get a {@link Rawable} from a {@code double}.
* @param d numeric value
diff --git a/src/main/java/redis/clients/jedis/params/GeoSearchParam.java b/src/main/java/redis/clients/jedis/params/GeoSearchParam.java
index 9c12269c6b..6fc0ecbbff 100644
--- a/src/main/java/redis/clients/jedis/params/GeoSearchParam.java
+++ b/src/main/java/redis/clients/jedis/params/GeoSearchParam.java
@@ -115,18 +115,25 @@ public GeoSearchParam any() {
@Override
public void addParams(CommandArguments args) {
- if (this.fromMember) {
- args.add(Keyword.FROMMEMBER).add(this.member);
- } else if (this.fromLonLat) {
+ if (fromMember && fromLonLat) {
+ throw new IllegalArgumentException("Both FROMMEMBER and FROMLONLAT cannot be used.");
+ } else if (fromMember) {
+ args.add(Keyword.FROMMEMBER).add(member);
+ } else if (fromLonLat) {
args.add(Keyword.FROMLONLAT).add(coord.getLongitude()).add(coord.getLatitude());
+ } else {
+ throw new IllegalArgumentException("Either FROMMEMBER or FROMLONLAT must be used.");
}
- if (this.byRadius) {
- args.add(Keyword.BYRADIUS).add(this.radius);
- } else if (this.byBox) {
- args.add(Keyword.BYBOX).add(this.width).add(this.height);
+ if (byRadius && byBox) {
+ throw new IllegalArgumentException("Both BYRADIUS and BYBOX cannot be used.");
+ } else if (byRadius) {
+ args.add(Keyword.BYRADIUS).add(radius).add(unit);
+ } else if (byBox) {
+ args.add(Keyword.BYBOX).add(width).add(height).add(unit);
+ } else {
+ throw new IllegalArgumentException("Either BYRADIUS or BYBOX must be used.");
}
- args.add(this.unit);
if (withCoord) {
args.add(Keyword.WITHCOORD);
diff --git a/src/main/java/redis/clients/jedis/search/FTSearchParams.java b/src/main/java/redis/clients/jedis/search/FTSearchParams.java
index 1bb5597085..d2ca5d6d94 100644
--- a/src/main/java/redis/clients/jedis/search/FTSearchParams.java
+++ b/src/main/java/redis/clients/jedis/search/FTSearchParams.java
@@ -6,6 +6,7 @@
import redis.clients.jedis.CommandArguments;
import redis.clients.jedis.Protocol;
+import redis.clients.jedis.annots.Internal;
import redis.clients.jedis.args.GeoUnit;
import redis.clients.jedis.args.SortingOrder;
import redis.clients.jedis.params.IParams;
@@ -427,6 +428,7 @@ public FTSearchParams dialect(int dialect) {
* @param dialect dialect
* @return this
*/
+ @Internal
public FTSearchParams dialectOptional(int dialect) {
if (dialect != 0 && this.dialect == null) {
this.dialect = dialect;
diff --git a/src/test/java/redis/clients/jedis/commands/jedis/GeoCommandsTest.java b/src/test/java/redis/clients/jedis/commands/jedis/GeoCommandsTest.java
index 04fe32ee84..be00a4d665 100644
--- a/src/test/java/redis/clients/jedis/commands/jedis/GeoCommandsTest.java
+++ b/src/test/java/redis/clients/jedis/commands/jedis/GeoCommandsTest.java
@@ -540,30 +540,30 @@ public void geosearchNegative() {
// combine byradius and bybox
try {
jedis.geosearch("barcelona", new GeoSearchParam()
- .byRadius(3000, GeoUnit.M).byBox(300, 300, GeoUnit.M));
+ .byRadius(3000, GeoUnit.M)
+ .byBox(300, 300, GeoUnit.M));
fail();
- } catch (Exception ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// without byradius and without bybox
try {
- jedis.geosearch("barcelona", new GeoSearchParam()
- .fromMember("foobar"));
+ jedis.geosearch("barcelona", new GeoSearchParam().fromMember("foobar"));
fail();
- } catch (Exception ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// combine frommember and fromlonlat
try {
jedis.geosearch("barcelona", new GeoSearchParam()
- .fromMember("foobar").fromLonLat(10,10));
+ .fromMember("foobar")
+ .fromLonLat(10,10));
fail();
- } catch (Exception ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// without frommember and without fromlonlat
try {
- jedis.geosearch("barcelona", new GeoSearchParam()
- .byRadius(10, GeoUnit.MI));
+ jedis.geosearch("barcelona", new GeoSearchParam().byRadius(10, GeoUnit.MI));
fail();
- } catch (Exception ignored) { }
+ } catch (IllegalArgumentException ignored) { }
}
@Test
diff --git a/src/test/java/redis/clients/jedis/commands/unified/GeoCommandsTestBase.java b/src/test/java/redis/clients/jedis/commands/unified/GeoCommandsTestBase.java
index 63cd661ccb..e05a5f99cf 100644
--- a/src/test/java/redis/clients/jedis/commands/unified/GeoCommandsTestBase.java
+++ b/src/test/java/redis/clients/jedis/commands/unified/GeoCommandsTestBase.java
@@ -537,30 +537,30 @@ public void geosearchNegative() {
// combine byradius and bybox
try {
jedis.geosearch("barcelona", new GeoSearchParam()
- .byRadius(3000, GeoUnit.M).byBox(300, 300, GeoUnit.M));
+ .byRadius(3000, GeoUnit.M)
+ .byBox(300, 300, GeoUnit.M));
fail();
- } catch (redis.clients.jedis.exceptions.JedisDataException ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// without byradius and without bybox
try {
- jedis.geosearch("barcelona", new GeoSearchParam()
- .fromMember("foobar"));
+ jedis.geosearch("barcelona", new GeoSearchParam().fromMember("foobar"));
fail();
- } catch (java.lang.IllegalArgumentException ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// combine frommember and fromlonlat
try {
jedis.geosearch("barcelona", new GeoSearchParam()
- .fromMember("foobar").fromLonLat(10,10));
+ .fromMember("foobar")
+ .fromLonLat(10,10));
fail();
- } catch (java.lang.IllegalArgumentException ignored) { }
+ } catch (IllegalArgumentException ignored) { }
// without frommember and without fromlonlat
try {
- jedis.geosearch("barcelona", new GeoSearchParam()
- .byRadius(10, GeoUnit.MI));
+ jedis.geosearch("barcelona", new GeoSearchParam().byRadius(10, GeoUnit.MI));
fail();
- } catch (redis.clients.jedis.exceptions.JedisDataException ignored) { }
+ } catch (IllegalArgumentException ignored) { }
}
@Test
diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java
index 75d5902a8e..11630fa589 100644
--- a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java
+++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterGeoCommandsTest.java
@@ -84,13 +84,13 @@ public void georadiusByMemberStore() {
public void georadiusByMemberStoreBinary() {
}
- @Test
@Ignore
+ @Override
public void geosearchstore() {
}
- @Test
@Ignore
+ @Override
public void geosearchstoreWithdist() {
}
}
diff --git a/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHashesCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHashesCommandsTest.java
new file mode 100644
index 0000000000..a5590a2730
--- /dev/null
+++ b/src/test/java/redis/clients/jedis/commands/unified/cluster/ClusterHashesCommandsTest.java
@@ -0,0 +1,27 @@
+package redis.clients.jedis.commands.unified.cluster;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import redis.clients.jedis.RedisProtocol;
+import redis.clients.jedis.commands.unified.HashesCommandsTestBase;
+
+@RunWith(Parameterized.class)
+public class ClusterHashesCommandsTest extends HashesCommandsTestBase {
+
+ public ClusterHashesCommandsTest(RedisProtocol protocol) {
+ super(protocol);
+ }
+
+ @Before
+ public void setUp() {
+ jedis = ClusterCommandsTestHelper.getCleanCluster(protocol);
+ }
+
+ @After
+ public void tearDown() {
+ jedis.close();
+ ClusterCommandsTestHelper.clearClusterData();
+ }
+}
diff --git a/src/test/java/redis/clients/jedis/commands/unified/pipeline/GeoPipelineCommandsTest.java b/src/test/java/redis/clients/jedis/commands/unified/pipeline/GeoPipelineCommandsTest.java
index ccfd70bc8f..d8b7443a8f 100644
--- a/src/test/java/redis/clients/jedis/commands/unified/pipeline/GeoPipelineCommandsTest.java
+++ b/src/test/java/redis/clients/jedis/commands/unified/pipeline/GeoPipelineCommandsTest.java
@@ -798,32 +798,24 @@ public void geosearch() {
contains(0L));
}
- @Test
- public void geosearchNegative() {
- // combine byradius and bybox
- pipe.geosearch("barcelona",
- new GeoSearchParam().byRadius(3000, GeoUnit.M).byBox(300, 300, GeoUnit.M));
-
- // without frommember and without fromlonlat
- pipe.geosearch("barcelona",
- new GeoSearchParam().byRadius(10, GeoUnit.MI));
+ @Test(expected = IllegalArgumentException.class)
+ public void geosearchSearchParamCombineFromMemberAndFromLonLat() {
+ pipe.geosearch("barcelona", new GeoSearchParam().fromMember("foobar").fromLonLat(10, 10));
+ }
- assertThat(pipe.syncAndReturnAll(), contains(
- instanceOf(JedisDataException.class),
- instanceOf(JedisDataException.class)
- ));
+ @Test(expected = IllegalArgumentException.class)
+ public void geosearchSearchParamWithoutFromMemberAndFromLonLat() {
+ pipe.geosearch("barcelona", new GeoSearchParam().byRadius(10, GeoUnit.MI));
}
@Test(expected = IllegalArgumentException.class)
- public void geosearchSearchParamWithoutRadiousAndWithoutBox() {
- pipe.geosearch("barcelona",
- new GeoSearchParam().fromMember("foobar"));
+ public void geosearchSearchParamCombineByRadiousAndByBox() {
+ pipe.geosearch("barcelona", new GeoSearchParam().byRadius(3000, GeoUnit.M).byBox(300, 300, GeoUnit.M));
}
@Test(expected = IllegalArgumentException.class)
- public void geosearchSearchParamCombineMemberAndLonLat() {
- pipe.geosearch("barcelona",
- new GeoSearchParam().fromMember("foobar").fromLonLat(10, 10));
+ public void geosearchSearchParamWithoutByRadiousAndByBox() {
+ pipe.geosearch("barcelona", new GeoSearchParam().fromMember("foobar"));
}
@Test