func (e *Evaluator) patternRegexp(p *ast.PatternRegexpExpr) bool { var sexpr string if p.Sexpr != nil { sexpr = *p.Sexpr } else { expr := p.Expr.GetDatum() if expr.IsNull() { p.SetNull() return true } var err error sexpr, err = expr.ToString() if err != nil { e.err = errors.Errorf("non-string Expression in LIKE: %v (Value of type %T)", expr, expr) return false } if ast.IsConstant(p.Expr) { p.Sexpr = new(string) *p.Sexpr = sexpr } } re := p.Re if re == nil { pattern := p.Pattern.GetDatum() if pattern.IsNull() { p.SetNull() return true } spattern, err := pattern.ToString() if err != nil { e.err = errors.Errorf("non-string pattern in LIKE: %v (Value of type %T)", pattern, pattern) return false } if re, err = regexp.Compile(spattern); err != nil { e.err = errors.Trace(err) return false } if ast.IsConstant(p.Pattern) { p.Re = re } } match := re.MatchString(sexpr) if p.Not { match = !match } p.SetInt64(boolToInt64(match)) return true }