Esempio n. 1
0
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
}