/*******************pubilc interface***********************/ BuddyDesc BuddyRelationLogic::getRelation(const Relationship& relationship) { if (relationship.from == relationship.to) { return ::Self; } Relationship relation = relationship; bool changed = operRelationship(relation); Entry key(relation.to, 0); EntryListHolderPtr holder = readObject(relation.from); if (holder) { EntryList entryResult = holder->get(key); if (entryResult.empty()) { MCE_DEBUG("BuddyRelationCacheManagerI::getRelation found empty."); return ::NoPath; } if (entryResult.size() != 1) { MCE_WARN("GetRelation should found only one entry. But found " << entryResult.size() << " entries"); } if(changed){ return BuddyDescHelper::oppositeDesc(BuddyDescHelper::translateDesc(entryResult.at(0).desc)); }else{ return BuddyDescHelper::translateDesc(entryResult.at(0).desc); } } else { MCE_INFO("BuddyRelationCacheManagerI::getRelation, from: " << relation.from << " is not in cache"); } return ::NoPath; }
DB_Error DataBaseSqlite::AddUser(shared_ptr<User> user) { DB_Error ret = CreateTable("User"); if (ret == DB_OK) { EntryList entries = m_pTableComponent->GetTableFormat("User"); PDEBUG ("entry size: %lu\n", entries.size()); if (!entries.empty()) { string sql(INSERT_TABLE); sql += string("User") + VALUE + LPARENT; EntryList::iterator iter = entries.begin(); EntryList::iterator end = entries.end(); for (; iter != end;) { sql += "@" + iter->name; if (++iter != end) { sql += ", "; } } sql += string(RPARENT) + SEMI; SqliteCommand cmd(this, sql); // Ugly hard code!! PDEBUG ("Begin binding\n"); ret = cmd.Bind("@name", user->name()); ret = ret ? ret : cmd.Bind("@uuid", user->uuid()); int64 date = 0; if (user->has_reg_date()) { ret = user->reg_date(); } ret = ret ? ret : cmd.Bind("@reg_date", date); date = 0; if (user->has_last_login()) { date = user->last_login(); } ret = ret ? ret : cmd.Bind("@last_login", date); // Bind others ... ret = ret ? ret : cmd.Execute(); // Execute .... } } return ret; }
DB_Error DataBaseSqlite::CreateTable(const string& name) { DB_Error ret = DB_INVAL; EntryList entries = m_pTableComponent->GetTableFormat(name); PDEBUG ("entry size: %lu\n", entries.size()); if (!entries.empty()) { string sql(CREATE_TABLE); sql += IFNEXT + name + LPARENT; EntryList::iterator iter = entries.begin(); EntryList::iterator end = entries.end(); for (; iter != end;) { sql += iter->name + " " + g_SqlteKeywordMapping[iter->type]; if (iter->primary) { sql += PRIMARY_KEY; } if (++iter != end) { sql += ", "; } } sql += string(RPARENT) + SEMI; SqliteCommand cmd(this, sql); ret = cmd.Execute(); } PDEBUG ("Create %s, ret: %d\n", name.c_str(), ret); return ret; }