func (e *Evaluator) variable(v *ast.VariableExpr) bool { name := strings.ToLower(v.Name) sessionVars := variable.GetSessionVars(e.ctx) globalVars := variable.GetGlobalVarAccessor(e.ctx) if !v.IsSystem { // user vars if value, ok := sessionVars.Users[name]; ok { v.SetValue(value) return true } // select null user vars is permitted. v.SetValue(nil) return true } _, ok := variable.SysVars[name] if !ok { // select null sys vars is not permitted e.err = variable.UnknownSystemVar.Gen("Unknown system variable '%s'", name) return false } if !v.IsGlobal { if value, ok := sessionVars.Systems[name]; ok { v.SetValue(value) return true } } value, err := globalVars.GetGlobalSysVar(e.ctx, name) if err != nil { e.err = errors.Trace(err) return false } v.SetValue(value) return true }