func operateStrings(op lex.Token, av, bv value.StringValue) value.Value { // Any other ops besides eq/not ? a, b := av.Val(), bv.Val() switch op.T { case lex.TokenEqualEqual, lex.TokenEqual: // == //u.Infof("==? %v %v", av, bv) if a == b { return value.BoolValueTrue } return value.BoolValueFalse case lex.TokenNE: // != //u.Infof("!=? %v %v", av, bv) if a == b { return value.BoolValueFalse } return value.BoolValueTrue case lex.TokenLike: // a(value) LIKE b(pattern) match, err := glob.Match(b, a) if err != nil { value.NewErrorValuef("invalid LIKE pattern: %q", a) } if match { return value.BoolValueTrue } return value.BoolValueFalse } return value.NewErrorValuef("unsupported operator for strings: %s", op.T) }
func operateStrings(op lex.Token, av, bv value.StringValue) value.Value { // Any other ops besides =, ==, !=, contains, like? a, b := av.Val(), bv.Val() switch op.T { case lex.TokenEqualEqual, lex.TokenEqual: // == //u.Infof("==? %v %v", av, bv) if a == b { return value.BoolValueTrue } return value.BoolValueFalse case lex.TokenNE: // != //u.Infof("!=? %v %v", av, bv) if a == b { return value.BoolValueFalse } return value.BoolValueTrue case lex.TokenContains: if strings.Contains(a, b) { return value.BoolValueTrue } return value.BoolValueFalse case lex.TokenLike: // a(value) LIKE b(pattern) bv, ok := LikeCompare(a, b) if !ok { return value.NewErrorValuef("invalid LIKE pattern: %q", a) } return bv case lex.TokenIN: if a == b { return value.BoolValueTrue } return value.BoolValueFalse } return value.NewErrorValuef("unsupported operator for strings: %s", op.T) }