TEST(TestCommand, testUpdateCommand) { cout << "testUpdateCommand" << endl; FileOutputStream* fos = new FileOutputStream("test.dat", "wb"); CommandWriter* commandWriter = new CommandWriter(fos); UpdateCommand cmd; cmd.setDB("testdb"); cmd.setNameSpace("test.namespace.db"); BSONObj obj; std::string* uid = uuid(); obj.add("_id", const_cast<char*>(uid->c_str())); delete uid; obj.add("name", "Cross"); obj.add("age", 18); cmd.setBSON(obj); commandWriter->writeCommand(&cmd); fos->close(); delete fos; delete commandWriter; FileInputStream* fis = new FileInputStream("test.dat", "rb"); CommandReader* reader = new CommandReader(fis); UpdateCommand* rdCmd = (UpdateCommand*) reader->readCommand(); EXPECT_TRUE(rdCmd != NULL); EXPECT_TRUE(rdCmd->nameSpace()->compare("test.namespace.db") == 0); EXPECT_TRUE(rdCmd->DB()->compare("testdb") == 0); BSONObj* objResult = rdCmd->bson(); EXPECT_TRUE(objResult != NULL); EXPECT_TRUE(objResult->has("name")); EXPECT_TRUE(objResult->getString("name").compare("Cross") == 0); }
bool Connection::update(const std::string& db, const std::string& ns, const BSONObj& obj) { if (_logger->isDebug()) _logger->debug(2, "Update command. db: %s, ns: %s, bson: %s", db.c_str(), ns.c_str(), obj.toChar()); UpdateCommand cmd; cmd.setBSON(obj); cmd.setDB(db); cmd.setNameSpace(ns); _commandWriter->writeCommand(&cmd); cmd.readResult(_inputStream); return true; }
bool DjondbConnection::update(const char* db, const char* ns, const BSONObj& obj) { if (_logger->isDebug()) _logger->debug(2, "Update command. db: %s, ns: %s, bson: %s", db, ns, BSONObj(obj).toChar()); if (!isOpen()) { throw DjondbException(D_ERROR_CONNECTION, "Not connected to any server"); } if (!obj.has("_id") || !obj.has("_revision")) { throw DjondbException(D_ERROR_INVALID_STATEMENT, "The update command requires a document with _id and _revision."); } UpdateCommand cmd; cmd.setBSON(obj); cmd.setDB(db); cmd.setNameSpace(ns); prepareOptions((Command*)&cmd); _commandWriter->writeCommand(&cmd); cmd.readResult(_inputStream); return true; }