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