MySQLBackend::getBuddies and getBuddiesSettings

This commit is contained in:
HanzZ 2011-09-08 08:52:12 +02:00
parent 6d879dece1
commit 69756e3c80
2 changed files with 83 additions and 12 deletions

View file

@ -142,10 +142,10 @@ class MySQLBackend : public StorageBackend
Statement *m_removeUserSettings;
Statement *m_removeUserBuddiesSettings;
Statement *m_addBuddy;
MYSQL_STMT *m_updateBuddy;
Statement *m_updateBuddy;
Statement *m_updateBuddySetting;
MYSQL_STMT *m_getBuddies;
MYSQL_STMT *m_getBuddiesSettings;
Statement *m_getBuddies;
Statement *m_getBuddiesSettings;
};
}

View file

@ -269,9 +269,9 @@ MySQLBackend::~MySQLBackend(){
delete m_removeUserSettings;
delete m_removeUserBuddiesSettings;
delete m_addBuddy;
FINALIZE_STMT(m_updateBuddy);
FINALIZE_STMT(m_getBuddies);
FINALIZE_STMT(m_getBuddiesSettings);
delete m_updateBuddy;
delete m_getBuddies;
delete m_getBuddiesSettings;
FINALIZE_STMT(m_getUserSetting);
FINALIZE_STMT(m_setUserSetting);
FINALIZE_STMT(m_updateUserSetting);
@ -305,9 +305,9 @@ bool MySQLBackend::connect() {
m_removeUserBuddiesSettings = new Statement(&m_conn, "i", "DELETE FROM " + m_prefix + "buddies_settings WHERE user_id=?");
m_addBuddy = new Statement(&m_conn, "issssi", "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");
m_updateBuddy = new Statement(&m_conn, "ssisis", "UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=?");
m_getBuddies = new Statement(&m_conn, "i|issssi", "SELECT id, uin, subscription, nickname, groups, flags FROM " + m_prefix + "buddies WHERE user_id=? ORDER BY id ASC");
m_getBuddiesSettings = new Statement(&m_conn, "i|iiss", "SELECT buddy_id, type, var, value FROM " + m_prefix + "buddies_settings WHERE user_id=? ORDER BY buddy_id ASC");
m_updateBuddySetting = new Statement(&m_conn, "iisiss", "INSERT INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE value=?");
PREP_STMT(m_getUserSetting, "SELECT type, value FROM " + m_prefix + "users_settings WHERE user_id=? AND var=?");
@ -397,7 +397,6 @@ bool MySQLBackend::getUser(const std::string &barejid, UserInfo &user) {
while (m_getUser->fetch() == 0) {
ret = true;
*m_getUser >> user.id >> user.jid >> user.uin >> user.password >> user.encoding >> user.language >> user.vip;
std::cout << user.id << " " << user.jid << " " << user.uin << " " << user.password << " " << user.encoding << " " << user.language << " " << user.vip << "\n";
}
return ret;
@ -418,17 +417,89 @@ long MySQLBackend::addBuddy(long userId, const BuddyInfo &buddyInfo) {
long id = (long) mysql_insert_id(&m_conn);
// INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)
*m_updateBuddySetting << userId << id << buddyInfo.settings.find("icon_hash")->first << (int) TYPE_STRING << buddyInfo.settings.find("icon_hash")->second.s;
m_updateBuddySetting->execute();
if (!buddyInfo.settings.find("icon_hash")->second.s.empty()) {
*m_updateBuddySetting << userId << id << buddyInfo.settings.find("icon_hash")->first << (int) TYPE_STRING << buddyInfo.settings.find("icon_hash")->second.s << buddyInfo.settings.find("icon_hash")->second.s;
m_updateBuddySetting->execute();
}
return id;
}
void MySQLBackend::updateBuddy(long userId, const BuddyInfo &buddyInfo) {
// "UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=?"
*m_updateBuddy << (buddyInfo.groups.size() == 0 ? "" : buddyInfo.groups[0]);
*m_updateBuddy << buddyInfo.alias << buddyInfo.flags << buddyInfo.subscription;
*m_updateBuddy << userId << buddyInfo.legacyName;
m_updateBuddy->execute();
}
bool MySQLBackend::getBuddies(long id, std::list<BuddyInfo> &roster) {
// SELECT id, uin, subscription, nickname, groups, flags FROM " + m_prefix + "buddies WHERE user_id=? ORDER BY id ASC
*m_getBuddies << id;
// "SELECT buddy_id, type, var, value FROM " + m_prefix + "buddies_settings WHERE user_id=? ORDER BY buddy_id ASC"
*m_getBuddiesSettings << id;
SettingVariableInfo var;
long buddy_id = -1;
std::string key;
if (!m_getBuddies->execute())
return false;
while (m_getBuddies->fetch() == 0) {
BuddyInfo b;
std::string group;
*m_getBuddies >> b.id >> b.legacyName >> b.subscription >> b.alias >> group >> b.flags;
if (!group.empty())
b.groups.push_back(group);
roster.push_back(b);
}
if (!m_getBuddiesSettings->execute())
return false;
BOOST_FOREACH(BuddyInfo &b, roster) {
if (buddy_id == b.id) {
std::cout << "Adding buddy info setting " << key << "\n";
b.settings[key] = var;
buddy_id = -1;
}
while(buddy_id == -1 && m_getBuddiesSettings->fetch() == 0) {
std::string val;
*m_getBuddiesSettings >> buddy_id >> var.type >> key >> val;
switch (var.type) {
case TYPE_BOOLEAN:
var.b = atoi(val.c_str());
break;
case TYPE_STRING:
var.s = val;
break;
default:
if (buddy_id == b.id) {
buddy_id = -1;
}
continue;
break;
}
if (buddy_id == b.id) {
std::cout << "Adding buddy info setting " << key << "=" << val << "\n";
b.settings[key] = var;
buddy_id = -1;
}
}
}
while(m_getBuddiesSettings->fetch() == 0) {
}
return true;
}