func (e *Evaluator) patternLike(p *ast.PatternLikeExpr) bool { expr := p.Expr.GetValue() if types.IsNil(expr) { p.SetValue(nil) return true } sexpr, err := types.ToString(expr) 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.GetValue() if types.IsNil(pattern) { p.SetValue(nil) return true } spattern, err := types.ToString(pattern) 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.SetValue(boolToInt64(match)) return true }