func (e *Evaluator) caseExpr(v *ast.CaseExpr) bool { tmp := types.NewDatum(boolToInt64(true)) target := &tmp if v.Value != nil { target = v.Value.GetDatum() } if !target.IsNull() { for _, val := range v.WhenClauses { cmp, err := target.CompareDatum(*val.Expr.GetDatum()) if err != nil { e.err = errors.Trace(err) return false } if cmp == 0 { v.SetDatum(*val.Result.GetDatum()) return true } } } if v.ElseClause != nil { v.SetDatum(*v.ElseClause.GetDatum()) } else { v.SetNull() } return true }