From fb6a9c8ea155df87d456c99003e7f10c98b707de Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 23 Sep 2024 16:23:08 +0200 Subject: [PATCH 1/3] Remove duplicate deprecation notices for query options --- src/Operation/Find.php | 11 ----------- tests/Operation/FindTest.php | 18 ------------------ 2 files changed, 29 deletions(-) diff --git a/src/Operation/Find.php b/src/Operation/Find.php index 1d2dfb388..52c43c525 100644 --- a/src/Operation/Find.php +++ b/src/Operation/Find.php @@ -37,9 +37,6 @@ use function is_string; use function MongoDB\document_to_array; use function MongoDB\is_document; -use function trigger_error; - -use const E_USER_DEPRECATED; /** * Operation for the find command. @@ -285,14 +282,6 @@ public function __construct(private string $databaseName, private string $collec unset($this->options['readConcern']); } - if (isset($this->options['snapshot'])) { - trigger_error('The "snapshot" option is deprecated and will be removed in a future release', E_USER_DEPRECATED); - } - - if (isset($this->options['maxScan'])) { - trigger_error('The "maxScan" option is deprecated and will be removed in a future release', E_USER_DEPRECATED); - } - if (isset($this->options['codec']) && isset($this->options['typeMap'])) { throw InvalidArgumentException::cannotCombineCodecAndTypeMap(); } diff --git a/tests/Operation/FindTest.php b/tests/Operation/FindTest.php index 9e398650d..1a88cd6a2 100644 --- a/tests/Operation/FindTest.php +++ b/tests/Operation/FindTest.php @@ -55,24 +55,6 @@ public static function provideInvalidConstructorOptions() ]); } - public function testSnapshotOptionIsDeprecated(): void - { - $this->assertDeprecated(function (): void { - new Find($this->getDatabaseName(), $this->getCollectionName(), [], ['snapshot' => true]); - }); - - $this->assertDeprecated(function (): void { - new Find($this->getDatabaseName(), $this->getCollectionName(), [], ['snapshot' => false]); - }); - } - - public function testMaxScanOptionIsDeprecated(): void - { - $this->assertDeprecated(function (): void { - new Find($this->getDatabaseName(), $this->getCollectionName(), [], ['maxScan' => 1]); - }); - } - /** @dataProvider provideInvalidConstructorCursorTypeOptions */ public function testConstructorCursorTypeOption($cursorType): void { From 09c78e37b679bca2b794448823c28063f2ff17c1 Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Mon, 23 Sep 2024 16:32:28 +0200 Subject: [PATCH 2/3] PHPLIB-1533: Mark Collection::mapReduce as deprecated --- src/Collection.php | 6 ++++++ tests/Collection/CollectionFunctionalTest.php | 4 +++- tests/TestCase.php | 6 ++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Collection.php b/src/Collection.php index ab82cca5d..f872f4aa2 100644 --- a/src/Collection.php +++ b/src/Collection.php @@ -77,7 +77,11 @@ use function array_key_exists; use function current; use function is_array; +use function sprintf; use function strlen; +use function trigger_error; + +use const E_USER_DEPRECATED; class Collection { @@ -952,6 +956,8 @@ public function listSearchIndexes(array $options = []): Iterator */ public function mapReduce(JavascriptInterface $map, JavascriptInterface $reduce, string|array|object $out, array $options = []) { + @trigger_error(sprintf('The %s method is deprecated and will be removed in a future release.', __METHOD__), E_USER_DEPRECATED); + $hasOutputCollection = ! is_mapreduce_output_inline($out); // Check if the out option is inline because we will want to coerce a primary read preference if not diff --git a/tests/Collection/CollectionFunctionalTest.php b/tests/Collection/CollectionFunctionalTest.php index d00ebd84e..d63140ca4 100644 --- a/tests/Collection/CollectionFunctionalTest.php +++ b/tests/Collection/CollectionFunctionalTest.php @@ -433,7 +433,9 @@ public function testMapReduce(): void $reduce = new Javascript('function(key, values) { return Array.sum(values); }'); $out = ['inline' => 1]; - $result = $this->collection->mapReduce($map, $reduce, $out); + $result = $this->assertDeprecated( + fn () => $this->collection->mapReduce($map, $reduce, $out), + ); $this->assertInstanceOf(MapReduceResult::class, $result); $expected = [ diff --git a/tests/TestCase.php b/tests/TestCase.php index 1d965606d..abc330ad8 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -160,7 +160,7 @@ final public static function provideInvalidStringValues(): array return self::wrapValuesForDataProvider(self::getInvalidStringValues()); } - protected function assertDeprecated(callable $execution): void + protected function assertDeprecated(callable $execution) { $errors = []; @@ -169,12 +169,14 @@ protected function assertDeprecated(callable $execution): void }, E_USER_DEPRECATED); try { - call_user_func($execution); + $result = call_user_func($execution); } finally { restore_error_handler(); } $this->assertCount(1, $errors); + + return $result; } protected static function createOptionDataProvider(array $options): array From 6105187e420b3120cdb17f9f5ff1e0f86b7b931c Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Tue, 24 Sep 2024 13:35:41 +0200 Subject: [PATCH 3/3] Update deprecation notice language --- src/Collection.php | 2 +- src/Model/IndexInfo.php | 4 ++-- src/Operation/CreateCollection.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Collection.php b/src/Collection.php index f872f4aa2..937f22f5b 100644 --- a/src/Collection.php +++ b/src/Collection.php @@ -956,7 +956,7 @@ public function listSearchIndexes(array $options = []): Iterator */ public function mapReduce(JavascriptInterface $map, JavascriptInterface $reduce, string|array|object $out, array $options = []) { - @trigger_error(sprintf('The %s method is deprecated and will be removed in a future release.', __METHOD__), E_USER_DEPRECATED); + @trigger_error(sprintf('The %s method is deprecated and will be removed in a version 2.0.', __METHOD__), E_USER_DEPRECATED); $hasOutputCollection = ! is_mapreduce_output_inline($out); diff --git a/src/Model/IndexInfo.php b/src/Model/IndexInfo.php index 53b7b63f0..062c40856 100644 --- a/src/Model/IndexInfo.php +++ b/src/Model/IndexInfo.php @@ -99,7 +99,7 @@ public function getName() */ public function getNamespace() { - @trigger_error('MongoDB 4.4 drops support for the namespace in indexes, the method "IndexInfo::getNamespace()" will be removed in a future release', E_USER_DEPRECATED); + @trigger_error('MongoDB 4.4 drops support for the namespace in indexes, the method "IndexInfo::getNamespace()" will be removed in version 2.0', E_USER_DEPRECATED); return (string) $this->info['ns']; } @@ -132,7 +132,7 @@ public function is2dSphere() */ public function isGeoHaystack() { - @trigger_error('MongoDB 5.0 removes support for "geoHaystack" indexes, the method "IndexInfo::isGeoHaystack()" will be removed in a future release', E_USER_DEPRECATED); + @trigger_error('MongoDB 5.0 removes support for "geoHaystack" indexes, the method "IndexInfo::isGeoHaystack()" will be removed in version 2.0', E_USER_DEPRECATED); return array_search('geoHaystack', $this->getKey(), true) !== false; } diff --git a/src/Operation/CreateCollection.php b/src/Operation/CreateCollection.php index 3f4cc881a..a633dd682 100644 --- a/src/Operation/CreateCollection.php +++ b/src/Operation/CreateCollection.php @@ -230,7 +230,7 @@ public function __construct(private string $databaseName, private string $collec } if (isset($this->options['autoIndexId'])) { - trigger_error('The "autoIndexId" option is deprecated and will be removed in a future release', E_USER_DEPRECATED); + trigger_error('The "autoIndexId" option is deprecated and will be removed in version 2.0', E_USER_DEPRECATED); } if (isset($this->options['pipeline']) && ! is_pipeline($this->options['pipeline'], true /* allowEmpty */)) {