getBuddies sqlite statement

This commit is contained in:
HanzZ 2011-04-10 20:22:21 +02:00
parent 64536009a8
commit e58ede7d51
4 changed files with 36 additions and 9 deletions

View file

@ -77,7 +77,7 @@ class SQLite3Backend : public StorageBackend
/// \param id id of user - UserInfo.id
/// \param roster string list used to store user's roster
/// \return true if user has been found in database and roster has been fetched
bool getBuddies(long id, std::list<std::string> &roster);
bool getBuddies(long id, std::list<BuddyInfo> &roster);
long addBuddy(long userId, const BuddyInfo &buddyInfo);
@ -103,6 +103,7 @@ class SQLite3Backend : public StorageBackend
sqlite3_stmt *m_removeUserBuddiesSettings;
sqlite3_stmt *m_addBuddy;
sqlite3_stmt *m_updateBuddy;
sqlite3_stmt *m_getBuddies;
};
}

View file

@ -71,7 +71,7 @@ class StorageBackend
virtual bool removeUser(long id) = 0;
/// getBuddies
virtual bool getBuddies(long id, std::list<std::string> &roster) = 0;
virtual bool getBuddies(long id, std::list<BuddyInfo> &roster) = 0;
virtual long addBuddy(long userId, const BuddyInfo &buddyInfo) = 0;
virtual void updateBuddy(long userId, const BuddyInfo &buddyInfo) = 0;

View file

@ -42,10 +42,14 @@
}
#define BEGIN(STATEMENT) sqlite3_reset(m_addBuddy);\
int STATEMENT##_id = 1;
int STATEMENT##_id = 1;\
int STATEMENT##_id_get = -1;\
(void)STATEMENT##_id_get;
#define BIND_INT(STATEMENT, VARIABLE) sqlite3_bind_int(STATEMENT, STATEMENT##_id++, VARIABLE);
#define BIND_STR(STATEMENT, VARIABLE) sqlite3_bind_text(STATEMENT, STATEMENT##_id++, VARIABLE.c_str(), -1, SQLITE_STATIC);
#define BIND_INT(STATEMENT, VARIABLE) sqlite3_bind_int(STATEMENT, STATEMENT##_id++, VARIABLE)
#define BIND_STR(STATEMENT, VARIABLE) sqlite3_bind_text(STATEMENT, STATEMENT##_id++, VARIABLE.c_str(), -1, SQLITE_STATIC)
#define GET_INT(STATEMENT) sqlite3_column_int(STATEMENT, STATEMENT##_id_get++)
#define GET_STR(STATEMENT) (const char *) sqlite3_column_text(STATEMENT, STATEMENT##_id_get++)
#define EXECUTE_STATEMENT(STATEMENT, NAME) if(sqlite3_step(STATEMENT) != SQLITE_DONE) {\
onStorageError(NAME, (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db)));\
}
@ -95,6 +99,7 @@ bool SQLite3Backend::connect() {
PREP_STMT(m_addBuddy, "INSERT INTO " + m_prefix + "buddies (user_id, uin, subscription, groups, nickname, flags) VALUES (?, ?, ?, ?, ?, ?)");
PREP_STMT(m_updateBuddy, "UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=?");
PREP_STMT(m_getBuddies, "SELECT id uin, subscription, nickname, groups, flags FROM " + m_prefix + "buddies WHERE user_id=? ORDER BY id ASC");
return true;
}
@ -239,7 +244,28 @@ void SQLite3Backend::updateBuddy(long userId, const BuddyInfo &buddyInfo) {
EXECUTE_STATEMENT(m_updateBuddy, "updateBuddy query");
}
bool SQLite3Backend::getBuddies(long id, std::list<std::string> &roster) {
bool SQLite3Backend::getBuddies(long id, std::list<BuddyInfo> &roster) {
// "SELECT id, user_id, uin, subscription, nickname, groups, flags FROM " + m_prefix + "buddies WHERE user_id=? ORDER BY id ASC"
BEGIN(m_getBuddies);
BIND_INT(m_getBuddies, id);
int ret;
while((ret = sqlite3_step(m_getUser)) == SQLITE_ROW) {
BuddyInfo b;
b.id = GET_INT(m_getBuddies);
b.legacyName = GET_STR(m_getBuddies);
b.subscription = GET_STR(m_getBuddies);
b.alias = GET_STR(m_getBuddies);
b.groups.push_back(GET_STR(m_getBuddies));
b.flags = GET_INT(m_getBuddies);
roster.push_back(b);
}
if (ret != SQLITE_DONE) {
onStorageError("getBuddies query", (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db)));
return false;
}
return true;
}

View file

@ -77,11 +77,11 @@ bool UserRegistration::unregisterUser(const std::string &barejid) {
User *user = m_userManager->getUser(barejid);
// roster contains already escaped jids
std::list <std::string> roster;
std::list <BuddyInfo> roster;
m_storageBackend->getBuddies(userInfo.id, roster);
for(std::list<std::string>::iterator u = roster.begin(); u != roster.end() ; u++){
std::string name = *u;
for(std::list<BuddyInfo>::iterator u = roster.begin(); u != roster.end() ; u++){
std::string name = (*u).legacyName;
response = Swift::Presence::create();
response->setTo(Swift::JID(barejid));