void mongoc_bulk_operation_insert (mongoc_bulk_operation_t *bulk, const bson_t *document) { mongoc_write_command_t command = { 0 }; mongoc_write_command_t *last; ENTRY; bson_return_if_fail (bulk); bson_return_if_fail (document); if (bulk->commands.len) { last = &_mongoc_array_index (&bulk->commands, mongoc_write_command_t, bulk->commands.len - 1); if (last->type == MONGOC_WRITE_COMMAND_INSERT) { _mongoc_write_command_insert_append (last, &document, 1); EXIT; } } _mongoc_write_command_init_insert (&command, &document, 1, bulk->ordered, !_mongoc_write_concern_needs_gle (bulk->write_concern)); _mongoc_array_append_val (&bulk->commands, command); EXIT; }
void mongoc_bulk_operation_insert (mongoc_bulk_operation_t *bulk, const bson_t *document) { mongoc_write_command_t command = { 0 }; mongoc_write_command_t *last; ENTRY; BSON_ASSERT (bulk); BSON_ASSERT (document); if (bulk->commands.len) { last = &_mongoc_array_index (&bulk->commands, mongoc_write_command_t, bulk->commands.len - 1); if (last->type == MONGOC_WRITE_COMMAND_INSERT) { _mongoc_write_command_insert_append (last, document); EXIT; } } _mongoc_write_command_init_insert ( &command, document, bulk->flags, bulk->operation_id, !mongoc_write_concern_is_acknowledged (bulk->write_concern)); _mongoc_array_append_val (&bulk->commands, command); EXIT; }
bool mongoc_bulk_operation_insert_with_opts (mongoc_bulk_operation_t *bulk, const bson_t *document, const bson_t *opts, bson_error_t *error) { mongoc_bulk_insert_opts_t insert_opts; mongoc_write_command_t command = {0}; mongoc_write_command_t *last; bool ret = false; ENTRY; BSON_ASSERT (bulk); BSON_ASSERT (document); BULK_RETURN_IF_PRIOR_ERROR; if (!_mongoc_bulk_insert_opts_parse ( bulk->client, opts, &insert_opts, error)) { GOTO (done); } if (!_mongoc_validate_new_document (document, insert_opts.validate, error)) { GOTO (done); } if (bulk->commands.len) { last = &_mongoc_array_index ( &bulk->commands, mongoc_write_command_t, bulk->commands.len - 1); if (last->type == MONGOC_WRITE_COMMAND_INSERT) { _mongoc_write_command_insert_append (last, document); ret = true; GOTO (done); } } _mongoc_write_command_init_insert ( &command, document, opts, bulk->flags, bulk->operation_id, !mongoc_write_concern_is_acknowledged (bulk->write_concern)); _mongoc_array_append_val (&bulk->commands, command); ret = true; done: _mongoc_bulk_insert_opts_cleanup (&insert_opts); RETURN (ret); }
void _mongoc_write_command_init_insert (mongoc_write_command_t *command, /* IN */ const bson_t *document, /* IN */ const bson_t *cmd_opts, /* IN */ mongoc_bulk_write_flags_t flags, /* IN */ int64_t operation_id, /* IN */ bool allow_bulk_op_insert) /* IN */ { ENTRY; BSON_ASSERT (command); _mongoc_write_command_init_bulk ( command, MONGOC_WRITE_COMMAND_INSERT, flags, operation_id, cmd_opts); command->u.insert.allow_bulk_op_insert = (uint8_t) allow_bulk_op_insert; /* must handle NULL document from mongoc_collection_insert_bulk */ if (document) { _mongoc_write_command_insert_append (command, document); } EXIT; }
void _mongoc_write_command_init_insert (mongoc_write_command_t *command, /* IN */ const bson_t *document, /* IN */ mongoc_bulk_write_flags_t flags, /* IN */ bool allow_bulk_op_insert) /* IN */ { ENTRY; BSON_ASSERT (command); command->type = MONGOC_WRITE_COMMAND_INSERT; command->documents = bson_new (); command->n_documents = 0; command->flags = flags; command->u.insert.allow_bulk_op_insert = (uint8_t)allow_bulk_op_insert; command->hint = 0; /* must handle NULL document from mongoc_collection_insert_bulk */ if (document) { _mongoc_write_command_insert_append (command, document); } EXIT; }
static void test_split_insert (void) { mongoc_bulk_write_flags_t write_flags = MONGOC_BULK_WRITE_FLAGS_INIT; mongoc_write_command_t command; mongoc_write_result_t result; mongoc_collection_t *collection; mongoc_client_t *client; bson_oid_t oid; bson_t **docs; bson_t reply = BSON_INITIALIZER; bson_error_t error; mongoc_server_stream_t *server_stream; int i; bool r; client = test_framework_client_new (); assert (client); collection = get_test_collection (client, "test_split_insert"); assert (collection); docs = (bson_t **)bson_malloc (sizeof(bson_t*) * 3000); for (i = 0; i < 3000; i++) { docs [i] = bson_new (); bson_oid_init (&oid, NULL); BSON_APPEND_OID (docs [i], "_id", &oid); } _mongoc_write_result_init (&result); _mongoc_write_command_init_insert (&command, docs[0], write_flags, ++client->cluster.operation_id, true); for (i = 1; i < 3000; i++) { _mongoc_write_command_insert_append (&command, docs[i]); } server_stream = mongoc_cluster_stream_for_writes (&client->cluster, &error); ASSERT_OR_PRINT (server_stream, error); _mongoc_write_command_execute (&command, client, server_stream, collection->db, collection->collection, NULL, 0, &result); r = _mongoc_write_result_complete (&result, 2, collection->write_concern, &reply, &error); ASSERT_OR_PRINT (r, error); assert (result.nInserted == 3000); _mongoc_write_command_destroy (&command); _mongoc_write_result_destroy (&result); ASSERT_OR_PRINT (mongoc_collection_drop (collection, &error), error); for (i = 0; i < 3000; i++) { bson_destroy (docs [i]); } bson_free (docs); mongoc_server_stream_cleanup (server_stream); mongoc_collection_destroy (collection); mongoc_client_destroy (client); }