rest/plugins/sharding/condition.go

121 lines
1.6 KiB
Go
Raw Permalink Normal View History

2024-12-11 17:29:01 +08:00
package sharding
const (
ValueOperaEqual = iota + 0x10
ValueOperaGreater
ValueOperaLess
ValueOperaRange
ValueTypeString = iota + 0x30
ValueTypeNumber
ValueTypeBoolean
ValueTypeNull
ValueTypeAny
)
type (
ColumnCondition struct {
Name string `json:"name"`
Value CondValue `json:"value"`
}
CondValue interface {
Type() int
Opera() int
Value() any
}
equalValue struct {
vType int
vData any
}
rangeValue struct {
vType int
vData any
}
greaterValue struct {
vType int
vData any
}
lessValue struct {
vType int
vData any
}
)
func (v *lessValue) Type() int {
return v.vType
}
func (v *lessValue) Opera() int {
return ValueOperaLess
}
func (v *lessValue) Value() any {
return v.vData
}
func (v *greaterValue) Type() int {
return v.vType
}
func (v *greaterValue) Opera() int {
return ValueOperaGreater
}
func (v *greaterValue) Value() any {
return v.vData
}
func (v *rangeValue) Type() int {
return v.vType
}
func (v *rangeValue) Opera() int {
return ValueOperaRange
}
func (v *rangeValue) Value() any {
return v.vData
}
func (v *equalValue) Type() int {
return v.vType
}
func (v *equalValue) Opera() int {
return ValueOperaEqual
}
func (v *equalValue) Value() any {
return v.vData
}
func newCondValue(vType int, op int, value any) CondValue {
switch op {
case ValueOperaGreater:
return &greaterValue{
vType: vType,
vData: value,
}
case ValueOperaLess:
return &lessValue{
vType: vType,
vData: value,
}
case ValueOperaRange:
return &rangeValue{
vType: vType,
vData: value,
}
default:
return &equalValue{
vType: vType,
vData: value,
}
}
}