mirror of
https://github.com/redis/go-redis.git
synced 2025-04-17 20:17:02 +03:00
resolve conflicts
This commit is contained in:
commit
02c3494bb9
@ -13,6 +13,7 @@ type HashCmdable interface {
|
|||||||
HGetDel(ctx context.Context, key string, fields ...string) *StringSliceCmd
|
HGetDel(ctx context.Context, key string, fields ...string) *StringSliceCmd
|
||||||
HGetEX(ctx context.Context, key string, fields ...string) *StringSliceCmd
|
HGetEX(ctx context.Context, key string, fields ...string) *StringSliceCmd
|
||||||
HGetEXWithArgs(ctx context.Context, key string, options *HGetEXOptions, fields ...string) *StringSliceCmd
|
HGetEXWithArgs(ctx context.Context, key string, options *HGetEXOptions, fields ...string) *StringSliceCmd
|
||||||
|
HIncrBy(ctx context.Context, key, field string, incr int64) *IntCmd
|
||||||
HIncrByFloat(ctx context.Context, key, field string, incr float64) *FloatCmd
|
HIncrByFloat(ctx context.Context, key, field string, incr float64) *FloatCmd
|
||||||
HKeys(ctx context.Context, key string) *StringSliceCmd
|
HKeys(ctx context.Context, key string) *StringSliceCmd
|
||||||
HLen(ctx context.Context, key string) *IntCmd
|
HLen(ctx context.Context, key string) *IntCmd
|
||||||
|
@ -320,8 +320,11 @@ type FTSearchOptions struct {
|
|||||||
SortByWithCount bool
|
SortByWithCount bool
|
||||||
LimitOffset int
|
LimitOffset int
|
||||||
Limit int
|
Limit int
|
||||||
Params map[string]interface{}
|
// CountOnly sets LIMIT 0 0 to get the count - number of documents in the result set without actually returning the result set.
|
||||||
DialectVersion int
|
// When using this option, the Limit and LimitOffset options are ignored.
|
||||||
|
CountOnly bool
|
||||||
|
Params map[string]interface{}
|
||||||
|
DialectVersion int
|
||||||
}
|
}
|
||||||
|
|
||||||
type FTSynDumpResult struct {
|
type FTSynDumpResult struct {
|
||||||
@ -1954,8 +1957,12 @@ func (c cmdable) FTSearchWithArgs(ctx context.Context, index string, query strin
|
|||||||
args = append(args, "WITHCOUNT")
|
args = append(args, "WITHCOUNT")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if options.LimitOffset >= 0 && options.Limit > 0 {
|
if options.CountOnly {
|
||||||
args = append(args, "LIMIT", options.LimitOffset, options.Limit)
|
args = append(args, "LIMIT", 0, 0)
|
||||||
|
} else {
|
||||||
|
if options.LimitOffset >= 0 && options.Limit > 0 || options.LimitOffset > 0 && options.Limit == 0 {
|
||||||
|
args = append(args, "LIMIT", options.LimitOffset, options.Limit)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if options.Params != nil {
|
if options.Params != nil {
|
||||||
args = append(args, "PARAMS", len(options.Params)*2)
|
args = append(args, "PARAMS", len(options.Params)*2)
|
||||||
|
@ -1684,6 +1684,7 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
|||||||
Expect(resUint8.Docs[0].ID).To(BeEquivalentTo("doc1"))
|
Expect(resUint8.Docs[0].ID).To(BeEquivalentTo("doc1"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
It("should fail when using a non-zero offset with a zero limit", Label("search", "ftsearch"), func() {
|
It("should fail when using a non-zero offset with a zero limit", Label("search", "ftsearch"), func() {
|
||||||
SkipBeforeRedisVersion(7.9, "requires Redis 8.x")
|
SkipBeforeRedisVersion(7.9, "requires Redis 8.x")
|
||||||
val, err := client.FTCreate(ctx, "testIdx", &redis.FTCreateOptions{}, &redis.FieldSchema{
|
val, err := client.FTCreate(ctx, "testIdx", &redis.FTCreateOptions{}, &redis.FieldSchema{
|
||||||
@ -2067,6 +2068,44 @@ var _ = Describe("RediSearch commands Resp 2", Label("search"), func() {
|
|||||||
Expect(strings.ToLower(err.Error())).To(ContainSubstring("alias"))
|
Expect(strings.ToLower(err.Error())).To(ContainSubstring("alias"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("should test ft.search with CountOnly param", Label("search", "ftsearch"), func() {
|
||||||
|
val, err := client.FTCreate(ctx, "txtIndex", &redis.FTCreateOptions{},
|
||||||
|
&redis.FieldSchema{FieldName: "txt", FieldType: redis.SearchFieldTypeText},
|
||||||
|
).Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(val).To(BeEquivalentTo("OK"))
|
||||||
|
WaitForIndexing(client, "txtIndex")
|
||||||
|
|
||||||
|
_, err = client.HSet(ctx, "doc1", "txt", "hello world").Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
_, err = client.HSet(ctx, "doc2", "txt", "hello go").Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
_, err = client.HSet(ctx, "doc3", "txt", "hello redis").Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
optsCountOnly := &redis.FTSearchOptions{
|
||||||
|
CountOnly: true,
|
||||||
|
LimitOffset: 0,
|
||||||
|
Limit: 2, // even though we limit to 2, with count-only no docs are returned
|
||||||
|
DialectVersion: 2,
|
||||||
|
}
|
||||||
|
resCountOnly, err := client.FTSearchWithArgs(ctx, "txtIndex", "hello", optsCountOnly).Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(resCountOnly.Total).To(BeEquivalentTo(3))
|
||||||
|
Expect(len(resCountOnly.Docs)).To(BeEquivalentTo(0))
|
||||||
|
|
||||||
|
optsLimit := &redis.FTSearchOptions{
|
||||||
|
CountOnly: false,
|
||||||
|
LimitOffset: 0,
|
||||||
|
Limit: 2, // we expect to get 2 documents even though total count is 3
|
||||||
|
DialectVersion: 2,
|
||||||
|
}
|
||||||
|
resLimit, err := client.FTSearchWithArgs(ctx, "txtIndex", "hello", optsLimit).Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(resLimit.Total).To(BeEquivalentTo(3))
|
||||||
|
Expect(len(resLimit.Docs)).To(BeEquivalentTo(2))
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
func _assert_geosearch_result(result *redis.FTSearchResult, expectedDocIDs []string) {
|
func _assert_geosearch_result(result *redis.FTSearchResult, expectedDocIDs []string) {
|
||||||
|
16
sentinel.go
16
sentinel.go
@ -815,6 +815,22 @@ func NewFailoverClusterClient(failoverOpt *FailoverOptions) *ClusterClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
opt := failoverOpt.clusterOptions()
|
opt := failoverOpt.clusterOptions()
|
||||||
|
if failoverOpt.DB != 0 {
|
||||||
|
onConnect := opt.OnConnect
|
||||||
|
|
||||||
|
opt.OnConnect = func(ctx context.Context, cn *Conn) error {
|
||||||
|
if err := cn.Select(ctx, failoverOpt.DB).Err(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if onConnect != nil {
|
||||||
|
return onConnect(ctx, cn)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
opt.ClusterSlots = func(ctx context.Context) ([]ClusterSlot, error) {
|
opt.ClusterSlots = func(ctx context.Context) ([]ClusterSlot, error) {
|
||||||
masterAddr, err := failover.MasterAddr(ctx)
|
masterAddr, err := failover.MasterAddr(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -200,6 +200,7 @@ var _ = Describe("NewFailoverClusterClient", func() {
|
|||||||
SentinelAddrs: sentinelAddrs,
|
SentinelAddrs: sentinelAddrs,
|
||||||
|
|
||||||
RouteRandomly: true,
|
RouteRandomly: true,
|
||||||
|
DB: 1,
|
||||||
})
|
})
|
||||||
Expect(client.FlushDB(ctx).Err()).NotTo(HaveOccurred())
|
Expect(client.FlushDB(ctx).Err()).NotTo(HaveOccurred())
|
||||||
|
|
||||||
@ -289,6 +290,20 @@ var _ = Describe("NewFailoverClusterClient", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("should sentinel cluster client db", func() {
|
||||||
|
err := client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) error {
|
||||||
|
return c.Ping(ctx).Err()
|
||||||
|
})
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
_ = client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) error {
|
||||||
|
clientInfo, err := c.ClientInfo(ctx).Result()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(clientInfo.DB).To(Equal(1))
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
It("should sentinel cluster PROTO 3", func() {
|
It("should sentinel cluster PROTO 3", func() {
|
||||||
_ = client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) error {
|
_ = client.ForEachShard(ctx, func(ctx context.Context, c *redis.Client) error {
|
||||||
val, err := client.Do(ctx, "HELLO").Result()
|
val, err := client.Do(ctx, "HELLO").Result()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user