code: func isNullRejected(ctx context.Context, schema expression.Schema, expr expression.Expression) (bool, error) {
  	result, err := expression.EvaluateExprWithNull(ctx, schema, expr)
  	if err != nil {
  		return false, errors.Trace(err)
  	}
  	x, ok := result.(*expression.Constant)
  	if !ok {
  		return false, nil
  	}
  	sc := ctx.GetSessionVars().StmtCtx
  	if x.Value.IsNull() {
  		return true, nil
  	} else if isTrue, err := x.Value.ToBool(sc); err != nil || isTrue == 0 {
  		return true, errors.Trace(err)
  	}
  	return false, nil
  }
docs: // isNullRejected check whether a condition is null-rejected
  // A condition would be null-rejected in one of following cases:
  // If it is a predicate containing a reference to an inner table that evaluates to UNKNOWN or FALSE when one of its arguments is NULL.
  // If it is a conjunction containing a null-rejected condition as a conjunct.
  // If it is a disjunction of null-rejected conditions.