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, } } }