func (e *Evaluator) patternLike(p *ast.PatternLikeExpr) bool { expr := p.Expr.GetDatum() if expr.IsNull() { p.SetNull() return true } sexpr, err := expr.ToString() if err != nil { e.err = errors.Trace(err) return false } // We need to compile pattern if it has not been compiled or it is not static. var needCompile = len(p.PatChars) == 0 || !ast.IsConstant(p.Pattern) if needCompile { pattern := p.Pattern.GetDatum() if pattern.IsNull() { p.SetNull() return true } spattern, err := pattern.ToString() if err != nil { e.err = errors.Trace(err) return false } p.PatChars, p.PatTypes = compilePattern(spattern, p.Escape) } match := doMatch(sexpr, p.PatChars, p.PatTypes) if p.Not { match = !match } p.SetInt64(boolToInt64(match)) return true }