From eeedec20c25ae746b57c9881ff011502eed84a87 Mon Sep 17 00:00:00 2001 From: Ion Bazan Date: Wed, 30 Nov 2022 11:19:55 +0800 Subject: [PATCH 01/10] Fix deprecation notices in CommandLogger (#2485) --- lib/Doctrine/ODM/MongoDB/APM/CommandLogger.php | 6 +++--- lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php | 2 +- phpstan-baseline.neon | 8 +------- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/Doctrine/ODM/MongoDB/APM/CommandLogger.php b/lib/Doctrine/ODM/MongoDB/APM/CommandLogger.php index 3994f05039..1a6dadbbb2 100644 --- a/lib/Doctrine/ODM/MongoDB/APM/CommandLogger.php +++ b/lib/Doctrine/ODM/MongoDB/APM/CommandLogger.php @@ -44,12 +44,12 @@ public function unregister(): void $this->registered = false; } - public function commandStarted(CommandStartedEvent $event) + public function commandStarted(CommandStartedEvent $event): void { $this->startedCommands[$event->getRequestId()] = $event; } - public function commandSucceeded(CommandSucceededEvent $event) + public function commandSucceeded(CommandSucceededEvent $event): void { $commandStartedEvent = $this->findAndRemoveCommandStartedEvent($event->getRequestId()); if (! $commandStartedEvent) { @@ -59,7 +59,7 @@ public function commandSucceeded(CommandSucceededEvent $event) $this->logCommand(Command::createForSucceededCommand($commandStartedEvent, $event)); } - public function commandFailed(CommandFailedEvent $event) + public function commandFailed(CommandFailedEvent $event): void { $commandStartedEvent = $this->findAndRemoveCommandStartedEvent($event->getRequestId()); if (! $commandStartedEvent) { diff --git a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php index f2619e4ff3..fd7617d6f7 100644 --- a/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataFactory.php @@ -37,7 +37,7 @@ * * @internal * - * @method ClassMetadata[] getAllMetadata() + * @method list getAllMetadata() * @method ClassMetadata[] getLoadedMetadata() * @method ClassMetadata getMetadataFor($className) */ diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 7ac1cc21c5..57eec42e04 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -137,12 +137,6 @@ parameters: count: 1 path: tests/Doctrine/ODM/MongoDB/Tests/DocumentRepositoryTest.php - # 'strategy' offset is defined as nullable, but here there is no check here - - - message: "#^Offset 'strategy' does not exist on array\\{\\}\\|array\\{type\\?\\: string, fieldName\\: string, name\\: string, isCascadeRemove\\: bool, isCascadePersist\\: bool, isCascadeRefresh\\: bool, isCascadeMerge\\: bool, isCascadeDetach\\: bool, \\.\\.\\.\\}\\.$#" - count: 1 - path: lib/Doctrine/ODM/MongoDB/UnitOfWork.php - # When iterating over SimpleXMLElement, we cannot know the key values - message: "#^Parameter \\#2 \\$mapping of method Doctrine\\\\ODM\\\\MongoDB\\\\Mapping\\\\Driver\\\\XmlDriver\\:\\:addFieldMapping\\(\\) expects array#" @@ -177,7 +171,7 @@ parameters: # compatibility layer for doctrine/persistence ^2.4 || ^3.0 - message: "#.*#" - count: 3 + count: 1 path: lib/Doctrine/ODM/MongoDB/Event/OnClearEventArgs - From 8675eeaa51b39a75166c4d8a23a071c610974d20 Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Mon, 12 Dec 2022 13:51:49 +0300 Subject: [PATCH 02/10] Add _id and disableMD5 to UploadOptions --- .../ODM/MongoDB/Repository/DefaultGridFSRepository.php | 10 ++++++++++ lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php index bf05f7367a..2ba570bd22 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php @@ -95,6 +95,8 @@ private function getDocumentBucket(): Bucket /** * @psalm-return array{ + * _id?: mixed, + * disableMD5?: bool, * chunkSizeBytes?: int, * metadata?: object * } @@ -108,6 +110,14 @@ private function prepareOptions(?UploadOptions $uploadOptions = null): array $chunkSizeBytes = $uploadOptions->chunkSizeBytes ?: $this->class->getChunkSizeBytes(); $options = []; + if ($uploadOptions->_id !== null) { + $options['_id'] = $this->class->getDatabaseIdentifierValue($uploadOptions->_id); + } + + if ($uploadOptions->disableMD5 !== null) { + $options['disableMD5'] = $uploadOptions->disableMD5; + } + if ($chunkSizeBytes !== null) { $options['chunkSizeBytes'] = $chunkSizeBytes; } diff --git a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php index 97e20ecefd..68233c4bf3 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php @@ -6,6 +6,12 @@ final class UploadOptions { + /** @var mixed */ + public $_id; + + /** @var bool|null */ + public $disableMD5; + /** @var object|null */ public $metadata; From bcf16cff7e97a9d3b3bad5b446a47d02a6d46736 Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Mon, 12 Dec 2022 13:54:24 +0300 Subject: [PATCH 03/10] Improve UploadOptions --- lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php index 68233c4bf3..ea8769a746 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php @@ -12,9 +12,9 @@ final class UploadOptions /** @var bool|null */ public $disableMD5; - /** @var object|null */ - public $metadata; - /** @var int|null */ public $chunkSizeBytes; + + /** @var object|null */ + public $metadata; } From 2fc325084ba59091be8c36e6989a8f502d1fbc6c Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Mon, 12 Dec 2022 16:00:09 +0300 Subject: [PATCH 04/10] Set mongodb/mongodb: ^1.4.0 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f26d483123..e0db4f076c 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "doctrine/persistence": "^2.4 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", "jean85/pretty-package-versions": "^1.3.0 || ^2.0.1", - "mongodb/mongodb": "^1.2.0", + "mongodb/mongodb": "^1.4.0", "psr/cache": "^1.0 || ^2.0 || ^3.0", "symfony/console": "^3.4 || ^4.1 || ^5.0 || ^6.0", "symfony/deprecation-contracts": "^2.2 || ^3.0", From 9c679cdcd8061238a80712b39429cd652fb26b46 Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Tue, 13 Dec 2022 08:57:52 +0300 Subject: [PATCH 05/10] Rename _id to id in UploadOptions, add two tests --- .../Repository/DefaultGridFSRepository.php | 4 +- .../ODM/MongoDB/Repository/UploadOptions.php | 2 +- .../DefaultGridFSRepositoryTest.php | 45 +++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php index 2ba570bd22..35eb880039 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php @@ -110,8 +110,8 @@ private function prepareOptions(?UploadOptions $uploadOptions = null): array $chunkSizeBytes = $uploadOptions->chunkSizeBytes ?: $this->class->getChunkSizeBytes(); $options = []; - if ($uploadOptions->_id !== null) { - $options['_id'] = $this->class->getDatabaseIdentifierValue($uploadOptions->_id); + if ($uploadOptions->id !== null) { + $options['_id'] = $this->class->getDatabaseIdentifierValue($uploadOptions->id); } if ($uploadOptions->disableMD5 !== null) { diff --git a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php index ea8769a746..e54905cc4c 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php @@ -7,7 +7,7 @@ final class UploadOptions { /** @var mixed */ - public $_id; + public $id; /** @var bool|null */ public $disableMD5; diff --git a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php index 63a8e57ab8..3a3a6a5bdd 100644 --- a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php +++ b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php @@ -46,6 +46,51 @@ public function testOpenUploadStreamReturnsWritableResource(): void self::assertNull($file->getMetadata()); } + public function testOpenUploadStreamUsesIdFromOptions(): void + { + $uploadOptions = new UploadOptions(); + $uploadOptions->id = '1234567890abcdef12345678'; + + $uploadStream = $this->getRepository()->openUploadStream('somefile.txt', $uploadOptions); + self::assertIsResource($uploadStream); + + fwrite($uploadStream, 'contents'); + fclose($uploadStream); + + $file = $this->getRepository()->findOneBy(['filename' => 'somefile.txt']); + assert($file instanceof File); + self::assertInstanceOf(File::class, $file); + + self::assertSame('somefile.txt', $file->getFilename()); + self::assertSame('1234567890abcdef12345678', $file->getId()); + self::assertSame(8, $file->getLength()); + self::assertSame(12345, $file->getChunkSize()); + self::assertEqualsWithDelta(new DateTime(), $file->getUploadDate(), 1); + self::assertNull($file->getMetadata()); + } + + public function testOpenUploadStreamUsesDisableMD5FromOptions(): void + { + $uploadOptions = new UploadOptions(); + $uploadOptions->disableMD5 = true; + + $uploadStream = $this->getRepository()->openUploadStream('somefile.txt', $uploadOptions); + self::assertIsResource($uploadStream); + + fwrite($uploadStream, 'contents'); + fclose($uploadStream); + + $file = $this->getRepository()->findOneBy(['filename' => 'somefile.txt']); + assert($file instanceof File); + self::assertInstanceOf(File::class, $file); + + self::assertSame('somefile.txt', $file->getFilename()); + self::assertSame(8, $file->getLength()); + self::assertSame(12345, $file->getChunkSize()); + self::assertEqualsWithDelta(new DateTime(), $file->getUploadDate(), 1); + self::assertNull($file->getMetadata()); + } + public function testOpenUploadStreamUsesChunkSizeFromOptions(): void { $uploadOptions = new UploadOptions(); From b9520fd752660769e7d69f000aee01d2430a05ef Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Wed, 21 Dec 2022 09:58:29 +0300 Subject: [PATCH 06/10] Change prepareOptions() and test --- .../ODM/MongoDB/Repository/DefaultGridFSRepository.php | 2 +- .../MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php index 35eb880039..1ab2be6d7e 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php @@ -111,7 +111,7 @@ private function prepareOptions(?UploadOptions $uploadOptions = null): array $options = []; if ($uploadOptions->id !== null) { - $options['_id'] = $this->class->getDatabaseIdentifierValue($uploadOptions->id); + $options['_id'] = $uploadOptions->id; } if ($uploadOptions->disableMD5 !== null) { diff --git a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php index 3a3a6a5bdd..a1478bbe1b 100644 --- a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php +++ b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php @@ -14,6 +14,7 @@ use Documents\FileWithoutChunkSize; use Documents\FileWithoutMetadata; use Documents\User; +use MongoDB\BSON\ObjectId; use function assert; use function fclose; @@ -49,7 +50,7 @@ public function testOpenUploadStreamReturnsWritableResource(): void public function testOpenUploadStreamUsesIdFromOptions(): void { $uploadOptions = new UploadOptions(); - $uploadOptions->id = '1234567890abcdef12345678'; + $uploadOptions->id = new ObjectId('1234567890abcdef12345678'); $uploadStream = $this->getRepository()->openUploadStream('somefile.txt', $uploadOptions); self::assertIsResource($uploadStream); From f07487875cde188627b72f890e4773458a2658dc Mon Sep 17 00:00:00 2001 From: andrey-tech Date: Sat, 18 Feb 2023 17:38:46 +0300 Subject: [PATCH 07/10] Remove disableMD5 from UploadOptions, set mongodb/mongodb ^1.15.0 --- composer.json | 2 +- .../Repository/DefaultGridFSRepository.php | 5 ----- .../ODM/MongoDB/Repository/UploadOptions.php | 3 --- .../DefaultGridFSRepositoryTest.php | 22 ------------------- 4 files changed, 1 insertion(+), 31 deletions(-) diff --git a/composer.json b/composer.json index e0db4f076c..56d0502b5e 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "doctrine/persistence": "^2.4 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", "jean85/pretty-package-versions": "^1.3.0 || ^2.0.1", - "mongodb/mongodb": "^1.4.0", + "mongodb/mongodb": "^1.15.0", "psr/cache": "^1.0 || ^2.0 || ^3.0", "symfony/console": "^3.4 || ^4.1 || ^5.0 || ^6.0", "symfony/deprecation-contracts": "^2.2 || ^3.0", diff --git a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php index 1ab2be6d7e..1256e5ddfa 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/DefaultGridFSRepository.php @@ -96,7 +96,6 @@ private function getDocumentBucket(): Bucket /** * @psalm-return array{ * _id?: mixed, - * disableMD5?: bool, * chunkSizeBytes?: int, * metadata?: object * } @@ -114,10 +113,6 @@ private function prepareOptions(?UploadOptions $uploadOptions = null): array $options['_id'] = $uploadOptions->id; } - if ($uploadOptions->disableMD5 !== null) { - $options['disableMD5'] = $uploadOptions->disableMD5; - } - if ($chunkSizeBytes !== null) { $options['chunkSizeBytes'] = $chunkSizeBytes; } diff --git a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php index e54905cc4c..6d022389a5 100644 --- a/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php +++ b/lib/Doctrine/ODM/MongoDB/Repository/UploadOptions.php @@ -9,9 +9,6 @@ final class UploadOptions /** @var mixed */ public $id; - /** @var bool|null */ - public $disableMD5; - /** @var int|null */ public $chunkSizeBytes; diff --git a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php index a1478bbe1b..bf51be9da0 100644 --- a/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php +++ b/tests/Doctrine/ODM/MongoDB/Tests/Repository/DefaultGridFSRepositoryTest.php @@ -70,28 +70,6 @@ public function testOpenUploadStreamUsesIdFromOptions(): void self::assertNull($file->getMetadata()); } - public function testOpenUploadStreamUsesDisableMD5FromOptions(): void - { - $uploadOptions = new UploadOptions(); - $uploadOptions->disableMD5 = true; - - $uploadStream = $this->getRepository()->openUploadStream('somefile.txt', $uploadOptions); - self::assertIsResource($uploadStream); - - fwrite($uploadStream, 'contents'); - fclose($uploadStream); - - $file = $this->getRepository()->findOneBy(['filename' => 'somefile.txt']); - assert($file instanceof File); - self::assertInstanceOf(File::class, $file); - - self::assertSame('somefile.txt', $file->getFilename()); - self::assertSame(8, $file->getLength()); - self::assertSame(12345, $file->getChunkSize()); - self::assertEqualsWithDelta(new DateTime(), $file->getUploadDate(), 1); - self::assertNull($file->getMetadata()); - } - public function testOpenUploadStreamUsesChunkSizeFromOptions(): void { $uploadOptions = new UploadOptions(); From 7215a9fdd81bfe706b6f1375d7d48b7f01d6abd8 Mon Sep 17 00:00:00 2001 From: Ion Bazan Date: Tue, 21 Feb 2023 17:58:26 +0800 Subject: [PATCH 08/10] Relax mongodb/mongodb requirements --- .github/workflows/continuous-integration.yml | 2 +- composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 7ac91438d2..cde29cb9a7 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -37,7 +37,7 @@ jobs: - dependencies: "lowest" php-version: "7.2" mongodb-version: "3.6" - driver-version: "1.5.0" + driver-version: "1.10.0" topology: "server" - topology: "sharded_cluster" php-version: "8.0" diff --git a/composer.json b/composer.json index 56d0502b5e..7a67ae56eb 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "doctrine/persistence": "^2.4 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", "jean85/pretty-package-versions": "^1.3.0 || ^2.0.1", - "mongodb/mongodb": "^1.15.0", + "mongodb/mongodb": "^1.10.0", "psr/cache": "^1.0 || ^2.0 || ^3.0", "symfony/console": "^3.4 || ^4.1 || ^5.0 || ^6.0", "symfony/deprecation-contracts": "^2.2 || ^3.0", From 4a2c346027cbfa099fab665713b7df678768011f Mon Sep 17 00:00:00 2001 From: Ion Bazan Date: Tue, 21 Feb 2023 18:03:37 +0800 Subject: [PATCH 09/10] Relax mongodb/mongodb requirements --- .github/workflows/continuous-integration.yml | 4 ++-- composer.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 656fc30dd3..dd69f1f12f 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -34,9 +34,9 @@ jobs: - "highest" include: - dependencies: "lowest" - php-version: "7.2" + php-version: "7.4" mongodb-version: "3.6" - driver-version: "1.10.0" + driver-version: "1.11.0" topology: "server" - topology: "sharded_cluster" php-version: "8.2" diff --git a/composer.json b/composer.json index 69e736bab6..b4b868986d 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": "^7.4 || ^8.0", - "ext-mongodb": "^1.5", + "ext-mongodb": "^1.11", "doctrine/annotations": "^1.12 || ^2.0", "doctrine/cache": "^1.11 || ^2.0", "doctrine/collections": "^1.5 || ^2.0", From f9ee6969a06e8f3ada0aad946e585f926a39fffd Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Tue, 21 Feb 2023 14:17:12 +0100 Subject: [PATCH 10/10] Remove MongoDB 4.2 from testing --- .github/workflows/continuous-integration.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index dd69f1f12f..1b7e44bc95 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -12,7 +12,7 @@ env: jobs: phpunit: name: "PHPUnit" - runs-on: "ubuntu-18.04" + runs-on: "ubuntu-20.04" strategy: matrix: @@ -25,7 +25,6 @@ jobs: - "6.0" - "5.0" - "4.4" - - "4.2" driver-version: - "stable" topology: @@ -35,7 +34,7 @@ jobs: include: - dependencies: "lowest" php-version: "7.4" - mongodb-version: "3.6" + mongodb-version: "4.4" driver-version: "1.11.0" topology: "server" - topology: "sharded_cluster"