mirror of https://github.com/go-redis/redis.git
feat: add support for COPY command (#2016)
This commit is contained in:
parent
627f4dab54
commit
730afbcffb
11
commands.go
11
commands.go
|
@ -143,6 +143,7 @@ type Cmdable interface {
|
||||||
SetXX(ctx context.Context, key string, value interface{}, expiration time.Duration) *BoolCmd
|
SetXX(ctx context.Context, key string, value interface{}, expiration time.Duration) *BoolCmd
|
||||||
SetRange(ctx context.Context, key string, offset int64, value string) *IntCmd
|
SetRange(ctx context.Context, key string, offset int64, value string) *IntCmd
|
||||||
StrLen(ctx context.Context, key string) *IntCmd
|
StrLen(ctx context.Context, key string) *IntCmd
|
||||||
|
Copy(ctx context.Context, sourceKey string, destKey string, db int, replace bool) *IntCmd
|
||||||
|
|
||||||
GetBit(ctx context.Context, key string, offset int64) *IntCmd
|
GetBit(ctx context.Context, key string, offset int64) *IntCmd
|
||||||
SetBit(ctx context.Context, key string, offset int64, value int) *IntCmd
|
SetBit(ctx context.Context, key string, offset int64, value int) *IntCmd
|
||||||
|
@ -1025,6 +1026,16 @@ func (c cmdable) StrLen(ctx context.Context, key string) *IntCmd {
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c cmdable) Copy(ctx context.Context, sourceKey, destKey string, db int, replace bool) *IntCmd {
|
||||||
|
args := []interface{}{"copy", sourceKey, destKey, "DB", db}
|
||||||
|
if replace {
|
||||||
|
args = append(args, "REPLACE")
|
||||||
|
}
|
||||||
|
cmd := NewIntCmd(ctx, args...)
|
||||||
|
_ = c(ctx, cmd)
|
||||||
|
return cmd
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
func (c cmdable) GetBit(ctx context.Context, key string, offset int64) *IntCmd {
|
func (c cmdable) GetBit(ctx context.Context, key string, offset int64) *IntCmd {
|
||||||
|
|
|
@ -1633,6 +1633,32 @@ var _ = Describe("Commands", func() {
|
||||||
Expect(strLen.Err()).NotTo(HaveOccurred())
|
Expect(strLen.Err()).NotTo(HaveOccurred())
|
||||||
Expect(strLen.Val()).To(Equal(int64(0)))
|
Expect(strLen.Val()).To(Equal(int64(0)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("should Copy", func() {
|
||||||
|
set := client.Set(ctx, "key", "hello", 0)
|
||||||
|
Expect(set.Err()).NotTo(HaveOccurred())
|
||||||
|
Expect(set.Val()).To(Equal("OK"))
|
||||||
|
|
||||||
|
copy := client.Copy(ctx, "key", "newKey", redisOptions().DB, false)
|
||||||
|
Expect(copy.Err()).NotTo(HaveOccurred())
|
||||||
|
Expect(copy.Val()).To(Equal(int64(1)))
|
||||||
|
|
||||||
|
// Value is available by both keys now
|
||||||
|
getOld := client.Get(ctx, "key")
|
||||||
|
Expect(getOld.Err()).NotTo(HaveOccurred())
|
||||||
|
Expect(getOld.Val()).To(Equal("hello"))
|
||||||
|
getNew := client.Get(ctx, "newKey")
|
||||||
|
Expect(getNew.Err()).NotTo(HaveOccurred())
|
||||||
|
Expect(getNew.Val()).To(Equal("hello"))
|
||||||
|
|
||||||
|
// Overwriting an existing key should not succeed
|
||||||
|
overwrite := client.Copy(ctx, "newKey", "key", redisOptions().DB, false)
|
||||||
|
Expect(overwrite.Val()).To(Equal(int64(0)))
|
||||||
|
|
||||||
|
// Overwrite is allowed when replace=rue
|
||||||
|
replace := client.Copy(ctx, "newKey", "key", redisOptions().DB, true)
|
||||||
|
Expect(replace.Val()).To(Equal(int64(1)))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Describe("hashes", func() {
|
Describe("hashes", func() {
|
||||||
|
|
Loading…
Reference in New Issue