bool MongodbClient::FindObjectByKey(const String &key, MongodbObject * foundObject) { DVASSERT(foundObject); MongodbObject *query = new MongodbObject(); DVASSERT(query); query->SetObjectName(key); query->Finish(); int32 status = mongo_find_one(clientData->connection, namespaceName.c_str(), (bson *)query->InternalObject(), 0, (bson *)foundObject->InternalObject()); if(MONGO_OK != status) { return false; } SafeRelease(query); return true; }
bool MongodbClient::SaveObject(MongodbObject *object) { int32 status = MONGO_ERROR; if(IsConnected()) { MongodbObject *foundObject = FindObjectByKey(object->GetObjectName()); if(foundObject) { status = mongo_update(clientData->connection, namespaceName.c_str(), (bson *)foundObject->InternalObject(), (bson *)object->InternalObject(), 0, NULL); if(MONGO_OK != status) { LogError(String("SaveObject, update"), clientData->connection->err); } SafeRelease(foundObject); } else { status = mongo_insert(clientData->connection, namespaceName.c_str(), (bson *)object->InternalObject(), NULL); if(MONGO_OK != status) { LogError(String("SaveObject, insert"), clientData->connection->err); } } } return (MONGO_OK == status); }
bool MongodbClient::SaveBinary(const String &key, uint8 *data, int32 dataSize) { int32 status = MONGO_ERROR; if(IsConnected()) { MongodbObject * binary = new MongodbObject(); DVASSERT(binary); binary->SetObjectName(key); binary->AddInt32(String("DataSize").c_str(), dataSize); binary->AddData(String("Data").c_str(), data, dataSize); binary->Finish(); MongodbObject *foundObject = FindObjectByKey(key); if(foundObject) { status = mongo_update(clientData->connection, namespaceName.c_str(), (bson *)foundObject->InternalObject(), (bson *)binary->InternalObject(), 0, NULL); if(MONGO_OK != status) { LogError(String("SaveBinary, update"), clientData->connection->err); } SafeRelease(foundObject); } else { status = mongo_insert(clientData->connection, namespaceName.c_str(), (bson *)binary->InternalObject(), NULL); if(MONGO_OK != status) { LogError(String("SaveBinary, insert"), clientData->connection->err); } } SafeRelease(binary); } return (MONGO_OK == status); }