void SQLite3Backend::updateUserSetting(long id, const std::string &variable, const std::string &value) { BEGIN(m_updateUserSetting); BIND_STR(m_updateUserSetting, value); BIND_INT(m_updateUserSetting, id); BIND_STR(m_updateUserSetting, variable); EXECUTE_STATEMENT(m_updateUserSetting, "m_updateUserSetting"); }
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::getUserSetting(long id, const std::string &variable, int &type, std::string &value) { BEGIN(m_getUserSetting); BIND_INT(m_getUserSetting, id); BIND_STR(m_getUserSetting, variable); if(sqlite3_step(m_getUserSetting) != SQLITE_ROW) { BEGIN(m_setUserSetting); BIND_INT(m_setUserSetting, id); BIND_STR(m_setUserSetting, variable); BIND_INT(m_setUserSetting, type); BIND_STR(m_setUserSetting, value); EXECUTE_STATEMENT(m_setUserSetting, "m_setUserSetting"); } else { type = GET_INT(m_getUserSetting); value = GET_STR(m_getUserSetting); } int ret; while((ret = sqlite3_step(m_getUserSetting)) == SQLITE_ROW) { } }
long SQLite3Backend::addBuddy(long userId, const BuddyInfo &buddyInfo) { // "INSERT INTO " + m_prefix + "buddies (user_id, uin, subscription, groups, nickname, flags) VALUES (?, ?, ?, ?, ?, ?)" std::string groups = StorageBackend::serializeGroups(buddyInfo.groups); BEGIN(m_addBuddy); BIND_INT(m_addBuddy, userId); BIND_STR(m_addBuddy, buddyInfo.legacyName); BIND_STR(m_addBuddy, buddyInfo.subscription); BIND_STR(m_addBuddy, groups); BIND_STR(m_addBuddy, buddyInfo.alias); BIND_INT(m_addBuddy, buddyInfo.flags); if(sqlite3_step(m_addBuddy) != SQLITE_DONE) { LOG4CXX_ERROR(logger, "addBuddy query"<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db))); return -1; } long id = (long) sqlite3_last_insert_rowid(m_db); // INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?) BEGIN(m_updateBuddySetting); BIND_INT(m_updateBuddySetting, userId); BIND_INT(m_updateBuddySetting, id); BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->first); BIND_INT(m_updateBuddySetting, TYPE_STRING); BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->second.s); EXECUTE_STATEMENT(m_updateBuddySetting, "updateBuddySetting query"); return id; }
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) { } }
bool getAvatar(const std::string &db_path, const std::string &name, std::string &photo) { bool ret = false; sqlite3 *db; LOG4CXX_INFO(logger, "Opening database " << db_path); if (sqlite3_open(db_path.c_str(), &db)) { sqlite3_close(db); LOG4CXX_ERROR(logger, "Can't open database"); } else { sqlite3_stmt *stmt; PREP_STMT(stmt, "SELECT avatar_image FROM Contacts WHERE skypename=?"); if (stmt) { BEGIN(stmt); BIND_STR(stmt, name); if(sqlite3_step(stmt) == SQLITE_ROW) { int size = sqlite3_column_bytes(stmt, 0); if (size > 0) { const void *data = sqlite3_column_blob(stmt, 0); photo = std::string((const char *)data + 1, size - 1); ret = true; } else { ret = false; } } else { LOG4CXX_ERROR(logger, (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db))); } int ret; while((ret = sqlite3_step(stmt)) == SQLITE_ROW) { } FINALIZE_STMT(stmt); } else { LOG4CXX_ERROR(logger, "Can't create prepared statement"); LOG4CXX_ERROR(logger, (sqlite3_errmsg(db) == NULL ? "" : sqlite3_errmsg(db))); } sqlite3_close(db); } return ret; }
void SQLite3Backend::updateBuddy(long userId, const BuddyInfo &buddyInfo) { // UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=? std::string groups = StorageBackend::serializeGroups(buddyInfo.groups); BEGIN(m_updateBuddy); BIND_STR(m_updateBuddy, groups); BIND_STR(m_updateBuddy, buddyInfo.alias); BIND_INT(m_updateBuddy, buddyInfo.flags); BIND_STR(m_updateBuddy, buddyInfo.subscription); BIND_INT(m_updateBuddy, userId); BIND_STR(m_updateBuddy, buddyInfo.legacyName); EXECUTE_STATEMENT(m_updateBuddy, "updateBuddy query"); // INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?) BEGIN(m_updateBuddySetting); BIND_INT(m_updateBuddySetting, userId); BIND_INT(m_updateBuddySetting, buddyInfo.id); BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->first); BIND_INT(m_updateBuddySetting, TYPE_STRING); BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->second.s); EXECUTE_STATEMENT(m_updateBuddySetting, "updateBuddySetting query"); }