@@ -55,8 +55,7 @@ mongoc_cmd_parts_init (mongoc_cmd_parts_t *parts,
55
55
parts -> assembled .command = NULL ;
56
56
parts -> assembled .query_flags = MONGOC_QUERY_NONE ;
57
57
parts -> assembled .op_msg_is_exhaust = false;
58
- parts -> assembled .payload_identifier = NULL ;
59
- parts -> assembled .payload = NULL ;
58
+ parts -> assembled .payloads_count = 0 ;
60
59
parts -> assembled .session = NULL ;
61
60
parts -> assembled .is_acknowledged = true;
62
61
parts -> assembled .is_txn_finish = false;
@@ -960,27 +959,11 @@ mongoc_cmd_is_compressible (mongoc_cmd_t *cmd)
960
959
!!strcasecmp (cmd -> command_name , "createuser" ) && !!strcasecmp (cmd -> command_name , "updateuser" );
961
960
}
962
961
963
- /*--------------------------------------------------------------------------
964
- *
965
- * _mongoc_cmd_append_payload_as_array --
966
- * Append a write command payload as an array in a BSON document.
967
- * Used by APM and Client-Side Encryption
968
- *
969
- * Arguments:
970
- * cmd The mongoc_cmd_t, which may contain a payload to be appended.
971
- * out A bson_t, which will be appended to if @cmd->payload is set.
972
- *
973
- * Pre-conditions:
974
- * - @out is initialized.
975
- * - cmd has a payload (i.e. is a write command).
976
- *
977
- * Post-conditions:
978
- * - If @cmd->payload is set, then @out is appended to with the payload
979
- * field's name ("documents" if insert, "updates" if update,
980
- * "deletes" if delete) an the payload as a BSON array.
981
- *
982
- *--------------------------------------------------------------------------
983
- */
962
+
963
+ //`_mongoc_cmd_append_payload_as_array` appends document seqence payloads as BSON arrays.
964
+ // `cmd` must contain one or more document sequence payloads (`cmd->payloads_count` > 0).
965
+ // `out` must be initialized by the caller.
966
+ // Used by APM and In-Use Encryption (document sequences are not supported for auto encryption).
984
967
void
985
968
_mongoc_cmd_append_payload_as_array (const mongoc_cmd_t * cmd , bson_t * out )
986
969
{
@@ -990,25 +973,28 @@ _mongoc_cmd_append_payload_as_array (const mongoc_cmd_t *cmd, bson_t *out)
990
973
const char * field_name ;
991
974
bson_array_builder_t * bson ;
992
975
993
- BSON_ASSERT (cmd -> payload && cmd -> payload_size );
976
+ BSON_ASSERT (cmd -> payloads_count > 0 );
977
+ BSON_ASSERT (cmd -> payloads_count <= MONGOC_CMD_PAYLOADS_COUNT_MAX );
994
978
995
- /* make array from outgoing OP_MSG payload type 1 on an "insert",
996
- * "update", or "delete" command. */
997
- field_name = _mongoc_get_documents_field_name (cmd -> command_name );
998
- BSON_ASSERT (field_name );
999
- BSON_ASSERT (BSON_APPEND_ARRAY_BUILDER_BEGIN (out , field_name , & bson ));
979
+ for (size_t i = 0 ; i < cmd -> payloads_count ; i ++ ) {
980
+ BSON_ASSERT (cmd -> payloads [i ].documents && cmd -> payloads [i ].size );
1000
981
1001
- pos = cmd -> payload ;
1002
- while (pos < cmd -> payload + cmd -> payload_size ) {
1003
- memcpy (& doc_len , pos , sizeof (doc_len ));
1004
- doc_len = BSON_UINT32_FROM_LE (doc_len );
1005
- BSON_ASSERT (bson_init_static (& doc , pos , (size_t ) doc_len ));
1006
- bson_array_builder_append_document (bson , & doc );
982
+ // Create a BSON array from a document sequence (OP_MSG Section with payloadType=1).
983
+ field_name = cmd -> payloads [i ].identifier ;
984
+ BSON_ASSERT (field_name );
985
+ BSON_ASSERT (BSON_APPEND_ARRAY_BUILDER_BEGIN (out , field_name , & bson ));
1007
986
1008
- pos += doc_len ;
1009
- }
987
+ pos = cmd -> payloads [i ].documents ;
988
+ while (pos < cmd -> payloads [i ].documents + cmd -> payloads [i ].size ) {
989
+ memcpy (& doc_len , pos , sizeof (doc_len ));
990
+ doc_len = BSON_UINT32_FROM_LE (doc_len );
991
+ BSON_ASSERT (bson_init_static (& doc , pos , (size_t ) doc_len ));
992
+ bson_array_builder_append_document (bson , & doc );
1010
993
1011
- bson_append_array_builder_end (out , bson );
994
+ pos += doc_len ;
995
+ }
996
+ bson_append_array_builder_end (out , bson );
997
+ }
1012
998
}
1013
999
1014
1000
/*--------------------------------------------------------------------------
0 commit comments