protected function execute($arguments = array(), $options = array())
  {
    $databaseManager = new sfDatabaseManager($this->configuration);
    $this->conn = $databaseManager->getDatabase('doctrine')->getDoctrineConnection();

    $sql = 'SELECT id FROM member WHERE is_active != 0';
    $where = array();
    if ( $options['min'] && $options['max']  && $options['min'] <= $options['max'])
    {
        $sql .= ' AND id BETWEEN ? AND ?';
        $where = array(intval($options['min']),intval($options['max']));
    }
    $memberIds = $this->conn->fetchColumn($sql, $where);

    if (count($memberIds) < $options['number'])
    {
      throw new Exception('Too few members. Please run "opKdt:generate-member" first.');
    }

    foreach ($memberIds as $id)
    {
      $ds = Doctrine::getTable('MemberRelationship')->createQuery()
        ->select('member_id_to')
        ->where('member_id_from = ?', $id)
        ->execute(array(), Doctrine::HYDRATE_NONE);
      $id1 = array_map(create_function('$id', 'return (int)$id[0];'), $ds);
      $ds = Doctrine::getTable('MemberRelationship')->createQuery()
        ->select('member_id_from')
        ->where('member_id_to = ?', $id)
        ->execute(array(), Doctrine::HYDRATE_NONE);
      $id2 = array_map(create_function('$id', 'return (int)$id[0];'), $ds);
      $friendIds = array_merge($id1,$id2);
      $friendIds[] = (int)$id;
      $candidate = array_diff($memberIds, $friendIds);
      shuffle($candidate);
      $candidateSlices = array_slice($candidate, 0, $options['number']);
      foreach ($candidateSlices as $memberIdTo)
      {
        $mr1 = new MemberRelationship();
        $mr1->setMemberIdFrom($id);
        $mr1->setMemberIdTo($memberIdTo);
        $rate = $options['prerate'];
        if ($rate != 0 && rand(1,100) <= $rate )
        {
          // 一定割合で申請のみ
          $mr1->setIsFriend(false);
          $mr1->setIsFriendPre(true);
          $mr1->save();
          $mr1->free();
          $this->logSection('request friends', sprintf("%s - %s", $id, $memberIdTo));
        } else {
          $mr1->setIsFriend(true);
          $mr1->save();
          $mr1->free();
          $mr2= new MemberRelationship();
          $mr2->setMemberIdFrom($memberIdTo);
          $mr2->setMemberIdTo($id);
          $mr2->setIsFriend(true);
          $mr2->setIsFriendPre(false);
          $mr2->save();
          $mr2->free();
          $this->logSection('make friends', sprintf("%s - %s", $id, $memberIdTo));
        }

      }
    }
  }