/** * Creates a new instance storing the current position of the {@link org.bson.io.BsonOutput}. */ protected Mark() { this.position = bsonOutput.getPosition(); }
/** * Backpatches the message length into the beginning of the message. * * @param startPosition the start position of the message * @param bsonOutput the output */ protected void backpatchMessageLength(final int startPosition, final BsonOutput bsonOutput) { int messageLength = bsonOutput.getPosition() - startPosition; bsonOutput.writeInt32(bsonOutput.getPosition() - messageLength, messageLength); }
private static boolean writeDocument(final BsonWriter writer, final BsonOutput bsonOutput, final MessageSettings settings, final BsonDocument document, final int messageStartPosition, final int batchItemCount) { int currentPosition = bsonOutput.getPosition(); getCodec(document).encode(writer, document, ENCODER_CONTEXT); int messageSize = bsonOutput.getPosition() - messageStartPosition; int documentSize = bsonOutput.getPosition() - currentPosition; if (exceedsLimits(settings, messageSize, documentSize, batchItemCount)) { bsonOutput.truncateToPosition(currentPosition); return false; } return true; }
private void backpatchSize() { int size = bsonOutput.getPosition() - getContext().startPosition; validateSize(size); bsonOutput.writeInt32(bsonOutput.getPosition() - size, size); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { writeGetMore(bsonOutput); return new EncodingMetadata(bsonOutput.getPosition()); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { writeKillCursorsPrologue(cursors.size(), bsonOutput); for (final Long cur : cursors) { bsonOutput.writeInt64(cur); } return new EncodingMetadata(bsonOutput.getPosition()); }
/** * Encoded the message to the given output. * * @param bsonOutput the output * @param sessionContext the session context */ public void encode(final BsonOutput bsonOutput, final SessionContext sessionContext) { notNull("sessionContext", sessionContext); int messageStartPosition = bsonOutput.getPosition(); writeMessagePrologue(bsonOutput); EncodingMetadata encodingMetadata = encodeMessageBodyWithMetadata(bsonOutput, sessionContext); backpatchMessageLength(messageStartPosition, bsonOutput); this.encodingMetadata = encodingMetadata; }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput outputStream) { writeInsertPrologue(outputStream); int firstDocumentPosition = outputStream.getPosition(); addCollectibleDocument(insertRequest.getDocument(), outputStream, new CollectibleDocumentFieldNameValidator()); return new EncodingMetadata(firstDocumentPosition); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { writeQueryPrologue(bsonOutput); int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(queryDocument, bsonOutput, new NoOpFieldNameValidator()); if (fields != null) { addDocument(fields, bsonOutput, new NoOpFieldNameValidator()); } return new EncodingMetadata(firstDocumentStartPosition); } }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput, final SessionContext sessionContext) { int messageStartPosition = bsonOutput.getPosition() - MESSAGE_PROLOGUE_LENGTH; int commandStartPosition; if (useOpMsg()) { int flagPosition = bsonOutput.getPosition(); bsonOutput.writeInt32(0); // flag bits bsonOutput.writeByte(0); // payload type commandStartPosition = bsonOutput.getPosition(); int payloadBsonOutputStartPosition = bsonOutput.getPosition(); bsonOutput.writeInt32(0); // size bsonOutput.writeCString(payload.getPayloadName()); messageStartPosition, payload); int payloadBsonOutputLength = bsonOutput.getPosition() - payloadBsonOutputStartPosition; bsonOutput.writeInt32(payloadBsonOutputStartPosition, payloadBsonOutputLength); bsonOutput.writeInt32(-1); commandStartPosition = bsonOutput.getPosition();
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { bsonOutput.writeInt32(0); // reserved bsonOutput.writeCString(getCollectionName()); int flags = 0; if (updateRequest.isUpsert()) { flags |= 1; } if (updateRequest.isMulti()) { flags |= 2; } bsonOutput.writeInt32(flags); int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(updateRequest.getFilter(), bsonOutput, new NoOpFieldNameValidator()); if (updateRequest.getType() == REPLACE) { addDocument(updateRequest.getUpdate(), bsonOutput, new CollectibleDocumentFieldNameValidator()); } else { int bufferPosition = bsonOutput.getPosition(); addDocument(updateRequest.getUpdate(), bsonOutput, new UpdateFieldNameValidator()); if (bsonOutput.getPosition() == bufferPosition + 5) { throw new IllegalArgumentException("Invalid BSON document for an update"); } } return new EncodingMetadata(firstDocumentStartPosition); }
@Override protected void doWriteStartArray() { bsonOutput.writeByte(BsonType.ARRAY.getValue()); writeCurrentName(); setContext(new Context(getContext(), BsonContextType.ARRAY, bsonOutput.getPosition())); bsonOutput.writeInt32(0); // reserve space for size }
@Override protected void doWriteStartDocument() { if (getState() == State.VALUE) { bsonOutput.writeByte(BsonType.DOCUMENT.getValue()); writeCurrentName(); } setContext(new Context(getContext(), BsonContextType.DOCUMENT, bsonOutput.getPosition())); bsonOutput.writeInt32(0); // reserve space for size }
@Override protected void doWriteJavaScriptWithScope(final String value) { bsonOutput.writeByte(BsonType.JAVASCRIPT_WITH_SCOPE.getValue()); writeCurrentName(); setContext(new Context(getContext(), BsonContextType.JAVASCRIPT_WITH_SCOPE, bsonOutput.getPosition())); bsonOutput.writeInt32(0); bsonOutput.writeString(value); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { bsonOutput.writeInt32(0); // reserved bsonOutput.writeCString(getCollectionName()); if (deleteRequest.isMulti()) { bsonOutput.writeInt32(0); } else { bsonOutput.writeInt32(1); } int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(deleteRequest.getFilter(), bsonOutput, new NoOpFieldNameValidator()); return new EncodingMetadata(firstDocumentStartPosition); } }
throw new BsonSerializationException("Document size must be at least 5"); int pipedDocumentStartPosition = bsonOutput.getPosition(); bsonOutput.writeInt32(size); byte[] bytes = new byte[size - 4]; bsonOutput.truncateToPosition(bsonOutput.getPosition() - 1); setContext(new Context(getContext(), BsonContextType.DOCUMENT, pipedDocumentStartPosition)); setState(State.NAME); pipeExtraElements(extraElements); bsonOutput.writeByte(0); bsonOutput.writeInt32(pipedDocumentStartPosition, bsonOutput.getPosition() - pipedDocumentStartPosition); setContext(getContext().getParentContext()); validateSize(bsonOutput.getPosition() - pipedDocumentStartPosition); } else if (extraElements != null) { super.pipe(reader, extraElements);
/** * Backpatches the message length into the beginning of the message. * * @param startPosition the start position of the message * @param bsonOutput the output */ protected void backpatchMessageLength(final int startPosition, final BsonOutput bsonOutput) { int messageLength = bsonOutput.getPosition() - startPosition; bsonOutput.writeInt32(bsonOutput.getPosition() - messageLength, messageLength); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { writeGetMore(bsonOutput); return new EncodingMetadata(bsonOutput.getPosition()); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput outputStream) { writeInsertPrologue(outputStream); int firstDocumentPosition = outputStream.getPosition(); addCollectibleDocument(insertRequest.getDocument(), outputStream, new CollectibleDocumentFieldNameValidator()); return new EncodingMetadata(firstDocumentPosition); }
@Override protected EncodingMetadata encodeMessageBodyWithMetadata(final BsonOutput bsonOutput) { writeQueryPrologue(bsonOutput); int firstDocumentStartPosition = bsonOutput.getPosition(); addDocument(queryDocument, bsonOutput, new NoOpFieldNameValidator()); if (fields != null) { addDocument(fields, bsonOutput, new NoOpFieldNameValidator()); } return new EncodingMetadata(firstDocumentStartPosition); } }