diff --git a/src/sqlite3backend.cpp b/src/sqlite3backend.cpp index a079c90b8cce8f576605a668621be52c1a7098da..3de7371b0bddf798f3d93a765af1adecdd86ed23 100644 --- a/src/sqlite3backend.cpp +++ b/src/sqlite3backend.cpp @@ -88,6 +88,8 @@ SQLite3Backend::~SQLite3Backend(){ FINALIZE_STMT(m_removeUserBuddies); FINALIZE_STMT(m_removeUserSettings); FINALIZE_STMT(m_removeUserBuddiesSettings); + FINALIZE_STMT(m_removeBuddy); + FINALIZE_STMT(m_removeBuddySettings); FINALIZE_STMT(m_addBuddy); FINALIZE_STMT(m_updateBuddy); FINALIZE_STMT(m_getBuddies); @@ -96,6 +98,7 @@ SQLite3Backend::~SQLite3Backend(){ FINALIZE_STMT(m_setUserSetting); FINALIZE_STMT(m_updateUserSetting); FINALIZE_STMT(m_updateBuddySetting); + FINALIZE_STMT(m_getBuddySetting); FINALIZE_STMT(m_setUserOnline); FINALIZE_STMT(m_getOnlineUsers); sqlite3_close(m_db); @@ -122,11 +125,15 @@ bool SQLite3Backend::connect() { PREP_STMT(m_removeUserSettings, "DELETE FROM " + m_prefix + "users_settings WHERE user_id=?"); PREP_STMT(m_removeUserBuddiesSettings, "DELETE FROM " + m_prefix + "buddies_settings WHERE user_id=?"); + PREP_STMT(m_removeBuddy, "DELETE FROM " + m_prefix + "buddies WHERE id=?"); + PREP_STMT(m_removeBuddySettings, "DELETE FROM " + m_prefix + "buddies_settings WHERE buddy_id=?"); + 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"); PREP_STMT(m_getBuddiesSettings, "SELECT buddy_id, type, var, value FROM " + m_prefix + "buddies_settings WHERE user_id=? ORDER BY buddy_id ASC"); PREP_STMT(m_updateBuddySetting, "INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)"); + PREP_STMT(m_getBuddySetting, "SELECT type, value FROM " + m_prefix + "buddies_settings WHERE user_id=? AND buddy_id=? AND var=?"); PREP_STMT(m_getUserSetting, "SELECT type, value FROM " + m_prefix + "users_settings WHERE user_id=? AND var=?"); PREP_STMT(m_setUserSetting, "INSERT INTO " + m_prefix + "users_settings (user_id, var, type, value) VALUES (?,?,?,?)"); @@ -405,6 +412,22 @@ bool SQLite3Backend::getBuddies(long id, std::list &roster) { return true; } +void SQLite3Backend::removeBuddy(long id) { + sqlite3_reset(m_removeBuddy); + sqlite3_bind_int(m_removeBuddy, 1, id); + if(sqlite3_step(m_removeBuddy) != SQLITE_DONE) { + LOG4CXX_ERROR(logger, "removeBuddy query"<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db))); + return; + } + + sqlite3_reset(m_removeBuddySettings); + sqlite3_bind_int(m_removeBuddySettings, 1, id); + if(sqlite3_step(m_removeBuddySettings) != SQLITE_DONE) { + LOG4CXX_ERROR(logger, "removeBuddySettings query"<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db))); + return; + } +} + bool SQLite3Backend::removeUser(long id) { sqlite3_reset(m_removeUser); sqlite3_bind_int(m_removeUser, 1, id); @@ -467,6 +490,31 @@ void SQLite3Backend::updateUserSetting(long id, const std::string &variable, con EXECUTE_STATEMENT(m_updateUserSetting, "m_updateUserSetting"); } +void SQLite3Backend::getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value) { + BEGIN(m_getBuddySetting); + BIND_INT(m_getBuddySetting, userId); + BIND_INT(m_getBuddySetting, buddyId); + BIND_STR(m_getBuddySetting, variable); + if(sqlite3_step(m_getBuddySetting) == SQLITE_ROW) { + type = GET_INT(m_getBuddySetting); + value = GET_STR(m_getBuddySetting); + } + + int ret; + while((ret = sqlite3_step(m_getBuddySetting)) == SQLITE_ROW) { + } +} + +void SQLite3Backend::updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value) { + BEGIN(m_updateBuddySetting); + BIND_INT(m_updateBuddySetting, userId); + BIND_INT(m_updateBuddySetting, buddyId); + BIND_STR(m_updateBuddySetting, variable); + BIND_INT(m_updateBuddySetting, type); + BIND_STR(m_updateBuddySetting, value); + EXECUTE_STATEMENT(m_updateBuddySetting, "m_updateBuddySetting"); +} + void SQLite3Backend::beginTransaction() { exec("BEGIN TRANSACTION;"); }