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; } }
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(); }
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); }
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; }
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; }
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; }
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()); } }