Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8e37d53

Browse files
committed
Improve type of Collection Bulk Write operations
1 parent ed5c46b commit 8e37d53

File tree

4 files changed

+44
-90
lines changed

4 files changed

+44
-90
lines changed

‎psalm-baseline.xml‎

Lines changed: 22 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -449,107 +449,47 @@
449449
</MixedMethodCall>
450450
</file>
451451
<file src="src/Operation/BulkWrite.php">
452+
<LessSpecificReturnStatement>
453+
<code><![CDATA[$operations]]></code>
454+
</LessSpecificReturnStatement>
452455
<MixedArgument>
453-
<code><![CDATA[$args]]></code>
454-
<code><![CDATA[$args]]></code>
455-
<code><![CDATA[$args]]></code>
456-
<code><![CDATA[$args[0]]]></code>
457-
<code><![CDATA[$args[0]]]></code>
458-
<code><![CDATA[$args[0]]]></code>
459-
<code><![CDATA[$args[0]]]></code>
460-
<code><![CDATA[$args[1]]]></code>
461-
<code><![CDATA[$args[1]]]></code>
462-
<code><![CDATA[$args[1]]]></code>
463-
<code><![CDATA[$args[1]]]></code>
464-
<code><![CDATA[$args[1]]]></code>
465456
<code><![CDATA[$args[1]]]></code>
466457
<code><![CDATA[$args[1]]]></code>
467-
<code><![CDATA[$args[2]]]></code>
468458
</MixedArgument>
469-
<MixedArrayAccess>
470-
<code><![CDATA[$args[0]]]></code>
471-
<code><![CDATA[$args[0]]]></code>
472-
<code><![CDATA[$args[0]]]></code>
473-
<code><![CDATA[$args[0]]]></code>
474-
<code><![CDATA[$args[0]]]></code>
475-
<code><![CDATA[$args[0]]]></code>
476-
<code><![CDATA[$args[0]]]></code>
477-
<code><![CDATA[$args[0]]]></code>
478-
<code><![CDATA[$args[0]]]></code>
479-
<code><![CDATA[$args[1]]]></code>
480-
<code><![CDATA[$args[1]]]></code>
481-
<code><![CDATA[$args[1]]]></code>
482-
<code><![CDATA[$args[1]]]></code>
483-
<code><![CDATA[$args[1]]]></code>
484-
<code><![CDATA[$args[1]]]></code>
485-
<code><![CDATA[$args[1]]]></code>
486-
<code><![CDATA[$args[1]]]></code>
487-
<code><![CDATA[$args[1]]]></code>
488-
<code><![CDATA[$args[1]]]></code>
489-
<code><![CDATA[$args[1]]]></code>
490-
<code><![CDATA[$args[1]]]></code>
491-
<code><![CDATA[$args[1]]]></code>
492-
<code><![CDATA[$args[2]]]></code>
493-
<code><![CDATA[$args[2]]]></code>
494-
<code><![CDATA[$args[2]]]></code>
495-
<code><![CDATA[$args[2]]]></code>
496-
<code><![CDATA[$args[2]]]></code>
497-
<code><![CDATA[$args[2]]]></code>
498-
<code><![CDATA[$args[2]]]></code>
499-
<code><![CDATA[$args[2]['upsert']]]></code>
500-
<code><![CDATA[$args[2]['upsert']]]></code>
501-
<code><![CDATA[$args[2]['upsert']]]></code>
502-
<code><![CDATA[$args[2]['upsert']]]></code>
503-
</MixedArrayAccess>
504-
<MixedArrayAssignment>
505-
<code><![CDATA[$args[1]]]></code>
506-
<code><![CDATA[$args[1]]]></code>
507-
<code><![CDATA[$args[1]]]></code>
508-
<code><![CDATA[$args[1]]]></code>
509-
<code><![CDATA[$args[1]['limit']]]></code>
510-
<code><![CDATA[$args[2]]]></code>
511-
<code><![CDATA[$args[2]]]></code>
512-
<code><![CDATA[$args[2]]]></code>
513-
<code><![CDATA[$args[2]]]></code>
514-
<code><![CDATA[$args[2]]]></code>
515-
<code><![CDATA[$args[2]]]></code>
516-
<code><![CDATA[$args[2]['multi']]]></code>
517-
<code><![CDATA[$args[2]['multi']]]></code>
518-
<code><![CDATA[$operations[$i][$type][0]]]></code>
519-
<code><![CDATA[$operations[$i][$type][0]]]></code>
520-
<code><![CDATA[$operations[$i][$type][0]]]></code>
521-
<code><![CDATA[$operations[$i][$type][0]]]></code>
522-
<code><![CDATA[$operations[$i][$type][1]]]></code>
523-
<code><![CDATA[$operations[$i][$type][1]]]></code>
524-
<code><![CDATA[$operations[$i][$type][1]]]></code>
525-
<code><![CDATA[$operations[$i][$type][2]]]></code>
526-
<code><![CDATA[$operations[$i][$type][2]]]></code>
527-
</MixedArrayAssignment>
528459
<MixedAssignment>
529-
<code><![CDATA[$args]]></code>
530-
<code><![CDATA[$args]]></code>
531460
<code><![CDATA[$args[1]]]></code>
532-
<code><![CDATA[$args[2]]]></code>
533-
<code><![CDATA[$args[2]]]></code>
534461
<code><![CDATA[$insertedIds[$i]]]></code>
535462
<code><![CDATA[$operations[$i][$type][0]]]></code>
536463
<code><![CDATA[$operations[$i][$type][0]]]></code>
537464
<code><![CDATA[$operations[$i][$type][0]]]></code>
538465
<code><![CDATA[$operations[$i][$type][1]]]></code>
539-
<code><![CDATA[$operations[$i][$type][1]]]></code>
540-
<code><![CDATA[$operations[$i][$type][2]]]></code>
541-
<code><![CDATA[$operations[$i][$type][2]]]></code>
542466
<code><![CDATA[$options[$option]]]></code>
543467
<code><![CDATA[$options['session']]]></code>
544468
<code><![CDATA[$options['writeConcern']]]></code>
545469
</MixedAssignment>
546470
<MixedMethodCall>
547471
<code><![CDATA[isInTransaction]]></code>
548472
</MixedMethodCall>
549-
<MixedOperand>
550-
<code><![CDATA[$args[2]]]></code>
473+
<MoreSpecificReturnType>
474+
<code><![CDATA[list<OperationType>]]></code>
475+
</MoreSpecificReturnType>
476+
<NullArgument>
477+
<code><![CDATA[$type]]></code>
478+
</NullArgument>
479+
<PossiblyInvalidArgument>
480+
<code><![CDATA[$args[0]]]></code>
481+
<code><![CDATA[$args[1]]]></code>
482+
<code><![CDATA[$args[1]]]></code>
483+
</PossiblyInvalidArgument>
484+
<PossiblyNullArgument>
485+
<code><![CDATA[$args[1]]]></code>
486+
<code><![CDATA[$args[1]]]></code>
487+
</PossiblyNullArgument>
488+
<PossiblyUndefinedArrayOffset>
489+
<code><![CDATA[$args[1]]]></code>
490+
<code><![CDATA[$args[1]]]></code>
551491
<code><![CDATA[$args[2]]]></code>
552-
</MixedOperand>
492+
</PossiblyUndefinedArrayOffset>
553493
</file>
554494
<file src="src/Operation/ClientBulkWriteCommand.php">
555495
<MixedMethodCall>

