From e58ede7d51dc9a44507e4b29a4bca780102df3fc Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 10 Apr 2011 20:22:21 +0200 Subject: [PATCH] getBuddies sqlite statement --- include/transport/sqlite3backend.h | 3 ++- include/transport/storagebackend.h | 2 +- src/sqlite3backend.cpp | 34 ++++++++++++++++++++++++++---- src/userregistration.cpp | 6 +++--- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/include/transport/sqlite3backend.h b/include/transport/sqlite3backend.h index bae45cc3..f6b9a054 100644 --- a/include/transport/sqlite3backend.h +++ b/include/transport/sqlite3backend.h @@ -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 &roster); + bool getBuddies(long id, std::list &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; }; } diff --git a/include/transport/storagebackend.h b/include/transport/storagebackend.h index 0ca1a67c..a2e9be4d 100644 --- a/include/transport/storagebackend.h +++ b/include/transport/storagebackend.h @@ -71,7 +71,7 @@ class StorageBackend virtual bool removeUser(long id) = 0; /// getBuddies - virtual bool getBuddies(long id, std::list &roster) = 0; + virtual bool getBuddies(long id, std::list &roster) = 0; virtual long addBuddy(long userId, const BuddyInfo &buddyInfo) = 0; virtual void updateBuddy(long userId, const BuddyInfo &buddyInfo) = 0; diff --git a/src/sqlite3backend.cpp b/src/sqlite3backend.cpp index b3fb6eff..004f51da 100644 --- a/src/sqlite3backend.cpp +++ b/src/sqlite3backend.cpp @@ -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 &roster) { +bool SQLite3Backend::getBuddies(long id, std::list &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; } diff --git a/src/userregistration.cpp b/src/userregistration.cpp index a104c6f8..61b05dab 100644 --- a/src/userregistration.cpp +++ b/src/userregistration.cpp @@ -77,11 +77,11 @@ bool UserRegistration::unregisterUser(const std::string &barejid) { User *user = m_userManager->getUser(barejid); // roster contains already escaped jids - std::list roster; + std::list roster; m_storageBackend->getBuddies(userInfo.id, roster); - for(std::list::iterator u = roster.begin(); u != roster.end() ; u++){ - std::string name = *u; + for(std::list::iterator u = roster.begin(); u != roster.end() ; u++){ + std::string name = (*u).legacyName; response = Swift::Presence::create(); response->setTo(Swift::JID(barejid));