From 472664633f5ed8b9e08b125fa222f14b1d2e77db Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Mon, 24 Feb 2025 09:51:12 -0500 Subject: [PATCH 1/2] PHPC-2519: Bump libmongoc to 1.30.1 (#1792) This pulls in upstream changes to address builder failures with GCC 15 (PHPC-2515). --- .../config/generated/build/build-libmongoc.yml | 2 +- .../config/templates/build/build-libmongoc.yml | 2 +- config.m4 | 8 ++++---- sbom.json | 16 ++++++++-------- src/LIBMONGOC_VERSION_CURRENT | 2 +- src/libmongoc | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.evergreen/config/generated/build/build-libmongoc.yml b/.evergreen/config/generated/build/build-libmongoc.yml index 62cf0f075..b1e845197 100644 --- a/.evergreen/config/generated/build/build-libmongoc.yml +++ b/.evergreen/config/generated/build/build-libmongoc.yml @@ -12,7 +12,7 @@ tasks: - func: "compile driver" vars: PHP_VERSION: "8.3" - LIBMONGOC_VERSION: "1.30.0" + LIBMONGOC_VERSION: "1.30.1" - func: "upload build" - name: "build-php-8.3-libmongoc-next-stable" diff --git a/.evergreen/config/templates/build/build-libmongoc.yml b/.evergreen/config/templates/build/build-libmongoc.yml index 53e57f2cb..3ae136345 100644 --- a/.evergreen/config/templates/build/build-libmongoc.yml +++ b/.evergreen/config/templates/build/build-libmongoc.yml @@ -10,7 +10,7 @@ - func: "compile driver" vars: PHP_VERSION: "%phpVersion%" - LIBMONGOC_VERSION: "1.30.0" + LIBMONGOC_VERSION: "1.30.1" - func: "upload build" - name: "build-php-%phpVersion%-libmongoc-next-stable" diff --git a/config.m4 b/config.m4 index 89a7e3e64..2d6f90508 100644 --- a/config.m4 +++ b/config.m4 @@ -277,7 +277,7 @@ if test "$PHP_MONGODB" != "no"; then PHP_MONGODB_MONGOCRYPT_VERSION_STRING="None" if test "$PHP_MONGODB_SYSTEM_LIBS" != "no"; then - PKG_CHECK_MODULES([PHP_MONGODB_BSON], [libbson-1.0 >= 1.30.0], [ + PKG_CHECK_MODULES([PHP_MONGODB_BSON], [libbson-1.0 >= 1.30.1], [ PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG libbson-1.0 --modversion` PHP_MONGODB_BSON_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" @@ -285,10 +285,10 @@ if test "$PHP_MONGODB" != "no"; then PHP_EVAL_LIBLINE($PHP_MONGODB_BSON_LIBS, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBBSON, 1, [Use system libbson]) ],[ - AC_MSG_ERROR([Could not find system library for libbson >= 1.30.0]) + AC_MSG_ERROR([Could not find system library for libbson >= 1.30.1]) ]) - PKG_CHECK_MODULES([PHP_MONGODB_MONGOC], [libmongoc-1.0 >= 1.30.0], [ + PKG_CHECK_MODULES([PHP_MONGODB_MONGOC], [libmongoc-1.0 >= 1.30.1], [ PHP_MONGODB_BSON_VERSION=`$PKG_CONFIG libbson-1.0 --modversion` PHP_MONGODB_BSON_VERSION_STRING="System ($PHP_MONGODB_BSON_VERSION)" @@ -296,7 +296,7 @@ if test "$PHP_MONGODB" != "no"; then PHP_EVAL_LIBLINE($PHP_MONGODB_MONGOC_LIBS, MONGODB_SHARED_LIBADD) AC_DEFINE(HAVE_SYSTEM_LIBMONGOC, 1, [Use system libmongoc]) ],[ - AC_MSG_ERROR(Could not find system library for libmongoc >= 1.30.0) + AC_MSG_ERROR(Could not find system library for libmongoc >= 1.30.1) ]) if test "$PHP_MONGODB_CLIENT_SIDE_ENCRYPTION" != "no"; then diff --git a/sbom.json b/sbom.json index 962cdbe84..8c53849e3 100644 --- a/sbom.json +++ b/sbom.json @@ -19,22 +19,22 @@ "version": "1.12.0" }, { - "bom-ref": "pkg:github/mongodb/mongo-c-driver@1.30.0", + "bom-ref": "pkg:github/mongodb/mongo-c-driver@1.30.1", "externalReferences": [ { "type": "distribution", - "url": "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/1.30.0.tar.gz" + "url": "https://github.com/mongodb/mongo-c-driver/archive/refs/tags/1.30.1.tar.gz" }, { "type": "website", - "url": "https://github.com/mongodb/mongo-c-driver/tree/1.30.0" + "url": "https://github.com/mongodb/mongo-c-driver/tree/1.30.1" } ], "group": "mongodb", "name": "mongo-c-driver", - "purl": "pkg:github/mongodb/mongo-c-driver@1.30.0", + "purl": "pkg:github/mongodb/mongo-c-driver@1.30.1", "type": "library", - "version": "1.30.0" + "version": "1.30.1" } ], "dependencies": [ @@ -42,11 +42,11 @@ "ref": "pkg:github/mongodb/libmongocrypt@1.12.0" }, { - "ref": "pkg:github/mongodb/mongo-c-driver@1.30.0" + "ref": "pkg:github/mongodb/mongo-c-driver@1.30.1" } ], "metadata": { - "timestamp": "2025-02-07T15:48:29.888317+00:00", + "timestamp": "2025-02-21T15:21:36.741928+00:00", "tools": [ { "externalReferences": [ @@ -90,7 +90,7 @@ ] }, "serialNumber": "urn:uuid:acb30d08-ee47-4ff0-b301-d66ef1f54082", - "version": 9, + "version": 10, "$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json", "bomFormat": "CycloneDX", "specVersion": "1.5", diff --git a/src/LIBMONGOC_VERSION_CURRENT b/src/LIBMONGOC_VERSION_CURRENT index 034552a83..7f3c3affd 100644 --- a/src/LIBMONGOC_VERSION_CURRENT +++ b/src/LIBMONGOC_VERSION_CURRENT @@ -1 +1 @@ -1.30.0 +1.30.1 diff --git a/src/libmongoc b/src/libmongoc index be3955bb9..81db5f239 160000 --- a/src/libmongoc +++ b/src/libmongoc @@ -1 +1 @@ -Subproject commit be3955bb98ecabeb8e2873804f3345250e9bff60 +Subproject commit 81db5f239b6d58356ee447f5655fa36df36b4ac2 From 564c3774377f13b0ec0762fb30fa89808192d1fa Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 25 Feb 2025 10:26:55 -0500 Subject: [PATCH 2/2] PHPC-2518: Support sort option for updateOne and replaceOne (#1794) updateMany does not support sort. That validation is handled by mongoc_bulk_operation_update_many_with_opts(). --- src/MongoDB/BulkWrite.c | 1 + tests/bulk/bulkwrite-update-008.phpt | 81 ++++++++++++++++++++++ tests/bulk/bulkwrite-update_error-009.phpt | 22 ++++++ 3 files changed, 104 insertions(+) create mode 100644 tests/bulk/bulkwrite-update-008.phpt create mode 100644 tests/bulk/bulkwrite-update_error-009.phpt diff --git a/src/MongoDB/BulkWrite.c b/src/MongoDB/BulkWrite.c index 1dcd5ce7f..d72c4c79a 100644 --- a/src/MongoDB/BulkWrite.c +++ b/src/MongoDB/BulkWrite.c @@ -280,6 +280,7 @@ static bool php_phongo_bulkwrite_update_apply_options(bson_t* boptions, zval* zo PHONGO_BULKWRITE_APPEND_BOOL("upsert", upsert); PHONGO_BULKWRITE_OPT_ARRAY("arrayFilters"); PHONGO_BULKWRITE_OPT_DOCUMENT("collation"); + PHONGO_BULKWRITE_OPT_DOCUMENT("sort"); if (!php_phongo_bulkwrite_opt_hint(boptions, zoptions)) { return false; diff --git a/tests/bulk/bulkwrite-update-008.phpt b/tests/bulk/bulkwrite-update-008.phpt new file mode 100644 index 000000000..6b43154fa --- /dev/null +++ b/tests/bulk/bulkwrite-update-008.phpt @@ -0,0 +1,81 @@ +--TEST-- +MongoDB\Driver\BulkWrite::update() with sort option +--SKIPIF-- + + + + +--FILE-- +getCommandName() !== 'update') { + return; + } + + printf("update included sort: %s\n", json_encode($event->getCommand()->updates[0]->sort)); + } + + public function commandSucceeded(MongoDB\Driver\Monitoring\CommandSucceededEvent $event): void + { + } + + public function commandFailed(MongoDB\Driver\Monitoring\CommandFailedEvent $event): void + { + } +} + +$manager = create_test_manager(); + +$bulk = new MongoDB\Driver\BulkWrite(); +$bulk->insert(['_id' => 1]); +$bulk->insert(['_id' => 2]); +$bulk->insert(['_id' => 3]); +$manager->executeBulkWrite(NS, $bulk); + +MongoDB\Driver\Monitoring\addSubscriber(new CommandLogger); + +$bulk = new MongoDB\Driver\BulkWrite; +$bulk->update(['_id' => ['$gt' => 1]], ['$set' => ['x' => 11]], ['sort' => ['_id' => 1]]); +$manager->executeBulkWrite(NS, $bulk); + +$bulk = new MongoDB\Driver\BulkWrite; +$bulk->update(['_id' => ['$gt' => 1]], ['x' => 22], ['sort' => ['_id' => -1]]); +$manager->executeBulkWrite(NS, $bulk); + +$cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query([])); + +var_dump($cursor->toArray()); + +?> +===DONE=== + +--EXPECTF-- +update included sort: {"_id":1} +update included sort: {"_id":-1} +array(3) { + [0]=> + object(stdClass)#%d (%d) { + ["_id"]=> + int(1) + } + [1]=> + object(stdClass)#%d (%d) { + ["_id"]=> + int(2) + ["x"]=> + int(11) + } + [2]=> + object(stdClass)#%d (%d) { + ["_id"]=> + int(3) + ["x"]=> + int(22) + } +} +===DONE=== diff --git a/tests/bulk/bulkwrite-update_error-009.phpt b/tests/bulk/bulkwrite-update_error-009.phpt new file mode 100644 index 000000000..1d41c788d --- /dev/null +++ b/tests/bulk/bulkwrite-update_error-009.phpt @@ -0,0 +1,22 @@ +--TEST-- +MongoDB\Driver\BulkWrite::update() with multi:true prohibits sort option +--SKIPIF-- + +--FILE-- +update(['x' => ['$gt' => 1]], ['$set' => ['y' => 11]], ['multi' => true, 'sort' => ['x' => 1]]); +}, MongoDB\Driver\Exception\InvalidArgumentException::class), "\n"; + +?> +===DONE=== + +--EXPECT-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Invalid option 'sort' +===DONE===