Exemple #1
0
void Document::write(BinaryWriter& writer)
{
	if ( _elements.empty() )
	{
		writer << 5;
	}
	else
	{
		std::stringstream sstream;
		Poco::BinaryWriter tempWriter(sstream);
		for(ElementSet::iterator it = _elements.begin(); it != _elements.end(); ++it)
		{
			tempWriter << static_cast<unsigned char>((*it)->type());
			BSONWriter(tempWriter).writeCString((*it)->name());
			Element::Ptr element = *it;
			element->write(tempWriter);
		}
		tempWriter.flush();
		
		Poco::Int32 len = static_cast<Poco::Int32>(5 + sstream.tellp()); /* 5 = sizeof(len) + 0-byte */
		writer << len;
		writer.writeRaw(sstream.str());
	}
	writer << '\0';
}
Exemple #2
0
void DeleteRequest::buildRequest(BinaryWriter& writer)
{
	writer << 0; // 0 - reserved for future use
	BSONWriter(writer).writeCString(_fullCollectionName);
	writer << _flags;
	_selector.write(writer);
}
void GetMoreRequest::buildRequest(BinaryWriter& writer)
{
	writer << 0; // 0 - reserved for future use
	BSONWriter(writer).writeCString(_fullCollectionName);
	writer << _numberToReturn;
	writer << _cursorID;
}
void InsertRequest::buildRequest(BinaryWriter& writer)
{
	//TODO: throw exception when no document is added

	writer << _flags;
	BSONWriter(writer).writeCString(_fullCollectionName);
	for(Document::Vector::iterator it = _documents.begin(); it != _documents.end(); ++it)
	{
		(*it)->write(writer);
	}
}
Exemple #5
0
void QueryRequest::buildRequest(BinaryWriter& writer)
{
	writer << _flags;
	BSONWriter(writer).writeCString(_fullCollectionName);
	writer << _numberToSkip;
	writer << _numberToReturn;
	_selector.write(writer);

	if ( ! _returnFieldSelector.empty() )
	{
		_returnFieldSelector.write(writer);
	}
}