mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-05 05:18:52 +08:00
6423b6c718
pr: https://github.com/milvus-io/milvus/pull/33881 issue: https://github.com/milvus-io/milvus/issues/33956 Signed-off-by: jaime <yun.zhang@zilliz.com>
74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package predicates
|
|
|
|
// PredicateTarget is enum for Predicate target type.
|
|
type PredicateTarget int32
|
|
|
|
const (
|
|
// PredTargetValue is predicate target for key-value perid
|
|
PredTargetValue PredicateTarget = iota + 1
|
|
)
|
|
|
|
type PredicateType int32
|
|
|
|
const (
|
|
PredTypeEqual PredicateType = iota + 1
|
|
)
|
|
|
|
// Predicate provides interface for kv predicate.
|
|
type Predicate interface {
|
|
Target() PredicateTarget
|
|
Type() PredicateType
|
|
IsTrue(any) bool
|
|
Key() string
|
|
TargetValue() any
|
|
}
|
|
|
|
type valuePredicate struct {
|
|
k, v string
|
|
pt PredicateType
|
|
}
|
|
|
|
func (p *valuePredicate) Target() PredicateTarget {
|
|
return PredTargetValue
|
|
}
|
|
|
|
func (p *valuePredicate) Type() PredicateType {
|
|
return p.pt
|
|
}
|
|
|
|
func (p *valuePredicate) IsTrue(target any) bool {
|
|
switch v := target.(type) {
|
|
case string:
|
|
return predicateValue(p.pt, v, p.v)
|
|
case []byte:
|
|
return predicateValue(p.pt, string(v), p.v)
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (p *valuePredicate) Key() string {
|
|
return p.k
|
|
}
|
|
|
|
func (p *valuePredicate) TargetValue() any {
|
|
return p.v
|
|
}
|
|
|
|
func predicateValue[T comparable](pt PredicateType, v1, v2 T) bool {
|
|
switch pt {
|
|
case PredTypeEqual:
|
|
return v1 == v2
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func ValueEqual(k, v string) Predicate {
|
|
return &valuePredicate{
|
|
k: k,
|
|
v: v,
|
|
pt: PredTypeEqual,
|
|
}
|
|
}
|