Skip to content

PHPC-2571 Import BulkWrite tests for Client BulkWriteCommand #1819

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 17, 2025

Conversation

GromNaN
Copy link
Member

@GromNaN GromNaN commented Apr 16, 2025

Fix PHPC-2571

Copy link
Member Author

@GromNaN GromNaN left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alcaeus I spotted differences between existing collection BulkWrite and the new client BulkWiteCommand. I need your opinion wether we converge to the same behavior or we keep things different for good reasons.

@GromNaN
Copy link
Member Author

GromNaN commented Apr 17, 2025

Changes:

Since UTF-8 validation is already broken, there are requests to disable, validation negatively impacts performance, and it is not a spec requirement, this PR excludes default validation in MongoClient.bulkWrite.

  • Use the $set operator for every updateOne tests what were passing a document directly.
  • Update the tests for the new exception class and message

@GromNaN GromNaN marked this pull request as ready for review April 17, 2025 08:19
@GromNaN GromNaN requested a review from a team as a code owner April 17, 2025 08:19
@GromNaN GromNaN requested review from alcaeus and removed request for a team April 17, 2025 08:20
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is replaced by bulkwritecommand-insertOne-004.phpt

@GromNaN GromNaN merged commit e3fa20c into mongodb:feature/client-bulk-write Apr 17, 2025
60 checks passed
@GromNaN GromNaN deleted the PHPC-2571 branch April 17, 2025 09:18
alcaeus pushed a commit that referenced this pull request May 9, 2025
* PHPC-2478: Implement API for bulkWrite command (#1790)

* PHPC-2495, PHPC-2490, PHPC-2491, PHPC-2492: BulkWriteCommand ctor and ops

* PHPC-2494: BulkWriteCommandResult and BulkWriteCommandException

It was possible to reuse WriteConcernError and WriteError with slight changes to their init functions.

* Include missing header in WriteResult.h

This was not necessary for compilation, but it makes the header internally consistent.

* PHPC-2493: Manager and Server::executeBulkWriteCommand()

* PHPC-2494: Handle null error fields in BulkWriteCommandResult

Always return arrays for writeErrors and writeConcernErrors

* PHPC-2494: Return writeErrors as an associative array

* PHPC-2493: Revise error handling for mongoc_bulkwrite_execute

* Consistent WriteError and WriteConcernError parsing for bulk write results

* BulkWriteCommand tests

* clang-format

* Remove BulkWriteCommandResult::getServer()

Per CDRIVER-5843, libmongoc does not consistently populate this field. It also isn't required by the spec, so omit it for now.

* Check for _id extraction before appending insert

* Regenerate BulkWriteCommandException arginfo

* PHPC-2493: Relocate writeConcern option to executeBulkWriteCommand()

* Parse sort option for replaceOne and updateOne

* BulkWriteCommand::replaceOne() need not accept root-level arrays

* Preserve empty documents for verbose results and error reply

Result maps should only be null if verboseResults=false. Additionally, the error reply document can default to an empty document on error (as it is in libmongoc).

* PHPC-2494: Relocate error fields to BulkWriteCommandException

Revise the stubs to reflect that executeBulkWriteCommand() always returns a BulkWriteCommandResult. If the result is unacknowledged, that is reported via isAcknowledged() and other methods can throw, which is consistent with WriteResult for the legacy bulk write API.

If the result is empty on error (i.e. no writes were successful), BulkWriteCommandException::$partialResult is left unset.

* Throw BulkWriteCommandException directly for server errors

This also ensures that BulkWriteCommandException uses the original server-side error code and message (if available) for top-level errors.

* Check for empty error_reply instead of NULL

mongoc_bulkwriteexception_errorreply() always returns an initialized document, but it may be empty. This ensures that an InvalidArgumentException is not unnecessarily proxied behind a BulkWriteCommandException.

* PHPC-2571 Import BulkWrite tests for Client BulkWriteCommand (#1819)

* Add tests on client bulk write replaceOne, updateMany and deleteMany (#1820)

---------

Co-authored-by: Jeremy Mikola <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants