示例#1
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;
}
void EntityCommandManager::publishUpdateCommand(Entity* entity)
{
	UpdateCommand* currentUpdateCommand = nullptr;
	bool available = updateCommandRecycleQueue->take(currentUpdateCommand);

	if (!available)
	{
		currentUpdateCommand = new UpdateCommand(updateCommandRecycleQueue, updateTaskCounter);
	}

	currentUpdateCommand->init(entity);

	WorkerManager::getInstance()->sendCommand(currentUpdateCommand);
}
示例#3
0
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);
}
示例#4
0
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;
}