code: func ComputeBitXor(sc *variable.StatementContext, a, b Datum) (d Datum, err error) {
  	aKind, bKind := a.Kind(), b.Kind()
  	if (aKind == KindInt64 || aKind == KindUint64) && (bKind == KindInt64 || bKind == KindUint64) {
  		d.SetUint64(a.GetUint64() ^ b.GetUint64())
  		return
  	}
  	// If either is not integer, we round the operands and then use uint64 to calculate.
  	x, err := convertNonInt2RoundUint64(sc, a)
  	if err != nil {
  		return d, errors.Trace(err)
  	}
  
  	y, err := convertNonInt2RoundUint64(sc, b)
  	if err != nil {
  		return d, errors.Trace(err)
  	}
  
  	d.SetUint64(x ^ y)
  	return d, nil
  }
docs: // ComputeBitXor computes the result of a ^ b.