‎src/Collection.php‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
use function is_array;
7878
use function strlen;
7979

80+
/** @psalm-import-type OperationType from BulkWrite */
8081
class Collection
8182
{
8283
private const DEFAULT_TYPE_MAP = [
@@ -254,7 +255,7 @@ public function aggregate(array|Pipeline $pipeline, array $options = []): Cursor
254255
* Executes multiple write operations.
255256
*
256257
* @see BulkWrite::__construct() for supported options
257-
* @param array[] $operations List of write operations
258+
* @param list<OperationType> $operations List of write operations
258259
* @param array $options Command options
259260
* @throws UnsupportedException if options are not supported by the selected server
260261
* @throws InvalidArgumentException for parameter/option parsing errors

‎src/Operation/BulkWrite.php‎

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
* Operation for executing multiple write operations.
4646
*
4747
* @see \MongoDB\Collection::bulkWrite()
48+
*
49+
* @psalm-type Document = object|array
50+
* @psalm-type OperationType = array{deleteMany: array{0: Document, 1?: array}}|array{deleteOne: array{0: Document, 1?: array}}|array{insertOne: array{0: Document}}|array{replaceOne: array{0: Document, 1: Document, 2?: array}}|array{updateMany: array{0: Document, 1: Document, 2?: array}}|array{updateOne: array{0: Document, 1: Document, 2?: array}}
4851
*/
4952
final class BulkWrite
5053
{
@@ -55,7 +58,7 @@ final class BulkWrite
5558
public const UPDATE_MANY = 'updateMany';
5659
public const UPDATE_ONE = 'updateOne';
5760

58-
/** @var array[] */
61+
/** @psalm-var list<OperationType> */
5962
private array $operations;
6063

6164
private array $options;
@@ -132,10 +135,11 @@ final class BulkWrite
132135
*
133136
* * writeConcern (MongoDB\Driver\WriteConcern): Write concern.
134137
*
135-
* @param string $databaseName Database name
136-
* @param string $collectionName Collection name
137-
* @param array[] $operations List of write operations
138-
* @param array $options Command options
138+
* @param string $databaseName Database name
139+
* @param string $collectionName Collection name
140+
* @param array $operations List of write operations
141+
* @psalm-param list<OperationType> $operations
142+
* @param array $options Command options
139143
* @throws InvalidArgumentException for parameter/option parsing errors
140144
*/
141145
public function __construct(private string $databaseName, private string $collectionName, array $operations, array $options = [])
@@ -276,8 +280,8 @@ private function createExecuteOptions(): array
276280
}
277281

278282
/**
279-
* @param array[] $operations
280-
* @return array[]
283+
* @psalm-param list<OperationType> $operations
284+
* @psalm-return list<OperationType>
281285
*/
282286
private function validateOperations(array $operations, ?DocumentCodec $codec, Encoder $builderEncoder): array
283287
{

‎tests/Operation/BulkWriteTest.php‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ public function testMultipleOperationsInOneElement(): void
4141
]);
4242
}
4343

44+
public function testEmptyOperation(): void
45+
{
46+
$this->expectException(InvalidArgumentException::class);
47+
$this->expectExceptionMessage('Expected one element in $operation[0], actually: 0');
48+
new BulkWrite($this->getDatabaseName(), $this->getCollectionName(), [
49+
[],
50+
]);
51+
}
52+
4453
public function testUnknownOperation(): void
4554
{
4655
$this->expectException(InvalidArgumentException::class);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /