From 7b1c1621b77b9fba96e81376fe3a7c068829af36 Mon Sep 17 00:00:00 2001 From: Rueian Date: Mon, 22 Apr 2024 20:08:54 +0800 Subject: [PATCH 1/4] feat: modify contract and commit --- mock/go.mod | 2 +- om/go.mod | 2 +- pipe.go | 2 +- rueidisaside/go.mod | 2 +- rueidiscompat/adapter.go | 20 ++++++++++++++++++-- rueidiscompat/command.go | 1 + rueidiscompat/go.mod | 2 +- rueidishook/go.mod | 4 ++-- rueidisotel/go.mod | 2 +- rueidisprob/go.mod | 2 +- 10 files changed, 28 insertions(+), 11 deletions(-) diff --git a/mock/go.mod b/mock/go.mod index 04f136a9..d98716de 100644 --- a/mock/go.mod +++ b/mock/go.mod @@ -5,7 +5,7 @@ go 1.20 replace github.com/redis/rueidis => ../ require ( - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 go.uber.org/mock v0.3.0 ) diff --git a/om/go.mod b/om/go.mod index 42745b4a..2718f525 100644 --- a/om/go.mod +++ b/om/go.mod @@ -6,7 +6,7 @@ replace github.com/redis/rueidis => ../ require ( github.com/oklog/ulid/v2 v2.1.0 - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 ) require golang.org/x/sys v0.19.0 // indirect diff --git a/pipe.go b/pipe.go index d3c1ec2d..f3db3b35 100644 --- a/pipe.go +++ b/pipe.go @@ -21,7 +21,7 @@ import ( ) const LibName = "rueidis" -const LibVer = "1.0.34" +const LibVer = "1.0.35" var noHello = regexp.MustCompile("unknown command .?(HELLO|hello).?") diff --git a/rueidisaside/go.mod b/rueidisaside/go.mod index 6ffca3b6..a1a611aa 100644 --- a/rueidisaside/go.mod +++ b/rueidisaside/go.mod @@ -6,7 +6,7 @@ replace github.com/redis/rueidis => ../ require ( github.com/oklog/ulid/v2 v2.1.0 - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 ) require golang.org/x/sys v0.19.0 // indirect diff --git a/rueidiscompat/adapter.go b/rueidiscompat/adapter.go index 4ac383ea..abe7ffd4 100644 --- a/rueidiscompat/adapter.go +++ b/rueidiscompat/adapter.go @@ -43,7 +43,11 @@ import ( "github.com/redis/rueidis/internal/util" ) -const KeepTTL = -1 +const ( + KeepTTL = -1 + BitCountIndexByte = "BYTE" + BitCountIndexBit = "BIT" +) type Cmdable interface { Cache(ttl time.Duration) CacheCompat @@ -1094,11 +1098,23 @@ func (c *Compat) SetBit(ctx context.Context, key string, offset int64, value int } func (c *Compat) BitCount(ctx context.Context, key string, bitCount *BitCount) *IntCmd { + var resp rueidis.RedisResult if bitCount == nil { resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Build()) - } else { + return newIntCmd(resp) + } + + if bitCount.Unit == nil { resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Build()) + return newIntCmd(resp) + } + + switch *bitCount.Unit { + case BitCountIndexByte: + resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Byte().Build()) + case BitCountIndexBit: + resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Bit().Build()) } return newIntCmd(resp) } diff --git a/rueidiscompat/command.go b/rueidiscompat/command.go index f614597a..ea1f9910 100644 --- a/rueidiscompat/command.go +++ b/rueidiscompat/command.go @@ -1959,6 +1959,7 @@ type SetArgs struct { type BitCount struct { Start, End int64 + Unit *string // Stores BIT or BYTE } //type BitPos struct { diff --git a/rueidiscompat/go.mod b/rueidiscompat/go.mod index f35a854c..cae12e8a 100644 --- a/rueidiscompat/go.mod +++ b/rueidiscompat/go.mod @@ -7,7 +7,7 @@ replace github.com/redis/rueidis => ../ require ( github.com/onsi/ginkgo/v2 v2.15.0 github.com/onsi/gomega v1.31.1 - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 ) require ( diff --git a/rueidishook/go.mod b/rueidishook/go.mod index 13cbb92c..d1f96637 100644 --- a/rueidishook/go.mod +++ b/rueidishook/go.mod @@ -8,8 +8,8 @@ replace ( ) require ( - github.com/redis/rueidis v1.0.34 - github.com/redis/rueidis/mock v1.0.34 + github.com/redis/rueidis v1.0.35 + github.com/redis/rueidis/mock v1.0.35 go.uber.org/mock v0.4.0 ) diff --git a/rueidisotel/go.mod b/rueidisotel/go.mod index ad620901..96e37144 100644 --- a/rueidisotel/go.mod +++ b/rueidisotel/go.mod @@ -5,7 +5,7 @@ go 1.20 replace github.com/redis/rueidis => ../ require ( - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 go.opentelemetry.io/otel v1.24.0 go.opentelemetry.io/otel/metric v1.24.0 go.opentelemetry.io/otel/sdk v1.24.0 diff --git a/rueidisprob/go.mod b/rueidisprob/go.mod index 18c55063..821e1346 100644 --- a/rueidisprob/go.mod +++ b/rueidisprob/go.mod @@ -5,7 +5,7 @@ go 1.20.0 replace github.com/redis/rueidis => ../ require ( - github.com/redis/rueidis v1.0.34 + github.com/redis/rueidis v1.0.35 github.com/twmb/murmur3 v1.1.8 ) From 083d254355372591db5d4ebae009d90f430bde74 Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Fri, 17 May 2024 15:35:35 +0530 Subject: [PATCH 2/4] feat: add test --- internal/util/template.go | 5 +++++ rueidiscompat/adapter_test.go | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 internal/util/template.go diff --git a/internal/util/template.go b/internal/util/template.go new file mode 100644 index 00000000..a7ea712e --- /dev/null +++ b/internal/util/template.go @@ -0,0 +1,5 @@ +package util + +func ToPtr[T any](v T) *T { + return &v +} diff --git a/rueidiscompat/adapter_test.go b/rueidiscompat/adapter_test.go index 65700f07..83af6a91 100644 --- a/rueidiscompat/adapter_test.go +++ b/rueidiscompat/adapter_test.go @@ -30,6 +30,7 @@ import ( "context" "encoding/json" "fmt" + "github.com/redis/rueidis/internal/util" "math" "strconv" "strings" @@ -1150,6 +1151,23 @@ func testAdapter(resp3 bool) { }) Expect(bitCount.Err()).NotTo(HaveOccurred()) Expect(bitCount.Val()).To(Equal(int64(6))) + + bitCount = adapter.BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: util.ToPtr("BYTE"), + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(6))) + + bitCount = adapter.BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: util.ToPtr("BIT"), + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(1))) + }) It("should BitOpAnd", func() { From c9cea4466d5474afd63869ef7d6ff1cfd1881492 Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Fri, 17 May 2024 20:26:33 +0530 Subject: [PATCH 3/4] feat: address comments and convert from ptr to string --- rueidiscompat/adapter.go | 17 +++++++++--- rueidiscompat/adapter_test.go | 50 ++++++++++++++++++++++++----------- rueidiscompat/command.go | 2 +- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/rueidiscompat/adapter.go b/rueidiscompat/adapter.go index c20957b9..5a8df142 100644 --- a/rueidiscompat/adapter.go +++ b/rueidiscompat/adapter.go @@ -1104,12 +1104,12 @@ func (c *Compat) BitCount(ctx context.Context, key string, bitCount *BitCount) * return newIntCmd(resp) } - if bitCount.Unit == nil { + if bitCount.Unit == "" { resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Build()) return newIntCmd(resp) } - switch *bitCount.Unit { + switch bitCount.Unit { case BitCountIndexByte: resp = c.client.Do(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Byte().Build()) case BitCountIndexBit: @@ -4600,8 +4600,19 @@ func (c CacheCompat) BitCount(ctx context.Context, key string, bitCount *BitCoun var resp rueidis.RedisResult if bitCount == nil { resp = c.client.DoCache(ctx, c.client.B().Bitcount().Key(key).Cache(), c.ttl) - } else { + return newIntCmd(resp) + } + + if bitCount.Unit == "" { resp = c.client.DoCache(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Cache(), c.ttl) + return newIntCmd(resp) + } + + switch bitCount.Unit { + case BitCountIndexByte: + resp = c.client.DoCache(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Byte().Cache(), c.ttl) + case BitCountIndexBit: + resp = c.client.DoCache(ctx, c.client.B().Bitcount().Key(key).Start(bitCount.Start).End(bitCount.End).Bit().Cache(), c.ttl) } return newIntCmd(resp) } diff --git a/rueidiscompat/adapter_test.go b/rueidiscompat/adapter_test.go index 83af6a91..5c22c5f9 100644 --- a/rueidiscompat/adapter_test.go +++ b/rueidiscompat/adapter_test.go @@ -30,7 +30,6 @@ import ( "context" "encoding/json" "fmt" - "github.com/redis/rueidis/internal/util" "math" "strconv" "strings" @@ -1152,22 +1151,23 @@ func testAdapter(resp3 bool) { Expect(bitCount.Err()).NotTo(HaveOccurred()) Expect(bitCount.Val()).To(Equal(int64(6))) - bitCount = adapter.BitCount(ctx, "key", &BitCount{ - Start: 1, - End: 1, - Unit: util.ToPtr("BYTE"), - }) - Expect(bitCount.Err()).NotTo(HaveOccurred()) - Expect(bitCount.Val()).To(Equal(int64(6))) - - bitCount = adapter.BitCount(ctx, "key", &BitCount{ - Start: 1, - End: 1, - Unit: util.ToPtr("BIT"), - }) - Expect(bitCount.Err()).NotTo(HaveOccurred()) - Expect(bitCount.Val()).To(Equal(int64(1))) + if resp3 { + bitCount = adapter.BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: "BYTE", + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(6))) + bitCount = adapter.BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: "BIT", + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(1))) + } }) It("should BitOpAnd", func() { @@ -7082,6 +7082,24 @@ func testAdapterCache(resp3 bool) { }) Expect(bitCount.Err()).NotTo(HaveOccurred()) Expect(bitCount.Val()).To(Equal(int64(6))) + + if resp3 { + bitCount = adapter.Cache(time.Hour).BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: "BIT", + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(1))) + + bitCount = adapter.Cache(time.Hour).BitCount(ctx, "key", &BitCount{ + Start: 1, + End: 1, + Unit: "BYTE", + }) + Expect(bitCount.Err()).NotTo(HaveOccurred()) + Expect(bitCount.Val()).To(Equal(int64(6))) + } }) It("should BitPos", func() { diff --git a/rueidiscompat/command.go b/rueidiscompat/command.go index ea1f9910..460f0526 100644 --- a/rueidiscompat/command.go +++ b/rueidiscompat/command.go @@ -1959,7 +1959,7 @@ type SetArgs struct { type BitCount struct { Start, End int64 - Unit *string // Stores BIT or BYTE + Unit string // Stores BIT or BYTE } //type BitPos struct { From 71e2ce352892d927a4fba4a723cf0c1cfe653f6b Mon Sep 17 00:00:00 2001 From: Anuragkillswitch <70265851+Anuragkillswitch@users.noreply.github.com> Date: Fri, 17 May 2024 20:27:52 +0530 Subject: [PATCH 4/4] feat: remove unused util --- internal/util/template.go | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 internal/util/template.go diff --git a/internal/util/template.go b/internal/util/template.go deleted file mode 100644 index a7ea712e..00000000 --- a/internal/util/template.go +++ /dev/null @@ -1,5 +0,0 @@ -package util - -func ToPtr[T any](v T) *T { - return &v -}