forked from mirror/redis
Merge pull request #79 from go-redis/fix/consistent-zrevrange
Use consistent API in ZRevRangeWithScores and ZRevRange. Fixes #56. Fixes #78.
This commit is contained in:
commit
4fefa47d6d
41
commands.go
41
commands.go
|
@ -10,6 +10,10 @@ func formatFloat(f float64) string {
|
||||||
return strconv.FormatFloat(f, 'f', -1, 64)
|
return strconv.FormatFloat(f, 'f', -1, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formatInt(i int64) string {
|
||||||
|
return strconv.FormatInt(i, 10)
|
||||||
|
}
|
||||||
|
|
||||||
func readTimeout(sec int64) time.Duration {
|
func readTimeout(sec int64) time.Duration {
|
||||||
if sec == 0 {
|
if sec == 0 {
|
||||||
return 0
|
return 0
|
||||||
|
@ -918,8 +922,7 @@ func (c *commandable) ZRangeWithScores(key string, start, stop int64) *ZSliceCmd
|
||||||
}
|
}
|
||||||
|
|
||||||
type ZRangeByScore struct {
|
type ZRangeByScore struct {
|
||||||
Min, Max string
|
Min, Max string
|
||||||
|
|
||||||
Offset, Count int64
|
Offset, Count int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -990,32 +993,20 @@ func (c *commandable) ZRemRangeByScore(key, min, max string) *IntCmd {
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandable) zRevRange(key, start, stop string, withScores bool) *StringSliceCmd {
|
func (c *commandable) ZRevRange(key string, start, stop int64) *StringSliceCmd {
|
||||||
args := []string{"ZREVRANGE", key, start, stop}
|
cmd := NewStringSliceCmd("ZREVRANGE", key, formatInt(start), formatInt(stop))
|
||||||
if withScores {
|
|
||||||
args = append(args, "WITHSCORES")
|
|
||||||
}
|
|
||||||
cmd := NewStringSliceCmd(args...)
|
|
||||||
c.Process(cmd)
|
c.Process(cmd)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandable) ZRevRange(key, start, stop string) *StringSliceCmd {
|
func (c *commandable) ZRevRangeWithScores(key string, start, stop int64) *ZSliceCmd {
|
||||||
return c.zRevRange(key, start, stop, false)
|
cmd := NewZSliceCmd("ZREVRANGE", key, formatInt(start), formatInt(stop), "WITHSCORES")
|
||||||
}
|
|
||||||
|
|
||||||
func (c *commandable) ZRevRangeWithScores(key, start, stop string) *ZSliceCmd {
|
|
||||||
args := []string{"ZREVRANGE", key, start, stop, "WITHSCORES"}
|
|
||||||
cmd := NewZSliceCmd(args...)
|
|
||||||
c.Process(cmd)
|
c.Process(cmd)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandable) zRevRangeByScore(key string, opt ZRangeByScore, withScores bool) *StringSliceCmd {
|
func (c *commandable) ZRevRangeByScore(key string, opt ZRangeByScore) *StringSliceCmd {
|
||||||
args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min}
|
args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min}
|
||||||
if withScores {
|
|
||||||
args = append(args, "WITHSCORES")
|
|
||||||
}
|
|
||||||
if opt.Offset != 0 || opt.Count != 0 {
|
if opt.Offset != 0 || opt.Count != 0 {
|
||||||
args = append(
|
args = append(
|
||||||
args,
|
args,
|
||||||
|
@ -1029,10 +1020,6 @@ func (c *commandable) zRevRangeByScore(key string, opt ZRangeByScore, withScores
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandable) ZRevRangeByScore(key string, opt ZRangeByScore) *StringSliceCmd {
|
|
||||||
return c.zRevRangeByScore(key, opt, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *commandable) ZRevRangeByScoreWithScores(key string, opt ZRangeByScore) *ZSliceCmd {
|
func (c *commandable) ZRevRangeByScoreWithScores(key string, opt ZRangeByScore) *ZSliceCmd {
|
||||||
args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min, "WITHSCORES"}
|
args := []string{"ZREVRANGEBYSCORE", key, opt.Max, opt.Min, "WITHSCORES"}
|
||||||
if opt.Offset != 0 || opt.Count != 0 {
|
if opt.Offset != 0 || opt.Count != 0 {
|
||||||
|
@ -1060,12 +1047,8 @@ func (c *commandable) ZScore(key, member string) *FloatCmd {
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *commandable) ZUnionStore(
|
func (c *commandable) ZUnionStore(dest string, store ZStore, keys ...string) *IntCmd {
|
||||||
destination string,
|
args := []string{"ZUNIONSTORE", dest, strconv.FormatInt(int64(len(keys)), 10)}
|
||||||
store ZStore,
|
|
||||||
keys ...string,
|
|
||||||
) *IntCmd {
|
|
||||||
args := []string{"ZUNIONSTORE", destination, strconv.FormatInt(int64(len(keys)), 10)}
|
|
||||||
args = append(args, keys...)
|
args = append(args, keys...)
|
||||||
if len(store.Weights) > 0 {
|
if len(store.Weights) > 0 {
|
||||||
args = append(args, "WEIGHTS")
|
args = append(args, "WEIGHTS")
|
||||||
|
|
|
@ -2053,15 +2053,15 @@ var _ = Describe("Commands", func() {
|
||||||
zAdd = client.ZAdd("zset", redis.Z{3, "three"})
|
zAdd = client.ZAdd("zset", redis.Z{3, "three"})
|
||||||
Expect(zAdd.Err()).NotTo(HaveOccurred())
|
Expect(zAdd.Err()).NotTo(HaveOccurred())
|
||||||
|
|
||||||
zRevRange := client.ZRevRange("zset", "0", "-1")
|
zRevRange := client.ZRevRange("zset", 0, -1)
|
||||||
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
||||||
Expect(zRevRange.Val()).To(Equal([]string{"three", "two", "one"}))
|
Expect(zRevRange.Val()).To(Equal([]string{"three", "two", "one"}))
|
||||||
|
|
||||||
zRevRange = client.ZRevRange("zset", "2", "3")
|
zRevRange = client.ZRevRange("zset", 2, 3)
|
||||||
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
||||||
Expect(zRevRange.Val()).To(Equal([]string{"one"}))
|
Expect(zRevRange.Val()).To(Equal([]string{"one"}))
|
||||||
|
|
||||||
zRevRange = client.ZRevRange("zset", "-2", "-1")
|
zRevRange = client.ZRevRange("zset", -2, -1)
|
||||||
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
Expect(zRevRange.Err()).NotTo(HaveOccurred())
|
||||||
Expect(zRevRange.Val()).To(Equal([]string{"two", "one"}))
|
Expect(zRevRange.Val()).To(Equal([]string{"two", "one"}))
|
||||||
})
|
})
|
||||||
|
@ -2074,15 +2074,15 @@ var _ = Describe("Commands", func() {
|
||||||
zAdd = client.ZAdd("zset", redis.Z{3, "three"})
|
zAdd = client.ZAdd("zset", redis.Z{3, "three"})
|
||||||
Expect(zAdd.Err()).NotTo(HaveOccurred())
|
Expect(zAdd.Err()).NotTo(HaveOccurred())
|
||||||
|
|
||||||
val, err := client.ZRevRangeWithScores("zset", "0", "-1").Result()
|
val, err := client.ZRevRangeWithScores("zset", 0, -1).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(val).To(Equal([]redis.Z{{3, "three"}, {2, "two"}, {1, "one"}}))
|
Expect(val).To(Equal([]redis.Z{{3, "three"}, {2, "two"}, {1, "one"}}))
|
||||||
|
|
||||||
val, err = client.ZRevRangeWithScores("zset", "2", "3").Result()
|
val, err = client.ZRevRangeWithScores("zset", 2, 3).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(val).To(Equal([]redis.Z{{1, "one"}}))
|
Expect(val).To(Equal([]redis.Z{{1, "one"}}))
|
||||||
|
|
||||||
val, err = client.ZRevRangeWithScores("zset", "-2", "-1").Result()
|
val, err = client.ZRevRangeWithScores("zset", -2, -1).Result()
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(val).To(Equal([]redis.Z{{2, "two"}, {1, "one"}}))
|
Expect(val).To(Equal([]redis.Z{{2, "two"}, {1, "one"}}))
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue