示例#1
0
void	DataBase::addContact(const ClientPacket &pack, std::string const &loginContact)
{
  const std::string	login = pack.getLogin();

  if (login == loginContact)
    throw AlreadyExist();
  if (login == "" || loginContact == "")
    throw NotExist();

  const std::string	fname(this->DBDirectory +
			      login.substr(0, 1) + "friends" +
			      this->DBExtension);
  const std::string	cname(this->DBDirectory +
			      loginContact.substr(0, 1) + "data" +
			      this->DBExtension);
  const std::string	lname(this->DBDirectory +
  			      login.substr(0, 1) + "data" +
  			      this->DBExtension);

  if (!clients.openFile(cname) || !searchClient(loginContact))
    throw NotExist();
  if (!clients.openFile(lname) || !searchClient(login))
    throw NotExist();
  if (!friends.openOCreate(fname))
    throw FileError();
  std::cout << "Add Contact !!" << std::endl;
  std::cout << "Login : "******"LoginContact : " << loginContact << std::endl;
  if (!searchFriend(login, loginContact))
    {
      std::cout << "Serialize" << std::endl;
      fpack.setValues(login, loginContact);
      friends << fpack;
    }
}
示例#2
0
size_t Database::select_id(const std::string &table, const std::string &key_name, const std::string &key)
{
    QString query = utils::sql::prepare_select<QString>(QString::fromStdString(table), cfg::db::row::id);
    query += utils::sql::prepare_where<std::string>(key_name, utils::sql::chars::equal, utils::str::make_dquote(key)).c_str();

    QSqlQuery q = db->exec(query);
    if (q.lastError().isValid()) throw InvalidQuery(query, q.lastError());
    if (!q.next()) throw NotExist(table, key_name);

    return q.value(0).toUInt();
}
示例#3
0
const ClientPacket	&DataBase::getClient(const std::string &login)
{
  const std::string	filename(this->DBDirectory +
			     login.substr(0, 1) + "data"
			     + this->DBExtension);

  if (!clients.openOCreate(filename))
    throw FileError();
  if (!searchClient(login))
    throw NotExist();
  return (pack);
}
示例#4
0
std::vector<std::string> Database::select_row(const std::string &query, int reserve_size)
{
    QSqlQuery q = db->exec(QString::fromStdString(query));
    if (q.lastError().isValid()) throw InvalidQuery(QString::fromStdString(query), q.lastError());
    if (!q.next()) throw NotExist(query);
    std::vector<std::string> res;
    //sqlquery size unknown?! Reseve?
    if (reserve_size != -1) res.reserve(reserve_size);
    int ind = 0;
    while(q.value(ind).isValid())
    {
        res.emplace_back(q.value(ind).toString().toStdString());
        ++ind;
    }
    return res;
}
示例#5
0
Database::ReplyFormat Database::get_table_names(const std::string &table, const std::string &name)
{

    QString query(QString::fromStdString(utils::sql::prepare_select(table, name)));
    QSqlQuery q = db->exec(query);

    if (q.lastError().isValid()) throw InvalidQuery(query, q.lastError());
    if (!q.next()) throw NotExist(table, name);

    ReplyFormat result;
    do
    {
        result.push_back(q.value(0).toString().toStdString());
    }while(q.next());

    return result;
}
示例#6
0
std::deque<std::string> Database::select_column(const std::string &table, const std::string &row,
                                                const std::string &cond)
{
    std::string query = utils::sql::prepare_select(table, row);
    query+=cond;

    QSqlQuery q = db->exec(QString::fromStdString(query));
    if (q.lastError().isValid()) throw InvalidQuery(QString::fromStdString(query), q.lastError());
    if (!q.next()) throw NotExist(query);

    std::deque<std::string> res;
    do
    {
        res.emplace_back(q.value(0).toString().toStdString());
    }
    while(q.next());

    return res;
}
示例#7
0
void			DataBase::getContactList(const ClientPacket &pack, std::list<std::string> &list)
{
  const std::string	login = pack.getLogin();
  const std::string	fname(this->DBDirectory +
			      login.substr(0, 1) + "friends"
			      + this->DBExtension);
  const std::string	cname(this->DBDirectory +
			      login.substr(0, 1) + "data"
			      + this->DBExtension);

  if (login == "" || !clients.openFile(cname) || !searchClient(login))
    throw NotExist();
  if (!friends.openOCreate(fname))
    throw FileError();
  // list.clear(); // clear la liste ?
  while (friends.good() && !friends.eof())
    {
      friends >> fpack;
      if (!fpack.isErased() &&
	  fpack.getOrig() == login)
	list.push_back(fpack.getFLogin());
    }
}