@@ -17,25 +17,37 @@ trait SortedSetsApi extends ApiSubset {
1717
1818 /** Executes [[http://redis.io/commands/zadd ZADD ]] */
1919 def zadd (key : Key , member : Value , score : Double ): Result [Boolean ] =
20- execute(new Zadd (key, (member, score).single, emptyData = false , Opt .Empty , changed = false ).map(_ > 0 ))
20+ execute(new Zadd (key, (member, score).single, emptyData = false , Opt .Empty , Opt . Empty , changed = false ).map(_ > 0 ))
2121
2222 /** Executes [[http://redis.io/commands/zadd ZADD ]] */
2323 def zadd (key : Key , score : Double , member : Value , members : Value * ): Result [Int ] =
24- execute(new Zadd (key, (member, score) +:: members.iterator.map((_, score)), emptyData = false , Opt .Empty , changed = false ))
24+ execute(new Zadd (key, (member, score) +:: members.iterator.map((_, score)), emptyData = false , Opt .Empty , Opt . Empty , changed = false ))
2525
2626 /** Executes [[http://redis.io/commands/zadd ZADD ]]
2727 * or simply returns 0 when `members` is empty */
2828 def zadd (key : Key , score : Double , members : Iterable [Value ]): Result [Int ] =
29- execute(new Zadd (key, members.iterator.map((_, score)), members.isEmpty, Opt .Empty , changed = false ))
29+ execute(new Zadd (key, members.iterator.map((_, score)), members.isEmpty, Opt .Empty , Opt . Empty , changed = false ))
3030
3131 /** Executes [[http://redis.io/commands/zadd ZADD ]]
3232 * or simply returns 0 when `memberScores` is empty */
33- def zadd (key : Key , memberScores : Iterable [(Value , Double )], existence : OptArg [Existence ] = OptArg .Empty , changed : Boolean = false ): Result [Int ] =
34- execute(new Zadd (key, memberScores, memberScores.isEmpty, existence.toOpt, changed))
33+ def zadd (
34+ key : Key ,
35+ memberScores : Iterable [(Value , Double )],
36+ existence : OptArg [Existence ] = OptArg .Empty ,
37+ comparison : OptArg [Comparison ] = OptArg .Empty ,
38+ changed : Boolean = false
39+ ): Result [Int ] =
40+ execute(new Zadd (key, memberScores, memberScores.isEmpty, existence.toOpt, comparison.toOpt, changed))
3541
3642 /** Executes [[http://redis.io/commands/zadd ZADD ]] */
37- def zaddIncr (key : Key , member : Value , score : Double , existence : OptArg [Existence ] = OptArg .Empty ): Result [Opt [Double ]] =
38- execute(new ZaddIncr (key, member, score, existence.toOpt))
43+ def zaddIncr (
44+ key : Key ,
45+ member : Value ,
46+ score : Double ,
47+ existence : OptArg [Existence ] = OptArg .Empty ,
48+ comparison : OptArg [Comparison ] = OptArg .Empty ,
49+ ): Result [Opt [Double ]] =
50+ execute(new ZaddIncr (key, member, score, existence.toOpt, comparison.toOpt))
3951
4052 /** Executes [[http://redis.io/commands/zcard ZCARD ]] */
4153 def zcard (key : Key ): Result [Long ] =
@@ -312,21 +324,37 @@ trait SortedSetsApi extends ApiSubset {
312324 private abstract class AbstractValuesWithScoresCommand
313325 extends AbstractRedisCommand [Seq [(Value , Double )]](flatMultiBulkAsPairSeq(bulkAs[Value ], bulkAsDouble))
314326
315- private abstract class AbstractZadd [T ](decoder : ReplyDecoder [T ])
316- (key : Key , memberScores : IterableOnce [(Value , Double )], existence : Opt [Existence ], changed : Boolean , incr : Boolean )
317- extends AbstractRedisCommand [T ](decoder) with NodeCommand {
327+ private abstract class AbstractZadd [T ](decoder : ReplyDecoder [T ])(
328+ key : Key ,
329+ memberScores : IterableOnce [(Value , Double )],
330+ existence : Opt [Existence ],
331+ comparison : Opt [Comparison ],
332+ changed : Boolean ,
333+ incr : Boolean
334+ ) extends AbstractRedisCommand [T ](decoder) with NodeCommand {
318335
319- val encoded : Encoded = encoder(" ZADD" ).key(key).optAdd(existence)
336+ val encoded : Encoded = encoder(" ZADD" ).key(key).optAdd(existence).optAdd(comparison)
320337 .addFlag(" CH" , changed).addFlag(" INCR" , incr).argDataPairs(memberScores.iterator.map(_.swap)).result
321338 }
322339
323- private final class Zadd (key : Key , memberScores : IterableOnce [(Value , Double )], emptyData : Boolean , existence : Opt [Existence ], changed : Boolean )
324- extends AbstractZadd [Int ](integerAsInt)(key, memberScores, existence, changed, incr = false ) {
340+ private final class Zadd (
341+ key : Key ,
342+ memberScores : IterableOnce [(Value , Double )],
343+ emptyData : Boolean ,
344+ existence : Opt [Existence ],
345+ comparison : Opt [Comparison ],
346+ changed : Boolean
347+ ) extends AbstractZadd [Int ](integerAsInt)(key, memberScores, existence, comparison, changed, incr = false ) {
325348 override def immediateResult : Opt [Int ] = if (emptyData) Opt (0 ) else Opt .Empty
326349 }
327350
328- private final class ZaddIncr (key : Key , member : Value , score : Double , existence : Opt [Existence ])
329- extends AbstractZadd [Opt [Double ]](nullBulkOr(bulkAsDouble))(key, (member, score).single, existence, changed = false , incr = true )
351+ private final class ZaddIncr (
352+ key : Key ,
353+ member : Value ,
354+ score : Double ,
355+ existence : Opt [Existence ],
356+ comparison : Opt [Comparison ]
357+ ) extends AbstractZadd [Opt [Double ]](nullBulkOr(bulkAsDouble))(key, (member, score).single, existence, comparison, changed = false , incr = true )
330358
331359 private final class Zcard (key : Key ) extends RedisLongCommand with NodeCommand {
332360 val encoded : Encoded = encoder(" ZCARD" ).key(key).result
0 commit comments