mirror of
https://github.com/moodle/moodle.git
synced 2025-03-21 16:10:15 +01:00
Merge branch 'MDL-76617_401' of https://github.com/stronk7/moodle into MOODLE_401_STABLE
This commit is contained in:
commit
c72b7b7edc
18
cache/stores/mongodb/MongoDB/BulkWriteResult.php
vendored
18
cache/stores/mongodb/MongoDB/BulkWriteResult.php
vendored
@ -28,16 +28,12 @@ class BulkWriteResult
|
||||
/** @var WriteResult */
|
||||
private $writeResult;
|
||||
|
||||
/** @var mixed[] */
|
||||
/** @var array */
|
||||
private $insertedIds;
|
||||
|
||||
/** @var boolean */
|
||||
private $isAcknowledged;
|
||||
|
||||
/**
|
||||
* @param WriteResult $writeResult
|
||||
* @param mixed[] $insertedIds
|
||||
*/
|
||||
public function __construct(WriteResult $writeResult, array $insertedIds)
|
||||
{
|
||||
$this->writeResult = $writeResult;
|
||||
@ -51,7 +47,7 @@ class BulkWriteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see BulkWriteResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getDeletedCount()
|
||||
@ -69,7 +65,7 @@ class BulkWriteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see BulkWriteResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getInsertedCount()
|
||||
@ -90,7 +86,7 @@ class BulkWriteResult
|
||||
* field value. Any driver-generated ID will be a MongoDB\BSON\ObjectId
|
||||
* instance.
|
||||
*
|
||||
* @return mixed[]
|
||||
* @return array
|
||||
*/
|
||||
public function getInsertedIds()
|
||||
{
|
||||
@ -103,7 +99,7 @@ class BulkWriteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see BulkWriteResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getMatchedCount()
|
||||
@ -142,7 +138,7 @@ class BulkWriteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see BulkWriteResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getUpsertedCount()
|
||||
@ -165,7 +161,7 @@ class BulkWriteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see BulkWriteResult::isAcknowledged()
|
||||
* @return mixed[]
|
||||
* @return array
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getUpsertedIds()
|
||||
|
27
cache/stores/mongodb/MongoDB/ChangeStream.php
vendored
27
cache/stores/mongodb/MongoDB/ChangeStream.php
vendored
@ -22,6 +22,7 @@ use MongoDB\Driver\CursorId;
|
||||
use MongoDB\Driver\Exception\ConnectionException;
|
||||
use MongoDB\Driver\Exception\RuntimeException;
|
||||
use MongoDB\Driver\Exception\ServerException;
|
||||
use MongoDB\Exception\BadMethodCallException;
|
||||
use MongoDB\Exception\ResumeTokenException;
|
||||
use MongoDB\Model\ChangeStreamIterator;
|
||||
use ReturnTypeWillChange;
|
||||
@ -32,6 +33,8 @@ use function in_array;
|
||||
/**
|
||||
* Iterator for a change stream.
|
||||
*
|
||||
* @psalm-type ResumeCallable = callable(array|object|null, bool): ChangeStreamIterator
|
||||
*
|
||||
* @api
|
||||
* @see \MongoDB\Collection::watch()
|
||||
* @see https://mongodb.com/docs/manual/reference/method/db.watch/#mongodb-method-db.watch
|
||||
@ -71,7 +74,7 @@ class ChangeStream implements Iterator
|
||||
/** @var int */
|
||||
private static $wireVersionForResumableChangeStreamError = 9;
|
||||
|
||||
/** @var callable */
|
||||
/** @var ResumeCallable|null */
|
||||
private $resumeCallable;
|
||||
|
||||
/** @var ChangeStreamIterator */
|
||||
@ -90,8 +93,8 @@ class ChangeStream implements Iterator
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @param ChangeStreamIterator $iterator
|
||||
* @param callable $resumeCallable
|
||||
*
|
||||
* @param ResumeCallable $resumeCallable
|
||||
*/
|
||||
public function __construct(ChangeStreamIterator $iterator, callable $resumeCallable)
|
||||
{
|
||||
@ -194,10 +197,8 @@ class ChangeStream implements Iterator
|
||||
* Determines if an exception is a resumable error.
|
||||
*
|
||||
* @see https://github.com/mongodb/specifications/blob/master/source/change-streams/change-streams.rst#resumable-error
|
||||
* @param RuntimeException $exception
|
||||
* @return boolean
|
||||
*/
|
||||
private function isResumableError(RuntimeException $exception)
|
||||
private function isResumableError(RuntimeException $exception): bool
|
||||
{
|
||||
if ($exception instanceof ConnectionException) {
|
||||
return true;
|
||||
@ -224,7 +225,7 @@ class ChangeStream implements Iterator
|
||||
* @param boolean $incrementKey Increment $key if there is a current result
|
||||
* @throws ResumeTokenException
|
||||
*/
|
||||
private function onIteration($incrementKey)
|
||||
private function onIteration(bool $incrementKey): void
|
||||
{
|
||||
/* If the cursorId is 0, the server has invalidated the cursor and we
|
||||
* will never perform another getMore nor need to resume since any
|
||||
@ -251,12 +252,15 @@ class ChangeStream implements Iterator
|
||||
|
||||
/**
|
||||
* Recreates the ChangeStreamIterator after a resumable server error.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function resume()
|
||||
private function resume(): void
|
||||
{
|
||||
if (! $this->resumeCallable) {
|
||||
throw new BadMethodCallException('Cannot resume a closed change stream.');
|
||||
}
|
||||
|
||||
$this->iterator = call_user_func($this->resumeCallable, $this->getResumeToken(), $this->hasAdvanced);
|
||||
|
||||
$this->iterator->rewind();
|
||||
|
||||
$this->onIteration($this->hasAdvanced);
|
||||
@ -265,10 +269,9 @@ class ChangeStream implements Iterator
|
||||
/**
|
||||
* Either resumes after a resumable error or re-throws the exception.
|
||||
*
|
||||
* @param RuntimeException $exception
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
private function resumeOrThrow(RuntimeException $exception)
|
||||
private function resumeOrThrow(RuntimeException $exception): void
|
||||
{
|
||||
if ($this->isResumableError($exception)) {
|
||||
$this->resume();
|
||||
|
23
cache/stores/mongodb/MongoDB/Client.php
vendored
23
cache/stores/mongodb/MongoDB/Client.php
vendored
@ -44,6 +44,8 @@ use function is_string;
|
||||
|
||||
class Client
|
||||
{
|
||||
public const DEFAULT_URI = 'mongodb://127.0.0.1/';
|
||||
|
||||
/** @var array */
|
||||
private static $defaultTypeMap = [
|
||||
'array' => BSONArray::class,
|
||||
@ -91,14 +93,14 @@ class Client
|
||||
* @see https://mongodb.com/docs/manual/reference/connection-string/
|
||||
* @see https://php.net/manual/en/mongodb-driver-manager.construct.php
|
||||
* @see https://php.net/manual/en/mongodb.persistence.php#mongodb.persistence.typemaps
|
||||
* @param string $uri MongoDB connection string
|
||||
* @param array $uriOptions Additional connection string options
|
||||
* @param array $driverOptions Driver-specific options
|
||||
* @param string|null $uri MongoDB connection string. If none is provided, this defaults to self::DEFAULT_URI.
|
||||
* @param array $uriOptions Additional connection string options
|
||||
* @param array $driverOptions Driver-specific options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverInvalidArgumentException for parameter/option parsing errors in the driver
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function __construct($uri = 'mongodb://127.0.0.1/', array $uriOptions = [], array $driverOptions = [])
|
||||
public function __construct(?string $uri = null, array $uriOptions = [], array $driverOptions = [])
|
||||
{
|
||||
$driverOptions += ['typeMap' => self::$defaultTypeMap];
|
||||
|
||||
@ -116,8 +118,8 @@ class Client
|
||||
|
||||
$driverOptions['driver'] = $this->mergeDriverInfo($driverOptions['driver'] ?? []);
|
||||
|
||||
$this->uri = (string) $uri;
|
||||
$this->typeMap = $driverOptions['typeMap'] ?? null;
|
||||
$this->uri = $uri ?? self::DEFAULT_URI;
|
||||
$this->typeMap = $driverOptions['typeMap'];
|
||||
|
||||
unset($driverOptions['typeMap']);
|
||||
|
||||
@ -155,7 +157,7 @@ class Client
|
||||
* @param string $databaseName Name of the database to select
|
||||
* @return Database
|
||||
*/
|
||||
public function __get($databaseName)
|
||||
public function __get(string $databaseName)
|
||||
{
|
||||
return $this->selectDatabase($databaseName);
|
||||
}
|
||||
@ -201,7 +203,7 @@ class Client
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function dropDatabase($databaseName, array $options = [])
|
||||
public function dropDatabase(string $databaseName, array $options = [])
|
||||
{
|
||||
if (! isset($options['typeMap'])) {
|
||||
$options['typeMap'] = $this->typeMap;
|
||||
@ -290,7 +292,6 @@ class Client
|
||||
* List databases.
|
||||
*
|
||||
* @see ListDatabases::__construct() for supported options
|
||||
* @param array $options
|
||||
* @return DatabaseInfoIterator
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
@ -314,7 +315,7 @@ class Client
|
||||
* @return Collection
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function selectCollection($databaseName, $collectionName, array $options = [])
|
||||
public function selectCollection(string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
$options += ['typeMap' => $this->typeMap];
|
||||
|
||||
@ -330,7 +331,7 @@ class Client
|
||||
* @return Database
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function selectDatabase($databaseName, array $options = [])
|
||||
public function selectDatabase(string $databaseName, array $options = [])
|
||||
{
|
||||
$options += ['typeMap' => $this->typeMap];
|
||||
|
||||
|
21
cache/stores/mongodb/MongoDB/Collection.php
vendored
21
cache/stores/mongodb/MongoDB/Collection.php
vendored
@ -126,13 +126,13 @@ class Collection
|
||||
* @param array $options Collection options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct(Manager $manager, $databaseName, $collectionName, array $options = [])
|
||||
public function __construct(Manager $manager, string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
if (strlen((string) $databaseName) < 1) {
|
||||
if (strlen($databaseName) < 1) {
|
||||
throw new InvalidArgumentException('$databaseName is invalid: ' . $databaseName);
|
||||
}
|
||||
|
||||
if (strlen((string) $collectionName) < 1) {
|
||||
if (strlen($collectionName) < 1) {
|
||||
throw new InvalidArgumentException('$collectionName is invalid: ' . $collectionName);
|
||||
}
|
||||
|
||||
@ -153,8 +153,8 @@ class Collection
|
||||
}
|
||||
|
||||
$this->manager = $manager;
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->readConcern = $options['readConcern'] ?? $this->manager->getReadConcern();
|
||||
$this->readPreference = $options['readPreference'] ?? $this->manager->getReadPreference();
|
||||
$this->typeMap = $options['typeMap'] ?? self::$defaultTypeMap;
|
||||
@ -446,13 +446,13 @@ class Collection
|
||||
* @param string $fieldName Field for which to return distinct values
|
||||
* @param array|object $filter Query by which to filter documents
|
||||
* @param array $options Command options
|
||||
* @return mixed[]
|
||||
* @return array
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if options are not supported by the selected server
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function distinct($fieldName, $filter = [], array $options = [])
|
||||
public function distinct(string $fieldName, $filter = [], array $options = [])
|
||||
{
|
||||
if (! isset($options['readPreference']) && ! is_in_transaction($options)) {
|
||||
$options['readPreference'] = $this->readPreference;
|
||||
@ -938,7 +938,6 @@ class Collection
|
||||
* Returns information for all indexes for the collection.
|
||||
*
|
||||
* @see ListIndexes::__construct() for supported options
|
||||
* @param array $options
|
||||
* @return IndexInfoIterator
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -1007,9 +1006,9 @@ class Collection
|
||||
* Renames the collection.
|
||||
*
|
||||
* @see RenameCollection::__construct() for supported options
|
||||
* @param string $toCollectionName New name of the collection
|
||||
* @param ?string $toDatabaseName New database name of the collection. Defaults to the original database.
|
||||
* @param array $options Additional options
|
||||
* @param string $toCollectionName New name of the collection
|
||||
* @param string|null $toDatabaseName New database name of the collection. Defaults to the original database.
|
||||
* @param array $options Additional options
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if options are not supported by the selected server
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
|
@ -73,7 +73,7 @@ class ListCollections implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, array $options = [])
|
||||
public function __construct(string $databaseName, array $options = [])
|
||||
{
|
||||
if (isset($options['authorizedCollections']) && ! is_bool($options['authorizedCollections'])) {
|
||||
throw InvalidArgumentException::invalidType('"authorizedCollections" option', $options['authorizedCollections'], 'boolean');
|
||||
@ -95,7 +95,7 @@ class ListCollections implements Executable
|
||||
throw InvalidArgumentException::invalidType('"session" option', $options['session'], Session::class);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -103,11 +103,9 @@ class ListCollections implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return CachingIterator
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function execute(Server $server)
|
||||
public function execute(Server $server): CachingIterator
|
||||
{
|
||||
$cursor = $server->executeReadCommand($this->databaseName, $this->createCommand(), $this->createOptions());
|
||||
$cursor->setTypeMap(['root' => 'array', 'document' => 'array']);
|
||||
@ -117,10 +115,8 @@ class ListCollections implements Executable
|
||||
|
||||
/**
|
||||
* Create the listCollections command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = ['listCollections' => 1];
|
||||
|
||||
@ -144,9 +140,8 @@ class ListCollections implements Executable
|
||||
* the command be executed on the primary.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -99,12 +99,11 @@ class ListDatabases implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array An array of database info structures
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function execute(Server $server)
|
||||
public function execute(Server $server): array
|
||||
{
|
||||
$cursor = $server->executeReadCommand('admin', $this->createCommand(), $this->createOptions());
|
||||
$cursor->setTypeMap(['root' => 'array', 'document' => 'array']);
|
||||
@ -119,10 +118,8 @@ class ListDatabases implements Executable
|
||||
|
||||
/**
|
||||
* Create the listDatabases command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = ['listDatabases' => 1];
|
||||
|
||||
@ -146,9 +143,8 @@ class ListDatabases implements Executable
|
||||
* the command be executed on the primary.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
27
cache/stores/mongodb/MongoDB/Database.php
vendored
27
cache/stores/mongodb/MongoDB/Database.php
vendored
@ -104,9 +104,9 @@ class Database
|
||||
* @param array $options Database options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct(Manager $manager, $databaseName, array $options = [])
|
||||
public function __construct(Manager $manager, string $databaseName, array $options = [])
|
||||
{
|
||||
if (strlen((string) $databaseName) < 1) {
|
||||
if (strlen($databaseName) < 1) {
|
||||
throw new InvalidArgumentException('$databaseName is invalid: ' . $databaseName);
|
||||
}
|
||||
|
||||
@ -127,7 +127,7 @@ class Database
|
||||
}
|
||||
|
||||
$this->manager = $manager;
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->readConcern = $options['readConcern'] ?? $this->manager->getReadConcern();
|
||||
$this->readPreference = $options['readPreference'] ?? $this->manager->getReadPreference();
|
||||
$this->typeMap = $options['typeMap'] ?? self::$defaultTypeMap;
|
||||
@ -164,7 +164,7 @@ class Database
|
||||
* @param string $collectionName Name of the collection to select
|
||||
* @return Collection
|
||||
*/
|
||||
public function __get($collectionName)
|
||||
public function __get(string $collectionName)
|
||||
{
|
||||
return $this->selectCollection($collectionName);
|
||||
}
|
||||
@ -257,14 +257,12 @@ class Database
|
||||
* Create a new collection explicitly.
|
||||
*
|
||||
* @see CreateCollection::__construct() for supported options
|
||||
* @param string $collectionName
|
||||
* @param array $options
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if options are not supported by the selected server
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function createCollection($collectionName, array $options = [])
|
||||
public function createCollection(string $collectionName, array $options = [])
|
||||
{
|
||||
if (! isset($options['typeMap'])) {
|
||||
$options['typeMap'] = $this->typeMap;
|
||||
@ -340,7 +338,7 @@ class Database
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function dropCollection($collectionName, array $options = [])
|
||||
public function dropCollection(string $collectionName, array $options = [])
|
||||
{
|
||||
if (! isset($options['typeMap'])) {
|
||||
$options['typeMap'] = $this->typeMap;
|
||||
@ -453,7 +451,6 @@ class Database
|
||||
* Returns information for all collections in this database.
|
||||
*
|
||||
* @see ListCollections::__construct() for supported options
|
||||
* @param array $options
|
||||
* @return CollectionInfoIterator
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -477,7 +474,7 @@ class Database
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function modifyCollection($collectionName, array $collectionOptions, array $options = [])
|
||||
public function modifyCollection(string $collectionName, array $collectionOptions, array $options = [])
|
||||
{
|
||||
if (! isset($options['typeMap'])) {
|
||||
$options['typeMap'] = $this->typeMap;
|
||||
@ -498,10 +495,10 @@ class Database
|
||||
* Rename a collection within this database.
|
||||
*
|
||||
* @see RenameCollection::__construct() for supported options
|
||||
* @param string $fromCollectionName Collection name
|
||||
* @param string $toCollectionName New name of the collection
|
||||
* @param ?string $toDatabaseName New database name of the collection. Defaults to the original database.
|
||||
* @param array $options Additional options
|
||||
* @param string $fromCollectionName Collection name
|
||||
* @param string $toCollectionName New name of the collection
|
||||
* @param string|null $toDatabaseName New database name of the collection. Defaults to the original database.
|
||||
* @param array $options Additional options
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if options are unsupported on the selected server
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
@ -537,7 +534,7 @@ class Database
|
||||
* @return Collection
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function selectCollection($collectionName, array $options = [])
|
||||
public function selectCollection(string $collectionName, array $options = [])
|
||||
{
|
||||
$options += [
|
||||
'readConcern' => $this->readConcern,
|
||||
|
@ -43,7 +43,7 @@ class DeleteResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see DeleteResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getDeletedCount()
|
||||
|
@ -29,7 +29,7 @@ class BadMethodCallException extends BaseBadMethodCallException implements Excep
|
||||
* @param string $class Class name
|
||||
* @return self
|
||||
*/
|
||||
public static function classIsImmutable($class)
|
||||
public static function classIsImmutable(string $class)
|
||||
{
|
||||
return new static(sprintf('%s is immutable', $class));
|
||||
}
|
||||
@ -40,7 +40,7 @@ class BadMethodCallException extends BaseBadMethodCallException implements Excep
|
||||
* @param string $method Method name
|
||||
* @return self
|
||||
*/
|
||||
public static function unacknowledgedWriteResultAccess($method)
|
||||
public static function unacknowledgedWriteResultAccess(string $method)
|
||||
{
|
||||
return new static(sprintf('%s should not be called for an unacknowledged write result', $method));
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ class InvalidArgumentException extends DriverInvalidArgumentException implements
|
||||
* @param string|string[] $expectedType Expected type
|
||||
* @return self
|
||||
*/
|
||||
public static function invalidType($name, $value, $expectedType)
|
||||
public static function invalidType(string $name, $value, $expectedType)
|
||||
{
|
||||
if (is_array($expectedType)) {
|
||||
switch (count($expectedType)) {
|
||||
|
45
cache/stores/mongodb/MongoDB/GridFS/Bucket.php
vendored
45
cache/stores/mongodb/MongoDB/GridFS/Bucket.php
vendored
@ -32,9 +32,9 @@ use MongoDB\GridFS\Exception\StreamException;
|
||||
use MongoDB\Model\BSONArray;
|
||||
use MongoDB\Model\BSONDocument;
|
||||
use MongoDB\Operation\Find;
|
||||
use stdClass;
|
||||
|
||||
use function array_intersect_key;
|
||||
use function assert;
|
||||
use function fopen;
|
||||
use function get_resource_type;
|
||||
use function in_array;
|
||||
@ -137,7 +137,7 @@ class Bucket
|
||||
* @param array $options Bucket options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct(Manager $manager, $databaseName, array $options = [])
|
||||
public function __construct(Manager $manager, string $databaseName, array $options = [])
|
||||
{
|
||||
$options += [
|
||||
'bucketName' => self::$defaultBucketName,
|
||||
@ -178,7 +178,7 @@ class Bucket
|
||||
}
|
||||
|
||||
$this->manager = $manager;
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->bucketName = $options['bucketName'];
|
||||
$this->chunkSizeBytes = $options['chunkSizeBytes'];
|
||||
$this->disableMD5 = $options['disableMD5'];
|
||||
@ -282,7 +282,7 @@ class Bucket
|
||||
* @throws StreamException if the file could not be uploaded
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function downloadToStreamByName($filename, $destination, array $options = [])
|
||||
public function downloadToStreamByName(string $filename, $destination, array $options = [])
|
||||
{
|
||||
if (! is_resource($destination) || get_resource_type($destination) != "stream") {
|
||||
throw InvalidArgumentException::invalidType('$destination', $destination, 'resource');
|
||||
@ -413,6 +413,7 @@ class Bucket
|
||||
*/
|
||||
$typeMap = ['root' => 'stdClass'] + $this->typeMap;
|
||||
$file = apply_type_map_to_document($file, $typeMap);
|
||||
assert(is_object($file));
|
||||
|
||||
if (! isset($file->_id) && ! property_exists($file, '_id')) {
|
||||
throw new CorruptFileException('file._id does not exist');
|
||||
@ -517,7 +518,7 @@ class Bucket
|
||||
* @throws FileNotFoundException if no file could be selected
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function openDownloadStreamByName($filename, array $options = [])
|
||||
public function openDownloadStreamByName(string $filename, array $options = [])
|
||||
{
|
||||
$options += ['revision' => -1];
|
||||
|
||||
@ -550,7 +551,7 @@ class Bucket
|
||||
* @param array $options Upload options
|
||||
* @return resource
|
||||
*/
|
||||
public function openUploadStream($filename, array $options = [])
|
||||
public function openUploadStream(string $filename, array $options = [])
|
||||
{
|
||||
$options += ['chunkSizeBytes' => $this->chunkSizeBytes];
|
||||
|
||||
@ -574,7 +575,7 @@ class Bucket
|
||||
* @throws FileNotFoundException if no file could be selected
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function rename($id, $newFilename)
|
||||
public function rename($id, string $newFilename)
|
||||
{
|
||||
$updateResult = $this->collectionWrapper->updateFilenameForId($id, $newFilename);
|
||||
|
||||
@ -620,7 +621,7 @@ class Bucket
|
||||
* @throws StreamException if the file could not be uploaded
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
public function uploadFromStream($filename, $source, array $options = [])
|
||||
public function uploadFromStream(string $filename, $source, array $options = [])
|
||||
{
|
||||
if (! is_resource($source) || get_resource_type($source) != "stream") {
|
||||
throw InvalidArgumentException::invalidType('$source', $source, 'resource');
|
||||
@ -640,15 +641,14 @@ class Bucket
|
||||
/**
|
||||
* Creates a path for an existing GridFS file.
|
||||
*
|
||||
* @param stdClass $file GridFS file document
|
||||
* @return string
|
||||
* @param object $file GridFS file document
|
||||
*/
|
||||
private function createPathForFile(stdClass $file)
|
||||
private function createPathForFile(object $file): string
|
||||
{
|
||||
if (! is_object($file->_id) || method_exists($file->_id, '__toString')) {
|
||||
$id = (string) $file->_id;
|
||||
} else {
|
||||
if (is_array($file->_id) || (is_object($file->_id) && ! method_exists($file->_id, '__toString'))) {
|
||||
$id = toJSON(fromPHP(['_id' => $file->_id]));
|
||||
} else {
|
||||
$id = (string) $file->_id;
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
@ -662,10 +662,8 @@ class Bucket
|
||||
|
||||
/**
|
||||
* Creates a path for a new GridFS file, which does not yet have an ID.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function createPathForUpload()
|
||||
private function createPathForUpload(): string
|
||||
{
|
||||
return sprintf(
|
||||
'%s://%s/%s.files',
|
||||
@ -677,10 +675,8 @@ class Bucket
|
||||
|
||||
/**
|
||||
* Returns the names of the files collection.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getFilesNamespace()
|
||||
private function getFilesNamespace(): string
|
||||
{
|
||||
return sprintf('%s.%s.files', $this->databaseName, $this->bucketName);
|
||||
}
|
||||
@ -692,10 +688,9 @@ class Bucket
|
||||
* respect the Bucket's type map.
|
||||
*
|
||||
* @param resource $stream GridFS stream
|
||||
* @return stdClass
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
private function getRawFileDocumentForStream($stream)
|
||||
private function getRawFileDocumentForStream($stream): object
|
||||
{
|
||||
if (! is_resource($stream) || get_resource_type($stream) != "stream") {
|
||||
throw InvalidArgumentException::invalidType('$stream', $stream, 'resource');
|
||||
@ -713,10 +708,10 @@ class Bucket
|
||||
/**
|
||||
* Opens a readable stream for the GridFS file.
|
||||
*
|
||||
* @param stdClass $file GridFS file document
|
||||
* @param object $file GridFS file document
|
||||
* @return resource
|
||||
*/
|
||||
private function openDownloadStreamByFile(stdClass $file)
|
||||
private function openDownloadStreamByFile(object $file)
|
||||
{
|
||||
$path = $this->createPathForFile($file);
|
||||
$context = stream_context_create([
|
||||
@ -732,7 +727,7 @@ class Bucket
|
||||
/**
|
||||
* Registers the GridFS stream wrapper if it is not already registered.
|
||||
*/
|
||||
private function registerStreamWrapper()
|
||||
private function registerStreamWrapper(): void
|
||||
{
|
||||
if (in_array(self::$streamWrapperProtocol, stream_get_wrappers())) {
|
||||
return;
|
||||
|
@ -25,11 +25,12 @@ use MongoDB\Driver\ReadPreference;
|
||||
use MongoDB\Exception\InvalidArgumentException;
|
||||
use MongoDB\UpdateResult;
|
||||
use MultipleIterator;
|
||||
use stdClass;
|
||||
|
||||
use function abs;
|
||||
use function assert;
|
||||
use function count;
|
||||
use function is_numeric;
|
||||
use function is_object;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
@ -64,10 +65,10 @@ class CollectionWrapper
|
||||
* @param array $collectionOptions Collection options
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function __construct(Manager $manager, $databaseName, $bucketName, array $collectionOptions = [])
|
||||
public function __construct(Manager $manager, string $databaseName, string $bucketName, array $collectionOptions = [])
|
||||
{
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->bucketName = (string) $bucketName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->bucketName = $bucketName;
|
||||
|
||||
$this->filesCollection = new Collection($manager, $databaseName, sprintf('%s.files', $bucketName), $collectionOptions);
|
||||
$this->chunksCollection = new Collection($manager, $databaseName, sprintf('%s.chunks', $bucketName), $collectionOptions);
|
||||
@ -78,7 +79,7 @@ class CollectionWrapper
|
||||
*
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function deleteChunksByFilesId($id)
|
||||
public function deleteChunksByFilesId($id): void
|
||||
{
|
||||
$this->chunksCollection->deleteMany(['files_id' => $id]);
|
||||
}
|
||||
@ -88,7 +89,7 @@ class CollectionWrapper
|
||||
*
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function deleteFileAndChunksById($id)
|
||||
public function deleteFileAndChunksById($id): void
|
||||
{
|
||||
$this->filesCollection->deleteOne(['_id' => $id]);
|
||||
$this->chunksCollection->deleteMany(['files_id' => $id]);
|
||||
@ -97,7 +98,7 @@ class CollectionWrapper
|
||||
/**
|
||||
* Drops the GridFS files and chunks collections.
|
||||
*/
|
||||
public function dropCollections()
|
||||
public function dropCollections(): void
|
||||
{
|
||||
$this->filesCollection->drop(['typeMap' => []]);
|
||||
$this->chunksCollection->drop(['typeMap' => []]);
|
||||
@ -108,9 +109,8 @@ class CollectionWrapper
|
||||
*
|
||||
* @param mixed $id File ID
|
||||
* @param integer $fromChunk Starting chunk (inclusive)
|
||||
* @return Cursor
|
||||
*/
|
||||
public function findChunksByFileId($id, $fromChunk = 0)
|
||||
public function findChunksByFileId($id, int $fromChunk = 0): Cursor
|
||||
{
|
||||
return $this->chunksCollection->find(
|
||||
[
|
||||
@ -138,14 +138,11 @@ class CollectionWrapper
|
||||
*
|
||||
* @see Bucket::downloadToStreamByName()
|
||||
* @see Bucket::openDownloadStreamByName()
|
||||
* @param string $filename
|
||||
* @param integer $revision
|
||||
* @return stdClass|null
|
||||
*/
|
||||
public function findFileByFilenameAndRevision($filename, $revision)
|
||||
public function findFileByFilenameAndRevision(string $filename, int $revision): ?object
|
||||
{
|
||||
$filename = (string) $filename;
|
||||
$revision = (integer) $revision;
|
||||
$filename = $filename;
|
||||
$revision = $revision;
|
||||
|
||||
if ($revision < 0) {
|
||||
$skip = abs($revision) - 1;
|
||||
@ -155,7 +152,7 @@ class CollectionWrapper
|
||||
$sortOrder = 1;
|
||||
}
|
||||
|
||||
return $this->filesCollection->findOne(
|
||||
$file = $this->filesCollection->findOne(
|
||||
['filename' => $filename],
|
||||
[
|
||||
'skip' => $skip,
|
||||
@ -163,20 +160,25 @@ class CollectionWrapper
|
||||
'typeMap' => ['root' => 'stdClass'],
|
||||
]
|
||||
);
|
||||
assert(is_object($file) || $file === null);
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a GridFS file document for a given ID.
|
||||
*
|
||||
* @param mixed $id
|
||||
* @return stdClass|null
|
||||
*/
|
||||
public function findFileById($id)
|
||||
public function findFileById($id): ?object
|
||||
{
|
||||
return $this->filesCollection->findOne(
|
||||
$file = $this->filesCollection->findOne(
|
||||
['_id' => $id],
|
||||
['typeMap' => ['root' => 'stdClass']]
|
||||
);
|
||||
assert(is_object($file) || $file === null);
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -204,42 +206,22 @@ class CollectionWrapper
|
||||
return $this->filesCollection->findOne($filter, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the bucket name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBucketName()
|
||||
public function getBucketName(): string
|
||||
{
|
||||
return $this->bucketName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the chunks collection.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getChunksCollection()
|
||||
public function getChunksCollection(): Collection
|
||||
{
|
||||
return $this->chunksCollection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the database name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDatabaseName()
|
||||
public function getDatabaseName(): string
|
||||
{
|
||||
return $this->databaseName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the files collection.
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function getFilesCollection()
|
||||
public function getFilesCollection(): Collection
|
||||
{
|
||||
return $this->filesCollection;
|
||||
}
|
||||
@ -249,7 +231,7 @@ class CollectionWrapper
|
||||
*
|
||||
* @param array|object $chunk Chunk document
|
||||
*/
|
||||
public function insertChunk($chunk)
|
||||
public function insertChunk($chunk): void
|
||||
{
|
||||
if (! $this->checkedIndexes) {
|
||||
$this->ensureIndexes();
|
||||
@ -265,7 +247,7 @@ class CollectionWrapper
|
||||
*
|
||||
* @param array|object $file File document
|
||||
*/
|
||||
public function insertFile($file)
|
||||
public function insertFile($file): void
|
||||
{
|
||||
if (! $this->checkedIndexes) {
|
||||
$this->ensureIndexes();
|
||||
@ -277,22 +259,20 @@ class CollectionWrapper
|
||||
/**
|
||||
* Updates the filename field in the file document for a given ID.
|
||||
*
|
||||
* @param mixed $id
|
||||
* @param string $filename
|
||||
* @return UpdateResult
|
||||
* @param mixed $id
|
||||
*/
|
||||
public function updateFilenameForId($id, $filename)
|
||||
public function updateFilenameForId($id, string $filename): UpdateResult
|
||||
{
|
||||
return $this->filesCollection->updateOne(
|
||||
['_id' => $id],
|
||||
['$set' => ['filename' => (string) $filename]]
|
||||
['$set' => ['filename' => $filename]]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an index on the chunks collection if it does not already exist.
|
||||
*/
|
||||
private function ensureChunksIndex()
|
||||
private function ensureChunksIndex(): void
|
||||
{
|
||||
$expectedIndex = ['files_id' => 1, 'n' => 1];
|
||||
|
||||
@ -308,7 +288,7 @@ class CollectionWrapper
|
||||
/**
|
||||
* Create an index on the files collection if it does not already exist.
|
||||
*/
|
||||
private function ensureFilesIndex()
|
||||
private function ensureFilesIndex(): void
|
||||
{
|
||||
$expectedIndex = ['filename' => 1, 'uploadDate' => 1];
|
||||
|
||||
@ -327,7 +307,7 @@ class CollectionWrapper
|
||||
* This method is called once before the first write operation on a GridFS
|
||||
* bucket. Indexes are only be created if the files collection is empty.
|
||||
*/
|
||||
private function ensureIndexes()
|
||||
private function ensureIndexes(): void
|
||||
{
|
||||
if ($this->checkedIndexes) {
|
||||
return;
|
||||
@ -375,10 +355,8 @@ class CollectionWrapper
|
||||
|
||||
/**
|
||||
* Returns whether the files collection is empty.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function isFilesCollectionEmpty()
|
||||
private function isFilesCollectionEmpty(): bool
|
||||
{
|
||||
return null === $this->filesCollection->findOne([], [
|
||||
'readPreference' => new ReadPreference(ReadPreference::RP_PRIMARY),
|
||||
|
@ -23,13 +23,21 @@ use function sprintf;
|
||||
|
||||
class CorruptFileException extends RuntimeException
|
||||
{
|
||||
/**
|
||||
* Thrown when a chunk doesn't contain valid data.
|
||||
*/
|
||||
public static function invalidChunkData(int $chunkIndex): self
|
||||
{
|
||||
return new static(sprintf('Invalid data found for index "%d"', $chunkIndex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a chunk is not found for an expected index.
|
||||
*
|
||||
* @param integer $expectedIndex Expected index number
|
||||
* @return self
|
||||
*/
|
||||
public static function missingChunk($expectedIndex)
|
||||
public static function missingChunk(int $expectedIndex)
|
||||
{
|
||||
return new static(sprintf('Chunk not found for index "%d"', $expectedIndex));
|
||||
}
|
||||
@ -41,7 +49,7 @@ class CorruptFileException extends RuntimeException
|
||||
* @param integer $expectedIndex Expected index number
|
||||
* @return self
|
||||
*/
|
||||
public static function unexpectedIndex($index, $expectedIndex)
|
||||
public static function unexpectedIndex(int $index, int $expectedIndex)
|
||||
{
|
||||
return new static(sprintf('Expected chunk to have index "%d" but found "%d"', $expectedIndex, $index));
|
||||
}
|
||||
@ -53,7 +61,7 @@ class CorruptFileException extends RuntimeException
|
||||
* @param integer $expectedSize Expected size
|
||||
* @return self
|
||||
*/
|
||||
public static function unexpectedSize($size, $expectedSize)
|
||||
public static function unexpectedSize(int $size, int $expectedSize)
|
||||
{
|
||||
return new static(sprintf('Expected chunk to have size "%d" but found "%d"', $expectedSize, $size));
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ class FileNotFoundException extends RuntimeException
|
||||
* @param string $namespace Namespace for the files collection
|
||||
* @return self
|
||||
*/
|
||||
public static function byFilenameAndRevision($filename, $revision, $namespace)
|
||||
public static function byFilenameAndRevision(string $filename, int $revision, string $namespace)
|
||||
{
|
||||
return new static(sprintf('File with name "%s" and revision "%d" not found in "%s"', $filename, $revision, $namespace));
|
||||
}
|
||||
@ -45,7 +45,7 @@ class FileNotFoundException extends RuntimeException
|
||||
* @param string $namespace Namespace for the files collection
|
||||
* @return self
|
||||
*/
|
||||
public static function byId($id, $namespace)
|
||||
public static function byId($id, string $namespace)
|
||||
{
|
||||
$json = toJSON(fromPHP(['_id' => $id]));
|
||||
|
||||
|
@ -17,14 +17,16 @@
|
||||
|
||||
namespace MongoDB\GridFS;
|
||||
|
||||
use MongoDB\Driver\CursorInterface;
|
||||
use MongoDB\BSON\Binary;
|
||||
use MongoDB\Driver\Cursor;
|
||||
use MongoDB\Exception\InvalidArgumentException;
|
||||
use MongoDB\GridFS\Exception\CorruptFileException;
|
||||
use stdClass;
|
||||
|
||||
use function assert;
|
||||
use function ceil;
|
||||
use function floor;
|
||||
use function is_integer;
|
||||
use function is_object;
|
||||
use function property_exists;
|
||||
use function sprintf;
|
||||
use function strlen;
|
||||
@ -49,16 +51,16 @@ class ReadableStream
|
||||
/** @var integer */
|
||||
private $chunkOffset = 0;
|
||||
|
||||
/** @var CursorInterface|null */
|
||||
/** @var Cursor|null */
|
||||
private $chunksIterator;
|
||||
|
||||
/** @var CollectionWrapper */
|
||||
private $collectionWrapper;
|
||||
|
||||
/** @var float|integer */
|
||||
/** @var integer */
|
||||
private $expectedLastChunkSize = 0;
|
||||
|
||||
/** @var stdClass */
|
||||
/** @var object */
|
||||
private $file;
|
||||
|
||||
/** @var integer */
|
||||
@ -71,10 +73,10 @@ class ReadableStream
|
||||
* Constructs a readable GridFS stream.
|
||||
*
|
||||
* @param CollectionWrapper $collectionWrapper GridFS collection wrapper
|
||||
* @param stdClass $file GridFS file document
|
||||
* @param object $file GridFS file document
|
||||
* @throws CorruptFileException
|
||||
*/
|
||||
public function __construct(CollectionWrapper $collectionWrapper, stdClass $file)
|
||||
public function __construct(CollectionWrapper $collectionWrapper, object $file)
|
||||
{
|
||||
if (! isset($file->chunkSize) || ! is_integer($file->chunkSize) || $file->chunkSize < 1) {
|
||||
throw new CorruptFileException('file.chunkSize is not an integer >= 1');
|
||||
@ -89,8 +91,8 @@ class ReadableStream
|
||||
}
|
||||
|
||||
$this->file = $file;
|
||||
$this->chunkSize = (integer) $file->chunkSize;
|
||||
$this->length = (integer) $file->length;
|
||||
$this->chunkSize = $file->chunkSize;
|
||||
$this->length = $file->length;
|
||||
|
||||
$this->collectionWrapper = $collectionWrapper;
|
||||
|
||||
@ -106,7 +108,7 @@ class ReadableStream
|
||||
* @see https://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.debuginfo
|
||||
* @return array
|
||||
*/
|
||||
public function __debugInfo()
|
||||
public function __debugInfo(): array
|
||||
{
|
||||
return [
|
||||
'bucketName' => $this->collectionWrapper->getBucketName(),
|
||||
@ -115,37 +117,25 @@ class ReadableStream
|
||||
];
|
||||
}
|
||||
|
||||
public function close()
|
||||
public function close(): void
|
||||
{
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the stream's file document.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getFile()
|
||||
public function getFile(): object
|
||||
{
|
||||
return $this->file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the stream's size in bytes.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getSize()
|
||||
public function getSize(): int
|
||||
{
|
||||
return $this->length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return whether the current read position is at the end of the stream.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isEOF()
|
||||
public function isEOF(): bool
|
||||
{
|
||||
if ($this->chunkOffset === $this->numChunks - 1) {
|
||||
return $this->bufferOffset >= $this->expectedLastChunkSize;
|
||||
@ -161,10 +151,9 @@ class ReadableStream
|
||||
* if data is not available to be read.
|
||||
*
|
||||
* @param integer $length Number of bytes to read
|
||||
* @return string
|
||||
* @throws InvalidArgumentException if $length is negative
|
||||
*/
|
||||
public function readBytes($length)
|
||||
public function readBytes(int $length): string
|
||||
{
|
||||
if ($length < 0) {
|
||||
throw new InvalidArgumentException(sprintf('$length must be >= 0; given: %d', $length));
|
||||
@ -178,6 +167,8 @@ class ReadableStream
|
||||
return '';
|
||||
}
|
||||
|
||||
assert($this->buffer !== null);
|
||||
|
||||
$data = '';
|
||||
|
||||
while (strlen($data) < $length) {
|
||||
@ -196,10 +187,9 @@ class ReadableStream
|
||||
/**
|
||||
* Seeks the chunk and buffer offsets for the next read operation.
|
||||
*
|
||||
* @param integer $offset
|
||||
* @throws InvalidArgumentException if $offset is out of range
|
||||
*/
|
||||
public function seek($offset)
|
||||
public function seek(int $offset): void
|
||||
{
|
||||
if ($offset < 0 || $offset > $this->file->length) {
|
||||
throw new InvalidArgumentException(sprintf('$offset must be >= 0 and <= %d; given: %d', $this->file->length, $offset));
|
||||
@ -247,10 +237,8 @@ class ReadableStream
|
||||
* Return the current position of the stream.
|
||||
*
|
||||
* This is the offset within the stream where the next byte would be read.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function tell()
|
||||
public function tell(): int
|
||||
{
|
||||
return ($this->chunkOffset * $this->chunkSize) + $this->bufferOffset;
|
||||
}
|
||||
@ -261,22 +249,31 @@ class ReadableStream
|
||||
* @return boolean Whether there was a current chunk to read
|
||||
* @throws CorruptFileException if an expected chunk could not be read successfully
|
||||
*/
|
||||
private function initBufferFromCurrentChunk()
|
||||
private function initBufferFromCurrentChunk(): bool
|
||||
{
|
||||
if ($this->chunkOffset === 0 && $this->numChunks === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->chunksIterator === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (! $this->chunksIterator->valid()) {
|
||||
throw CorruptFileException::missingChunk($this->chunkOffset);
|
||||
}
|
||||
|
||||
$currentChunk = $this->chunksIterator->current();
|
||||
assert(is_object($currentChunk));
|
||||
|
||||
if ($currentChunk->n !== $this->chunkOffset) {
|
||||
throw CorruptFileException::unexpectedIndex($currentChunk->n, $this->chunkOffset);
|
||||
}
|
||||
|
||||
if (! $currentChunk->data instanceof Binary) {
|
||||
throw CorruptFileException::invalidChunkData($this->chunkOffset);
|
||||
}
|
||||
|
||||
$this->buffer = $currentChunk->data->getData();
|
||||
|
||||
$actualChunkSize = strlen($this->buffer);
|
||||
@ -298,12 +295,16 @@ class ReadableStream
|
||||
* @return boolean Whether there was a next chunk to read
|
||||
* @throws CorruptFileException if an expected chunk could not be read successfully
|
||||
*/
|
||||
private function initBufferFromNextChunk()
|
||||
private function initBufferFromNextChunk(): bool
|
||||
{
|
||||
if ($this->chunkOffset === $this->numChunks - 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($this->chunksIterator === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->bufferOffset = 0;
|
||||
$this->chunkOffset++;
|
||||
$this->chunksIterator->next();
|
||||
@ -314,7 +315,7 @@ class ReadableStream
|
||||
/**
|
||||
* Initializes the chunk iterator starting from the current offset.
|
||||
*/
|
||||
private function initChunksIterator()
|
||||
private function initChunksIterator(): void
|
||||
{
|
||||
$this->chunksIterator = $this->collectionWrapper->findChunksByFileId($this->file->_id, $this->chunkOffset);
|
||||
$this->chunksIterator->rewind();
|
||||
|
@ -18,11 +18,12 @@
|
||||
namespace MongoDB\GridFS;
|
||||
|
||||
use MongoDB\BSON\UTCDateTime;
|
||||
use stdClass;
|
||||
|
||||
use function assert;
|
||||
use function explode;
|
||||
use function in_array;
|
||||
use function is_integer;
|
||||
use function is_resource;
|
||||
use function stream_context_get_options;
|
||||
use function stream_get_wrappers;
|
||||
use function stream_wrapper_register;
|
||||
@ -64,11 +65,11 @@ class StreamWrapper
|
||||
|
||||
/**
|
||||
* Return the stream's file document.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getFile()
|
||||
public function getFile(): object
|
||||
{
|
||||
assert($this->stream !== null);
|
||||
|
||||
return $this->stream->getFile();
|
||||
}
|
||||
|
||||
@ -77,7 +78,7 @@ class StreamWrapper
|
||||
*
|
||||
* @param string $protocol Protocol to use for stream_wrapper_register()
|
||||
*/
|
||||
public static function register($protocol = 'gridfs')
|
||||
public static function register(string $protocol = 'gridfs'): void
|
||||
{
|
||||
if (in_array($protocol, stream_get_wrappers())) {
|
||||
stream_wrapper_unregister($protocol);
|
||||
@ -91,7 +92,7 @@ class StreamWrapper
|
||||
*
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-close.php
|
||||
*/
|
||||
public function stream_close()
|
||||
public function stream_close(): void
|
||||
{
|
||||
if (! $this->stream) {
|
||||
return;
|
||||
@ -104,9 +105,8 @@ class StreamWrapper
|
||||
* Returns whether the file pointer is at the end of the stream.
|
||||
*
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-eof.php
|
||||
* @return boolean
|
||||
*/
|
||||
public function stream_eof()
|
||||
public function stream_eof(): bool
|
||||
{
|
||||
if (! $this->stream instanceof ReadableStream) {
|
||||
return false;
|
||||
@ -119,13 +119,12 @@ class StreamWrapper
|
||||
* Opens the stream.
|
||||
*
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-open.php
|
||||
* @param string $path Path to the file resource
|
||||
* @param string $mode Mode used to open the file (only "r" and "w" are supported)
|
||||
* @param integer $options Additional flags set by the streams API
|
||||
* @param string $openedPath Not used
|
||||
* @return boolean
|
||||
* @param string $path Path to the file resource
|
||||
* @param string $mode Mode used to open the file (only "r" and "w" are supported)
|
||||
* @param integer $options Additional flags set by the streams API
|
||||
* @param string|null $openedPath Not used
|
||||
*/
|
||||
public function stream_open($path, $mode, $options, &$openedPath)
|
||||
public function stream_open(string $path, string $mode, int $options, ?string &$openedPath): bool
|
||||
{
|
||||
$this->initProtocol($path);
|
||||
$this->mode = $mode;
|
||||
@ -149,9 +148,8 @@ class StreamWrapper
|
||||
*
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-read.php
|
||||
* @param integer $length Number of bytes to read
|
||||
* @return string
|
||||
*/
|
||||
public function stream_read($length)
|
||||
public function stream_read(int $length): string
|
||||
{
|
||||
if (! $this->stream instanceof ReadableStream) {
|
||||
return '';
|
||||
@ -168,8 +166,10 @@ class StreamWrapper
|
||||
* @param integer $whence One of SEEK_SET, SEEK_CUR, or SEEK_END
|
||||
* @return boolean True if the position was updated and false otherwise
|
||||
*/
|
||||
public function stream_seek($offset, $whence = SEEK_SET)
|
||||
public function stream_seek(int $offset, int $whence = SEEK_SET): bool
|
||||
{
|
||||
assert($this->stream !== null);
|
||||
|
||||
$size = $this->stream->getSize();
|
||||
|
||||
if ($whence === SEEK_CUR) {
|
||||
@ -198,10 +198,11 @@ class StreamWrapper
|
||||
* Return information about the stream.
|
||||
*
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-stat.php
|
||||
* @return array
|
||||
*/
|
||||
public function stream_stat()
|
||||
public function stream_stat(): array
|
||||
{
|
||||
assert($this->stream !== null);
|
||||
|
||||
$stat = $this->getStatTemplate();
|
||||
|
||||
$stat[2] = $stat['mode'] = $this->stream instanceof ReadableStream
|
||||
@ -230,8 +231,10 @@ class StreamWrapper
|
||||
* @see https://php.net/manual/en/streamwrapper.stream-tell.php
|
||||
* @return integer The current position of the stream
|
||||
*/
|
||||
public function stream_tell()
|
||||
public function stream_tell(): int
|
||||
{
|
||||
assert($this->stream !== null);
|
||||
|
||||
return $this->stream->tell();
|
||||
}
|
||||
|
||||
@ -242,7 +245,7 @@ class StreamWrapper
|
||||
* @param string $data Data to write
|
||||
* @return integer The number of bytes written
|
||||
*/
|
||||
public function stream_write($data)
|
||||
public function stream_write(string $data): int
|
||||
{
|
||||
if (! $this->stream instanceof WritableStream) {
|
||||
return 0;
|
||||
@ -253,10 +256,8 @@ class StreamWrapper
|
||||
|
||||
/**
|
||||
* Returns a stat template with default values.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function getStatTemplate()
|
||||
private function getStatTemplate(): array
|
||||
{
|
||||
return [
|
||||
// phpcs:disable Squiz.Arrays.ArrayDeclaration.IndexNoNewline
|
||||
@ -281,9 +282,8 @@ class StreamWrapper
|
||||
* Initialize the protocol from the given path.
|
||||
*
|
||||
* @see StreamWrapper::stream_open()
|
||||
* @param string $path
|
||||
*/
|
||||
private function initProtocol($path)
|
||||
private function initProtocol(string $path): void
|
||||
{
|
||||
$parts = explode('://', $path, 2);
|
||||
$this->protocol = $parts[0] ?: 'gridfs';
|
||||
@ -293,12 +293,13 @@ class StreamWrapper
|
||||
* Initialize the internal stream for reading.
|
||||
*
|
||||
* @see StreamWrapper::stream_open()
|
||||
* @return boolean
|
||||
*/
|
||||
private function initReadableStream()
|
||||
private function initReadableStream(): bool
|
||||
{
|
||||
assert(is_resource($this->context));
|
||||
$context = stream_context_get_options($this->context);
|
||||
|
||||
assert($this->protocol !== null);
|
||||
$this->stream = new ReadableStream(
|
||||
$context[$this->protocol]['collectionWrapper'],
|
||||
$context[$this->protocol]['file']
|
||||
@ -311,12 +312,13 @@ class StreamWrapper
|
||||
* Initialize the internal stream for writing.
|
||||
*
|
||||
* @see StreamWrapper::stream_open()
|
||||
* @return boolean
|
||||
*/
|
||||
private function initWritableStream()
|
||||
private function initWritableStream(): bool
|
||||
{
|
||||
assert(is_resource($this->context));
|
||||
$context = stream_context_get_options($this->context);
|
||||
|
||||
assert($this->protocol !== null);
|
||||
$this->stream = new WritableStream(
|
||||
$context[$this->protocol]['collectionWrapper'],
|
||||
$context[$this->protocol]['filename'],
|
||||
|
@ -17,12 +17,12 @@
|
||||
|
||||
namespace MongoDB\GridFS;
|
||||
|
||||
use HashContext;
|
||||
use MongoDB\BSON\Binary;
|
||||
use MongoDB\BSON\ObjectId;
|
||||
use MongoDB\BSON\UTCDateTime;
|
||||
use MongoDB\Driver\Exception\RuntimeException as DriverRuntimeException;
|
||||
use MongoDB\Exception\InvalidArgumentException;
|
||||
use stdClass;
|
||||
|
||||
use function array_intersect_key;
|
||||
use function hash_final;
|
||||
@ -66,7 +66,7 @@ class WritableStream
|
||||
/** @var array */
|
||||
private $file;
|
||||
|
||||
/** @var resource */
|
||||
/** @var HashContext|null */
|
||||
private $hashCtx;
|
||||
|
||||
/** @var boolean */
|
||||
@ -103,7 +103,7 @@ class WritableStream
|
||||
* @param array $options Upload options
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function __construct(CollectionWrapper $collectionWrapper, $filename, array $options = [])
|
||||
public function __construct(CollectionWrapper $collectionWrapper, string $filename, array $options = [])
|
||||
{
|
||||
$options += [
|
||||
'_id' => new ObjectId(),
|
||||
@ -146,7 +146,7 @@ class WritableStream
|
||||
$this->file = [
|
||||
'_id' => $options['_id'],
|
||||
'chunkSize' => $this->chunkSize,
|
||||
'filename' => (string) $filename,
|
||||
'filename' => $filename,
|
||||
] + array_intersect_key($options, ['aliases' => 1, 'contentType' => 1, 'metadata' => 1]);
|
||||
}
|
||||
|
||||
@ -154,9 +154,8 @@ class WritableStream
|
||||
* Return internal properties for debugging purposes.
|
||||
*
|
||||
* @see https://php.net/manual/en/language.oop5.magic.php#language.oop5.magic.debuginfo
|
||||
* @return array
|
||||
*/
|
||||
public function __debugInfo()
|
||||
public function __debugInfo(): array
|
||||
{
|
||||
return [
|
||||
'bucketName' => $this->collectionWrapper->getBucketName(),
|
||||
@ -168,7 +167,7 @@ class WritableStream
|
||||
/**
|
||||
* Closes an active stream and flushes all buffered data to GridFS.
|
||||
*/
|
||||
public function close()
|
||||
public function close(): void
|
||||
{
|
||||
if ($this->isClosed) {
|
||||
// TODO: Should this be an error condition? e.g. BadMethodCallException
|
||||
@ -185,10 +184,8 @@ class WritableStream
|
||||
|
||||
/**
|
||||
* Return the stream's file document.
|
||||
*
|
||||
* @return stdClass
|
||||
*/
|
||||
public function getFile()
|
||||
public function getFile(): object
|
||||
{
|
||||
return (object) $this->file;
|
||||
}
|
||||
@ -197,10 +194,8 @@ class WritableStream
|
||||
* Return the stream's size in bytes.
|
||||
*
|
||||
* Note: this value will increase as more data is written to the stream.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getSize()
|
||||
public function getSize(): int
|
||||
{
|
||||
return $this->length + strlen($this->buffer);
|
||||
}
|
||||
@ -213,9 +208,8 @@ class WritableStream
|
||||
* always the end of the stream.
|
||||
*
|
||||
* @see WritableStream::getSize()
|
||||
* @return integer
|
||||
*/
|
||||
public function tell()
|
||||
public function tell(): int
|
||||
{
|
||||
return $this->getSize();
|
||||
}
|
||||
@ -227,13 +221,12 @@ class WritableStream
|
||||
* which point a chunk document will be inserted and the buffer reset.
|
||||
*
|
||||
* @param string $data Binary data to write
|
||||
* @return integer
|
||||
*/
|
||||
public function writeBytes($data)
|
||||
public function writeBytes(string $data): int
|
||||
{
|
||||
if ($this->isClosed) {
|
||||
// TODO: Should this be an error condition? e.g. BadMethodCallException
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
$bytesRead = 0;
|
||||
@ -251,7 +244,7 @@ class WritableStream
|
||||
return $bytesRead;
|
||||
}
|
||||
|
||||
private function abort()
|
||||
private function abort(): void
|
||||
{
|
||||
try {
|
||||
$this->collectionWrapper->deleteChunksByFilesId($this->file['_id']);
|
||||
@ -270,7 +263,7 @@ class WritableStream
|
||||
$this->file['length'] = $this->length;
|
||||
$this->file['uploadDate'] = new UTCDateTime();
|
||||
|
||||
if (! $this->disableMD5) {
|
||||
if (! $this->disableMD5 && $this->hashCtx) {
|
||||
$this->file['md5'] = hash_final($this->hashCtx);
|
||||
}
|
||||
|
||||
@ -285,7 +278,7 @@ class WritableStream
|
||||
return $this->file['_id'];
|
||||
}
|
||||
|
||||
private function insertChunkFromBuffer()
|
||||
private function insertChunkFromBuffer(): void
|
||||
{
|
||||
if (strlen($this->buffer) == 0) {
|
||||
return;
|
||||
@ -300,7 +293,7 @@ class WritableStream
|
||||
'data' => new Binary($data, Binary::TYPE_GENERIC),
|
||||
];
|
||||
|
||||
if (! $this->disableMD5) {
|
||||
if (! $this->disableMD5 && $this->hashCtx) {
|
||||
hash_update($this->hashCtx, $data);
|
||||
}
|
||||
|
||||
|
@ -28,16 +28,12 @@ class InsertManyResult
|
||||
/** @var WriteResult */
|
||||
private $writeResult;
|
||||
|
||||
/** @var mixed[] */
|
||||
/** @var array */
|
||||
private $insertedIds;
|
||||
|
||||
/** @var boolean */
|
||||
private $isAcknowledged;
|
||||
|
||||
/**
|
||||
* @param WriteResult $writeResult
|
||||
* @param mixed[] $insertedIds
|
||||
*/
|
||||
public function __construct(WriteResult $writeResult, array $insertedIds)
|
||||
{
|
||||
$this->writeResult = $writeResult;
|
||||
@ -51,7 +47,7 @@ class InsertManyResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see InsertManyResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getInsertedCount()
|
||||
@ -72,7 +68,7 @@ class InsertManyResult
|
||||
* field value. Any driver-generated ID will be a MongoDB\BSON\ObjectId
|
||||
* instance.
|
||||
*
|
||||
* @return mixed[]
|
||||
* @return array
|
||||
*/
|
||||
public function getInsertedIds()
|
||||
{
|
||||
|
@ -35,8 +35,7 @@ class InsertOneResult
|
||||
private $isAcknowledged;
|
||||
|
||||
/**
|
||||
* @param WriteResult $writeResult
|
||||
* @param mixed $insertedId
|
||||
* @param mixed $insertedId
|
||||
*/
|
||||
public function __construct(WriteResult $writeResult, $insertedId)
|
||||
{
|
||||
@ -51,7 +50,7 @@ class InsertOneResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see InsertOneResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getInsertedCount()
|
||||
|
@ -79,7 +79,7 @@ class MapReduceResult implements IteratorAggregate
|
||||
*/
|
||||
public function getExecutionTimeMS()
|
||||
{
|
||||
return (integer) $this->executionTimeMS;
|
||||
return $this->executionTimeMS;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -51,7 +51,6 @@ class BSONArray extends ArrayObject implements JsonSerializable, Serializable, U
|
||||
*
|
||||
* @see https://php.net/oop5.magic#object.set-state
|
||||
* @see https://php.net/var-export
|
||||
* @param array $properties
|
||||
* @return self
|
||||
*/
|
||||
public static function __set_state(array $properties)
|
||||
@ -71,6 +70,7 @@ class BSONArray extends ArrayObject implements JsonSerializable, Serializable, U
|
||||
* @see https://php.net/mongodb-bson-serializable.bsonserialize
|
||||
* @return array
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function bsonSerialize()
|
||||
{
|
||||
return array_values($this->getArrayCopy());
|
||||
@ -82,6 +82,7 @@ class BSONArray extends ArrayObject implements JsonSerializable, Serializable, U
|
||||
* @see https://php.net/mongodb-bson-unserializable.bsonunserialize
|
||||
* @param array $data Array data
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function bsonUnserialize(array $data)
|
||||
{
|
||||
self::__construct($data);
|
||||
|
@ -50,11 +50,8 @@ class BSONDocument extends ArrayObject implements JsonSerializable, Serializable
|
||||
* by default.
|
||||
*
|
||||
* @see https://php.net/arrayobject.construct
|
||||
* @param array $input
|
||||
* @param integer $flags
|
||||
* @param string $iteratorClass
|
||||
*/
|
||||
public function __construct($input = [], $flags = ArrayObject::ARRAY_AS_PROPS, $iteratorClass = 'ArrayIterator')
|
||||
public function __construct(array $input = [], int $flags = ArrayObject::ARRAY_AS_PROPS, string $iteratorClass = 'ArrayIterator')
|
||||
{
|
||||
parent::__construct($input, $flags, $iteratorClass);
|
||||
}
|
||||
@ -64,7 +61,6 @@ class BSONDocument extends ArrayObject implements JsonSerializable, Serializable
|
||||
*
|
||||
* @see https://php.net/oop5.magic#object.set-state
|
||||
* @see https://php.net/var-export
|
||||
* @param array $properties
|
||||
* @return self
|
||||
*/
|
||||
public static function __set_state(array $properties)
|
||||
@ -81,6 +77,7 @@ class BSONDocument extends ArrayObject implements JsonSerializable, Serializable
|
||||
* @see https://php.net/mongodb-bson-serializable.bsonserialize
|
||||
* @return object
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function bsonSerialize()
|
||||
{
|
||||
return (object) $this->getArrayCopy();
|
||||
@ -92,6 +89,7 @@ class BSONDocument extends ArrayObject implements JsonSerializable, Serializable
|
||||
* @see https://php.net/mongodb-bson-unserializable.bsonunserialize
|
||||
* @param array $data Array data
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function bsonUnserialize(array $data)
|
||||
{
|
||||
parent::__construct($data, ArrayObject::ARRAY_AS_PROPS);
|
||||
|
@ -68,7 +68,7 @@ class BSONIterator implements Iterator
|
||||
* @param array $options Iterator options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($data, array $options = [])
|
||||
public function __construct(string $data, array $options = [])
|
||||
{
|
||||
if (isset($options['typeMap']) && ! is_array($options['typeMap'])) {
|
||||
throw InvalidArgumentException::invalidType('"typeMap" option', $options['typeMap'], 'array');
|
||||
@ -130,15 +130,14 @@ class BSONIterator implements Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.valid
|
||||
* @return boolean
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function valid()
|
||||
public function valid(): bool
|
||||
{
|
||||
return $this->current !== null;
|
||||
}
|
||||
|
||||
private function advance()
|
||||
private function advance(): void
|
||||
{
|
||||
if ($this->position === $this->bufferLength) {
|
||||
return;
|
||||
|
@ -72,10 +72,8 @@ class CachingIterator implements Countable, Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/countable.count
|
||||
* @return integer
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function count()
|
||||
public function count(): int
|
||||
{
|
||||
$this->exhaustIterator();
|
||||
|
||||
@ -108,10 +106,8 @@ class CachingIterator implements Countable, Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.next
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function next()
|
||||
public function next(): void
|
||||
{
|
||||
if (! $this->iteratorExhausted) {
|
||||
$this->iteratorAdvanced = true;
|
||||
@ -127,10 +123,8 @@ class CachingIterator implements Countable, Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.rewind
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function rewind()
|
||||
public function rewind(): void
|
||||
{
|
||||
/* If the iterator has advanced, exhaust it now so that future iteration
|
||||
* can rely on the cache.
|
||||
@ -144,10 +138,8 @@ class CachingIterator implements Countable, Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.valid
|
||||
* @return boolean
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function valid()
|
||||
public function valid(): bool
|
||||
{
|
||||
return $this->key() !== null;
|
||||
}
|
||||
@ -155,7 +147,7 @@ class CachingIterator implements Countable, Iterator
|
||||
/**
|
||||
* Ensures that the inner iterator is fully consumed and cached.
|
||||
*/
|
||||
private function exhaustIterator()
|
||||
private function exhaustIterator(): void
|
||||
{
|
||||
while (! $this->iteratorExhausted) {
|
||||
$this->next();
|
||||
@ -165,7 +157,7 @@ class CachingIterator implements Countable, Iterator
|
||||
/**
|
||||
* Stores the current item in the cache.
|
||||
*/
|
||||
private function storeCurrentItem()
|
||||
private function storeCurrentItem(): void
|
||||
{
|
||||
if (! $this->iterator->valid()) {
|
||||
return;
|
||||
|
@ -64,30 +64,24 @@ class CallbackIterator implements Iterator
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.next
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function next()
|
||||
public function next(): void
|
||||
{
|
||||
$this->iterator->next();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.rewind
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function rewind()
|
||||
public function rewind(): void
|
||||
{
|
||||
$this->iterator->rewind();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see https://php.net/iterator.valid
|
||||
* @return boolean
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function valid()
|
||||
public function valid(): bool
|
||||
{
|
||||
return $this->iterator->valid();
|
||||
}
|
||||
|
@ -30,9 +30,9 @@ use MongoDB\Exception\ResumeTokenException;
|
||||
use MongoDB\Exception\UnexpectedValueException;
|
||||
use ReturnTypeWillChange;
|
||||
|
||||
use function assert;
|
||||
use function count;
|
||||
use function is_array;
|
||||
use function is_integer;
|
||||
use function is_object;
|
||||
use function MongoDB\Driver\Monitoring\addSubscriber;
|
||||
use function MongoDB\Driver\Monitoring\removeSubscriber;
|
||||
@ -71,25 +71,14 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @param Cursor $cursor
|
||||
* @param integer $firstBatchSize
|
||||
* @param array|object|null $initialResumeToken
|
||||
* @param object|null $postBatchResumeToken
|
||||
*/
|
||||
public function __construct(Cursor $cursor, $firstBatchSize, $initialResumeToken, $postBatchResumeToken)
|
||||
public function __construct(Cursor $cursor, int $firstBatchSize, $initialResumeToken, ?object $postBatchResumeToken)
|
||||
{
|
||||
if (! is_integer($firstBatchSize)) {
|
||||
throw InvalidArgumentException::invalidType('$firstBatchSize', $firstBatchSize, 'integer');
|
||||
}
|
||||
|
||||
if (isset($initialResumeToken) && ! is_array($initialResumeToken) && ! is_object($initialResumeToken)) {
|
||||
throw InvalidArgumentException::invalidType('$initialResumeToken', $initialResumeToken, 'array or object');
|
||||
}
|
||||
|
||||
if (isset($postBatchResumeToken) && ! is_object($postBatchResumeToken)) {
|
||||
throw InvalidArgumentException::invalidType('$postBatchResumeToken', $postBatchResumeToken, 'object');
|
||||
}
|
||||
|
||||
parent::__construct($cursor);
|
||||
|
||||
$this->batchSize = $firstBatchSize;
|
||||
@ -100,24 +89,24 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandFailed(CommandFailedEvent $event)
|
||||
final public function commandFailed(CommandFailedEvent $event): void
|
||||
{
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandStarted(CommandStartedEvent $event)
|
||||
final public function commandStarted(CommandStartedEvent $event): void
|
||||
{
|
||||
if ($event->getCommandName() !== 'getMore') {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->batchPosition = 0;
|
||||
$this->batchSize = null;
|
||||
$this->batchSize = 0;
|
||||
$this->postBatchResumeToken = null;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandSucceeded(CommandSucceededEvent $event)
|
||||
final public function commandSucceeded(CommandSucceededEvent $event): void
|
||||
{
|
||||
if ($event->getCommandName() !== 'getMore') {
|
||||
return;
|
||||
@ -146,6 +135,20 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
return $this->isValid ? parent::current() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Necessary to let psalm know that we're always expecting a cursor as inner
|
||||
* iterator. This could be side-stepped due to the class not being final,
|
||||
* but it's very much an invalid use-case. This method can be dropped in 2.0
|
||||
* once the class is final.
|
||||
*/
|
||||
final public function getInnerIterator(): Cursor
|
||||
{
|
||||
$cursor = parent::getInnerIterator();
|
||||
assert($cursor instanceof Cursor);
|
||||
|
||||
return $cursor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the resume token for the iterator's current position.
|
||||
*
|
||||
@ -180,10 +183,8 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
|
||||
/**
|
||||
* @see https://php.net/iteratoriterator.rewind
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function next()
|
||||
public function next(): void
|
||||
{
|
||||
/* Determine if advancing the iterator will execute a getMore command
|
||||
* (i.e. we are already positioned at the end of the current batch). If
|
||||
@ -208,10 +209,8 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
|
||||
/**
|
||||
* @see https://php.net/iteratoriterator.rewind
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function rewind()
|
||||
public function rewind(): void
|
||||
{
|
||||
if ($this->isRewindNop) {
|
||||
return;
|
||||
@ -223,10 +222,8 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
|
||||
/**
|
||||
* @see https://php.net/iteratoriterator.valid
|
||||
* @return boolean
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function valid()
|
||||
public function valid(): bool
|
||||
{
|
||||
return $this->isValid;
|
||||
}
|
||||
@ -270,10 +267,8 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
|
||||
/**
|
||||
* Return whether the iterator is positioned at the end of the batch.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function isAtEndOfBatch()
|
||||
private function isAtEndOfBatch(): bool
|
||||
{
|
||||
return $this->batchPosition + 1 >= $this->batchSize;
|
||||
}
|
||||
@ -282,9 +277,8 @@ class ChangeStreamIterator extends IteratorIterator implements CommandSubscriber
|
||||
* Perform housekeeping after an iteration event.
|
||||
*
|
||||
* @see https://github.com/mongodb/specifications/blob/master/source/change-streams/change-streams.rst#updating-the-cached-resume-token
|
||||
* @param boolean $incrementBatchPosition
|
||||
*/
|
||||
private function onIteration($incrementBatchPosition)
|
||||
private function onIteration(bool $incrementBatchPosition): void
|
||||
{
|
||||
$this->isValid = parent::valid();
|
||||
|
||||
|
@ -86,8 +86,6 @@ class CollectionInfo implements ArrayAccess
|
||||
|
||||
/**
|
||||
* Return information about the _id index for the collection.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getIdIndex(): array
|
||||
{
|
||||
@ -98,7 +96,6 @@ class CollectionInfo implements ArrayAccess
|
||||
* Return the "info" property of the server response.
|
||||
*
|
||||
* @see https://mongodb.com/docs/manual/reference/command/listCollections/#output
|
||||
* @return array
|
||||
*/
|
||||
public function getInfo(): array
|
||||
{
|
||||
@ -131,7 +128,6 @@ class CollectionInfo implements ArrayAccess
|
||||
* Return the collection type.
|
||||
*
|
||||
* @see https://mongodb.com/docs/manual/reference/command/listCollections/#output
|
||||
* @return string
|
||||
*/
|
||||
public function getType(): string
|
||||
{
|
||||
|
@ -18,7 +18,6 @@
|
||||
namespace MongoDB\Model;
|
||||
|
||||
use IteratorIterator;
|
||||
use ReturnTypeWillChange;
|
||||
use Traversable;
|
||||
|
||||
/**
|
||||
@ -37,10 +36,7 @@ class CollectionInfoCommandIterator extends IteratorIterator implements Collecti
|
||||
/** @var string|null */
|
||||
private $databaseName;
|
||||
|
||||
/**
|
||||
* @param string|null $databaseName
|
||||
*/
|
||||
public function __construct(Traversable $iterator, $databaseName = null)
|
||||
public function __construct(Traversable $iterator, ?string $databaseName = null)
|
||||
{
|
||||
parent::__construct($iterator);
|
||||
|
||||
@ -52,10 +48,8 @@ class CollectionInfoCommandIterator extends IteratorIterator implements Collecti
|
||||
*
|
||||
* @see CollectionInfoIterator::current()
|
||||
* @see https://php.net/iterator.current
|
||||
* @return CollectionInfo
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function current()
|
||||
public function current(): CollectionInfo
|
||||
{
|
||||
$info = parent::current();
|
||||
|
||||
|
@ -17,8 +17,6 @@
|
||||
|
||||
namespace MongoDB\Model;
|
||||
|
||||
use ReturnTypeWillChange;
|
||||
|
||||
use function current;
|
||||
use function key;
|
||||
use function next;
|
||||
@ -39,9 +37,6 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
/** @var array */
|
||||
private $databases;
|
||||
|
||||
/**
|
||||
* @param array $databases
|
||||
*/
|
||||
public function __construct(array $databases)
|
||||
{
|
||||
$this->databases = $databases;
|
||||
@ -52,9 +47,8 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
*
|
||||
* @see DatabaseInfoIterator::current()
|
||||
* @see https://php.net/iterator.current
|
||||
* @return DatabaseInfo
|
||||
*/
|
||||
public function current()
|
||||
public function current(): DatabaseInfo
|
||||
{
|
||||
return new DatabaseInfo(current($this->databases));
|
||||
}
|
||||
@ -63,10 +57,8 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
* Return the key of the current element.
|
||||
*
|
||||
* @see https://php.net/iterator.key
|
||||
* @return integer
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function key()
|
||||
public function key(): int
|
||||
{
|
||||
return key($this->databases);
|
||||
}
|
||||
@ -75,10 +67,8 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
* Move forward to next element.
|
||||
*
|
||||
* @see https://php.net/iterator.next
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function next()
|
||||
public function next(): void
|
||||
{
|
||||
next($this->databases);
|
||||
}
|
||||
@ -87,10 +77,8 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
* Rewind the Iterator to the first element.
|
||||
*
|
||||
* @see https://php.net/iterator.rewind
|
||||
* @return void
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function rewind()
|
||||
public function rewind(): void
|
||||
{
|
||||
reset($this->databases);
|
||||
}
|
||||
@ -99,10 +87,8 @@ class DatabaseInfoLegacyIterator implements DatabaseInfoIterator
|
||||
* Checks if current position is valid.
|
||||
*
|
||||
* @see https://php.net/iterator.valid
|
||||
* @return boolean
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function valid()
|
||||
public function valid(): bool
|
||||
{
|
||||
return key($this->databases) !== null;
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
namespace MongoDB\Model;
|
||||
|
||||
use IteratorIterator;
|
||||
use ReturnTypeWillChange;
|
||||
use Traversable;
|
||||
|
||||
use function array_key_exists;
|
||||
@ -41,10 +40,7 @@ class IndexInfoIteratorIterator extends IteratorIterator implements IndexInfoIte
|
||||
/** @var string|null $ns */
|
||||
private $ns;
|
||||
|
||||
/**
|
||||
* @param string|null $ns
|
||||
*/
|
||||
public function __construct(Traversable $iterator, $ns = null)
|
||||
public function __construct(Traversable $iterator, ?string $ns = null)
|
||||
{
|
||||
parent::__construct($iterator);
|
||||
|
||||
@ -56,10 +52,8 @@ class IndexInfoIteratorIterator extends IteratorIterator implements IndexInfoIte
|
||||
*
|
||||
* @see IndexInfoIterator::current()
|
||||
* @see https://php.net/iterator.current
|
||||
* @return IndexInfo
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function current()
|
||||
public function current(): IndexInfo
|
||||
{
|
||||
$info = parent::current();
|
||||
|
||||
|
@ -76,10 +76,8 @@ class IndexInput implements Serializable
|
||||
|
||||
/**
|
||||
* Return the index name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->index['name'];
|
||||
}
|
||||
@ -89,9 +87,8 @@ class IndexInput implements Serializable
|
||||
*
|
||||
* @see \MongoDB\Collection::createIndexes()
|
||||
* @see https://php.net/mongodb-bson-serializable.bsonserialize
|
||||
* @return array
|
||||
*/
|
||||
public function bsonSerialize()
|
||||
public function bsonSerialize(): array
|
||||
{
|
||||
return $this->index;
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ use MongoDB\Exception\InvalidArgumentException;
|
||||
use MongoDB\Exception\UnexpectedValueException;
|
||||
use MongoDB\Exception\UnsupportedException;
|
||||
use stdClass;
|
||||
use Traversable;
|
||||
|
||||
use function current;
|
||||
use function is_array;
|
||||
@ -137,7 +136,7 @@ class Aggregate implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $pipeline, array $options = [])
|
||||
public function __construct(string $databaseName, ?string $collectionName, array $pipeline, array $options = [])
|
||||
{
|
||||
$expectedIndex = 0;
|
||||
|
||||
@ -246,8 +245,8 @@ class Aggregate implements Executable, Explainable
|
||||
unset($options['batchSize']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = isset($collectionName) ? (string) $collectionName : null;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->pipeline = $pipeline;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -256,8 +255,7 @@ class Aggregate implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return Traversable
|
||||
* @return ArrayIterator|Cursor
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if read concern or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -296,7 +294,7 @@ class Aggregate implements Executable, Explainable
|
||||
|
||||
$result = current($cursor->toArray());
|
||||
|
||||
if (! isset($result->result) || ! is_array($result->result)) {
|
||||
if (! is_object($result) || ! isset($result->result) || ! is_array($result->result)) {
|
||||
throw new UnexpectedValueException('aggregate command did not return a "result" array');
|
||||
}
|
||||
|
||||
@ -307,7 +305,6 @@ class Aggregate implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -317,10 +314,8 @@ class Aggregate implements Executable, Explainable
|
||||
|
||||
/**
|
||||
* Create the aggregate command document.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createCommandDocument()
|
||||
private function createCommandDocument(): array
|
||||
{
|
||||
$cmd = [
|
||||
'aggregate' => $this->collectionName ?? 1,
|
||||
|
@ -127,7 +127,7 @@ class BulkWrite implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $operations, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $operations, array $options = [])
|
||||
{
|
||||
if (empty($operations)) {
|
||||
throw new InvalidArgumentException('$operations is empty');
|
||||
@ -297,8 +297,8 @@ class BulkWrite implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->operations = $operations;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -307,7 +307,6 @@ class BulkWrite implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return BulkWriteResult
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -352,9 +351,8 @@ class BulkWrite implements Executable
|
||||
* Create options for constructing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-bulkwrite.construct.php
|
||||
* @return array
|
||||
*/
|
||||
private function createBulkWriteOptions()
|
||||
private function createBulkWriteOptions(): array
|
||||
{
|
||||
$options = ['ordered' => $this->options['ordered']];
|
||||
|
||||
@ -375,9 +373,8 @@ class BulkWrite implements Executable
|
||||
* Create options for executing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executebulkwrite.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
17
cache/stores/mongodb/MongoDB/Operation/Count.php
vendored
17
cache/stores/mongodb/MongoDB/Operation/Count.php
vendored
@ -90,7 +90,7 @@ class Count implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter = [], array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter = [], array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -132,8 +132,8 @@ class Count implements Executable, Explainable
|
||||
unset($options['readConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->filter = $filter;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -142,7 +142,6 @@ class Count implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return integer
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if read concern is used and unsupported
|
||||
@ -159,7 +158,7 @@ class Count implements Executable, Explainable
|
||||
$result = current($cursor->toArray());
|
||||
|
||||
// Older server versions may return a float
|
||||
if (! isset($result->n) || ! (is_integer($result->n) || is_float($result->n))) {
|
||||
if (! is_object($result) || ! isset($result->n) || ! (is_integer($result->n) || is_float($result->n))) {
|
||||
throw new UnexpectedValueException('count command did not return a numeric "n" value');
|
||||
}
|
||||
|
||||
@ -170,7 +169,6 @@ class Count implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -180,10 +178,8 @@ class Count implements Executable, Explainable
|
||||
|
||||
/**
|
||||
* Create the count command document.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createCommandDocument()
|
||||
private function createCommandDocument(): array
|
||||
{
|
||||
$cmd = ['count' => $this->collectionName];
|
||||
|
||||
@ -212,9 +208,8 @@ class Count implements Executable, Explainable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executereadcommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
namespace MongoDB\Operation;
|
||||
|
||||
use MongoDB\Driver\Cursor;
|
||||
use MongoDB\Driver\Exception\RuntimeException as DriverRuntimeException;
|
||||
use MongoDB\Driver\Server;
|
||||
use MongoDB\Exception\InvalidArgumentException;
|
||||
@ -24,6 +25,7 @@ use MongoDB\Exception\UnexpectedValueException;
|
||||
use MongoDB\Exception\UnsupportedException;
|
||||
|
||||
use function array_intersect_key;
|
||||
use function assert;
|
||||
use function count;
|
||||
use function current;
|
||||
use function is_array;
|
||||
@ -93,7 +95,7 @@ class CountDocuments implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -107,8 +109,8 @@ class CountDocuments implements Executable
|
||||
throw InvalidArgumentException::invalidType('"skip" option', $options['skip'], 'integer');
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->filter = $filter;
|
||||
|
||||
$this->aggregateOptions = array_intersect_key($options, ['collation' => 1, 'comment' => 1, 'hint' => 1, 'maxTimeMS' => 1, 'readConcern' => 1, 'readPreference' => 1, 'session' => 1]);
|
||||
@ -121,7 +123,6 @@ class CountDocuments implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return integer
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if collation or read concern is used and unsupported
|
||||
@ -130,6 +131,8 @@ class CountDocuments implements Executable
|
||||
public function execute(Server $server)
|
||||
{
|
||||
$cursor = $this->aggregate->execute($server);
|
||||
assert($cursor instanceof Cursor);
|
||||
|
||||
$allResults = $cursor->toArray();
|
||||
|
||||
/* If there are no documents to count, the aggregation pipeline has no items to group, and
|
||||
@ -139,17 +142,14 @@ class CountDocuments implements Executable
|
||||
}
|
||||
|
||||
$result = current($allResults);
|
||||
if (! isset($result->n) || ! (is_integer($result->n) || is_float($result->n))) {
|
||||
if (! is_object($result) || ! isset($result->n) || ! (is_integer($result->n) || is_float($result->n))) {
|
||||
throw new UnexpectedValueException('count command did not return a numeric "n" value');
|
||||
}
|
||||
|
||||
return (integer) $result->n;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Aggregate
|
||||
*/
|
||||
private function createAggregate()
|
||||
private function createAggregate(): Aggregate
|
||||
{
|
||||
$pipeline = [
|
||||
['$match' => (object) $this->filter],
|
||||
|
@ -142,7 +142,7 @@ class CreateCollection implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
if (isset($options['autoIndexId']) && ! is_bool($options['autoIndexId'])) {
|
||||
throw InvalidArgumentException::invalidType('"autoIndexId" option', $options['autoIndexId'], 'boolean');
|
||||
@ -256,8 +256,8 @@ class CreateCollection implements Executable
|
||||
}
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -265,7 +265,6 @@ class CreateCollection implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
@ -282,10 +281,8 @@ class CreateCollection implements Executable
|
||||
|
||||
/**
|
||||
* Create the create command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = ['create' => $this->collectionName];
|
||||
|
||||
@ -308,9 +305,8 @@ class CreateCollection implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -84,7 +84,7 @@ class CreateIndexes implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $indexes, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $indexes, array $options = [])
|
||||
{
|
||||
if (empty($indexes)) {
|
||||
throw new InvalidArgumentException('$indexes is empty');
|
||||
@ -126,8 +126,8 @@ class CreateIndexes implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -135,7 +135,6 @@ class CreateIndexes implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return string[] The names of the created indexes
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -158,9 +157,8 @@ class CreateIndexes implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -179,10 +177,9 @@ class CreateIndexes implements Executable
|
||||
* Create one or more indexes for the collection using the createIndexes
|
||||
* command.
|
||||
*
|
||||
* @param Server $server
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
private function executeCommand(Server $server)
|
||||
private function executeCommand(Server $server): void
|
||||
{
|
||||
$cmd = [
|
||||
'createIndexes' => $this->collectionName,
|
||||
|
@ -38,7 +38,7 @@ class DatabaseCommand implements Executable
|
||||
/** @var string */
|
||||
private $databaseName;
|
||||
|
||||
/** @var array|Command|object */
|
||||
/** @var Command */
|
||||
private $command;
|
||||
|
||||
/** @var array */
|
||||
@ -65,7 +65,7 @@ class DatabaseCommand implements Executable
|
||||
* @param array $options Options for command execution
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $command, array $options = [])
|
||||
public function __construct(string $databaseName, $command, array $options = [])
|
||||
{
|
||||
if (! is_array($command) && ! is_object($command)) {
|
||||
throw InvalidArgumentException::invalidType('$command', $command, 'array or object');
|
||||
@ -83,7 +83,7 @@ class DatabaseCommand implements Executable
|
||||
throw InvalidArgumentException::invalidType('"typeMap" option', $options['typeMap'], 'array');
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->command = $command instanceof Command ? $command : new Command($command);
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -92,7 +92,6 @@ class DatabaseCommand implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return Cursor
|
||||
*/
|
||||
public function execute(Server $server)
|
||||
@ -110,9 +109,8 @@ class DatabaseCommand implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -97,7 +97,7 @@ class Delete implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $limit, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, int $limit, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -131,8 +131,8 @@ class Delete implements Executable, Explainable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->filter = $filter;
|
||||
$this->limit = $limit;
|
||||
$this->options = $options;
|
||||
@ -142,7 +142,6 @@ class Delete implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return DeleteResult
|
||||
* @throws UnsupportedException if hint or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -175,7 +174,6 @@ class Delete implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -214,10 +212,8 @@ class Delete implements Executable, Explainable
|
||||
*
|
||||
* Note that these options are different from the bulk write options, which
|
||||
* are created in createExecuteOptions().
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createDeleteOptions()
|
||||
private function createDeleteOptions(): array
|
||||
{
|
||||
$deleteOptions = ['limit' => $this->limit];
|
||||
|
||||
@ -236,9 +232,8 @@ class Delete implements Executable, Explainable
|
||||
* Create options for executing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executebulkwrite.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -68,7 +68,7 @@ class DeleteMany implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
$this->delete = new Delete($databaseName, $collectionName, $filter, 0, $options);
|
||||
}
|
||||
@ -77,7 +77,6 @@ class DeleteMany implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return DeleteResult
|
||||
* @throws UnsupportedException if collation is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -91,7 +90,6 @@ class DeleteMany implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -68,7 +68,7 @@ class DeleteOne implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
$this->delete = new Delete($databaseName, $collectionName, $filter, 1, $options);
|
||||
}
|
||||
@ -77,7 +77,6 @@ class DeleteOne implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return DeleteResult
|
||||
* @throws UnsupportedException if collation is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -91,7 +90,6 @@ class DeleteOne implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -86,7 +86,7 @@ class Distinct implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $fieldName, $filter = [], array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, string $fieldName, $filter = [], array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -120,9 +120,9 @@ class Distinct implements Executable, Explainable
|
||||
unset($options['readConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->fieldName = (string) $fieldName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->fieldName = $fieldName;
|
||||
$this->filter = $filter;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -131,8 +131,7 @@ class Distinct implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return mixed[]
|
||||
* @return array
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if read concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -152,7 +151,7 @@ class Distinct implements Executable, Explainable
|
||||
|
||||
$result = current($cursor->toArray());
|
||||
|
||||
if (! isset($result->values) || ! is_array($result->values)) {
|
||||
if (! is_object($result) || ! isset($result->values) || ! is_array($result->values)) {
|
||||
throw new UnexpectedValueException('distinct command did not return a "values" array');
|
||||
}
|
||||
|
||||
@ -163,7 +162,6 @@ class Distinct implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -173,10 +171,8 @@ class Distinct implements Executable, Explainable
|
||||
|
||||
/**
|
||||
* Create the distinct command document.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createCommandDocument()
|
||||
private function createCommandDocument(): array
|
||||
{
|
||||
$cmd = [
|
||||
'distinct' => $this->collectionName,
|
||||
@ -204,9 +200,8 @@ class Distinct implements Executable, Explainable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executereadcommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -19,6 +19,7 @@ namespace MongoDB\Operation;
|
||||
|
||||
use MongoDB\Driver\Command;
|
||||
use MongoDB\Driver\Exception\CommandException;
|
||||
use MongoDB\Driver\Exception\RuntimeException as DriverRuntimeException;
|
||||
use MongoDB\Driver\Server;
|
||||
use MongoDB\Driver\Session;
|
||||
use MongoDB\Driver\WriteConcern;
|
||||
@ -71,7 +72,7 @@ class DropCollection implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
if (isset($options['session']) && ! $options['session'] instanceof Session) {
|
||||
throw InvalidArgumentException::invalidType('"session" option', $options['session'], Session::class);
|
||||
@ -89,8 +90,8 @@ class DropCollection implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -98,7 +99,6 @@ class DropCollection implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -132,10 +132,8 @@ class DropCollection implements Executable
|
||||
|
||||
/**
|
||||
* Create the drop command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = ['drop' => $this->collectionName];
|
||||
|
||||
@ -150,9 +148,8 @@ class DropCollection implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -63,7 +63,7 @@ class DropDatabase implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, array $options = [])
|
||||
public function __construct(string $databaseName, array $options = [])
|
||||
{
|
||||
if (isset($options['session']) && ! $options['session'] instanceof Session) {
|
||||
throw InvalidArgumentException::invalidType('"session" option', $options['session'], Session::class);
|
||||
@ -81,7 +81,7 @@ class DropDatabase implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -89,7 +89,6 @@ class DropDatabase implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
@ -106,10 +105,8 @@ class DropDatabase implements Executable
|
||||
|
||||
/**
|
||||
* Create the dropDatabase command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = ['dropDatabase' => 1];
|
||||
|
||||
@ -124,9 +121,8 @@ class DropDatabase implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -75,9 +75,9 @@ class DropIndexes implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $indexName, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, string $indexName, array $options = [])
|
||||
{
|
||||
$indexName = (string) $indexName;
|
||||
$indexName = $indexName;
|
||||
|
||||
if ($indexName === '') {
|
||||
throw new InvalidArgumentException('$indexName cannot be empty');
|
||||
@ -103,8 +103,8 @@ class DropIndexes implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->indexName = $indexName;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -113,7 +113,6 @@ class DropIndexes implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -136,10 +135,8 @@ class DropIndexes implements Executable
|
||||
|
||||
/**
|
||||
* Create the dropIndexes command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = [
|
||||
'dropIndexes' => $this->collectionName,
|
||||
@ -159,9 +156,8 @@ class DropIndexes implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -77,10 +77,10 @@ class EstimatedDocumentCount implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
|
||||
if (isset($options['maxTimeMS']) && ! is_integer($options['maxTimeMS'])) {
|
||||
throw InvalidArgumentException::invalidType('"maxTimeMS" option', $options['maxTimeMS'], 'integer');
|
||||
@ -105,7 +105,6 @@ class EstimatedDocumentCount implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return integer
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if collation or read concern is used and unsupported
|
||||
@ -120,7 +119,6 @@ class EstimatedDocumentCount implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -32,7 +32,6 @@ interface Executable
|
||||
/**
|
||||
* Execute the operation.
|
||||
*
|
||||
* @param Server $server
|
||||
* @return mixed
|
||||
*/
|
||||
public function execute(Server $server);
|
||||
|
@ -78,7 +78,7 @@ class Explain implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, Explainable $explainable, array $options = [])
|
||||
public function __construct(string $databaseName, Explainable $explainable, array $options = [])
|
||||
{
|
||||
if (isset($options['readPreference']) && ! $options['readPreference'] instanceof ReadPreference) {
|
||||
throw InvalidArgumentException::invalidType('"readPreference" option', $options['readPreference'], ReadPreference::class);
|
||||
@ -105,7 +105,6 @@ class Explain implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object
|
||||
* @throws UnsupportedException if the server does not support explaining the operation
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -127,11 +126,8 @@ class Explain implements Executable
|
||||
|
||||
/**
|
||||
* Create the explain command.
|
||||
*
|
||||
* @param Server $server
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand(Server $server)
|
||||
private function createCommand(Server $server): Command
|
||||
{
|
||||
$cmd = ['explain' => $this->explainable->getCommandDocument($server)];
|
||||
|
||||
@ -148,9 +144,8 @@ class Explain implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -30,7 +30,6 @@ interface Explainable extends Executable
|
||||
/**
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server);
|
||||
|
15
cache/stores/mongodb/MongoDB/Operation/Find.php
vendored
15
cache/stores/mongodb/MongoDB/Operation/Find.php
vendored
@ -160,7 +160,7 @@ class Find implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -292,8 +292,8 @@ class Find implements Executable, Explainable
|
||||
trigger_error('The "maxScan" option is deprecated and will be removed in a future release', E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->filter = $filter;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -302,7 +302,6 @@ class Find implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return Cursor
|
||||
* @throws UnsupportedException if read concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -327,7 +326,6 @@ class Find implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -380,9 +378,8 @@ class Find implements Executable, Explainable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executequery.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -402,10 +399,8 @@ class Find implements Executable, Explainable
|
||||
*
|
||||
* Note that these are separate from the options for executing the command,
|
||||
* which are created in createExecuteOptions().
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createQueryOptions()
|
||||
private function createQueryOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -129,7 +129,7 @@ class FindAndModify implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $options)
|
||||
public function __construct(string $databaseName, string $collectionName, array $options)
|
||||
{
|
||||
$options += ['remove' => false];
|
||||
|
||||
@ -209,8 +209,8 @@ class FindAndModify implements Executable, Explainable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -218,7 +218,6 @@ class FindAndModify implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object|null
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if hint or write concern is used and unsupported
|
||||
@ -254,14 +253,13 @@ class FindAndModify implements Executable, Explainable
|
||||
|
||||
$result = current($cursor->toArray());
|
||||
|
||||
return $result->value ?? null;
|
||||
return is_object($result) ? ($result->value ?? null) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -271,10 +269,8 @@ class FindAndModify implements Executable, Explainable
|
||||
|
||||
/**
|
||||
* Create the findAndModify command document.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createCommandDocument()
|
||||
private function createCommandDocument(): array
|
||||
{
|
||||
$cmd = ['findAndModify' => $this->collectionName];
|
||||
|
||||
@ -315,9 +311,8 @@ class FindAndModify implements Executable, Explainable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -103,7 +103,7 @@ class FindOne implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
$this->find = new Find(
|
||||
$databaseName,
|
||||
@ -117,7 +117,6 @@ class FindOne implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object|null
|
||||
* @throws UnsupportedException if collation or read concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -134,7 +133,6 @@ class FindOne implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -81,7 +81,7 @@ class FindOneAndDelete implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -108,7 +108,6 @@ class FindOneAndDelete implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object|null
|
||||
* @throws UnsupportedException if collation or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -122,7 +121,6 @@ class FindOneAndDelete implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -100,7 +100,7 @@ class FindOneAndReplace implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $replacement, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $replacement, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -151,7 +151,6 @@ class FindOneAndReplace implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object|null
|
||||
* @throws UnsupportedException if collation or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -165,7 +164,6 @@ class FindOneAndReplace implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -104,7 +104,7 @@ class FindOneAndUpdate implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $update, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $update, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -155,7 +155,6 @@ class FindOneAndUpdate implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object|null
|
||||
* @throws UnsupportedException if collation or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -169,7 +168,6 @@ class FindOneAndUpdate implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -79,7 +79,7 @@ class InsertMany implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $documents, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $documents, array $options = [])
|
||||
{
|
||||
if (empty($documents)) {
|
||||
throw new InvalidArgumentException('$documents is empty');
|
||||
@ -125,8 +125,8 @@ class InsertMany implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->documents = $documents;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -135,7 +135,6 @@ class InsertMany implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return InsertManyResult
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -163,9 +162,8 @@ class InsertMany implements Executable
|
||||
* Create options for constructing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-bulkwrite.construct.php
|
||||
* @return array
|
||||
*/
|
||||
private function createBulkWriteOptions()
|
||||
private function createBulkWriteOptions(): array
|
||||
{
|
||||
$options = ['ordered' => $this->options['ordered']];
|
||||
|
||||
@ -182,9 +180,8 @@ class InsertMany implements Executable
|
||||
* Create options for executing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executebulkwrite.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -73,7 +73,7 @@ class InsertOne implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $document, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $document, array $options = [])
|
||||
{
|
||||
if (! is_array($document) && ! is_object($document)) {
|
||||
throw InvalidArgumentException::invalidType('$document', $document, 'array or object');
|
||||
@ -99,8 +99,8 @@ class InsertOne implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->document = $document;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -109,7 +109,6 @@ class InsertOne implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return InsertOneResult
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -133,9 +132,8 @@ class InsertOne implements Executable
|
||||
* Create options for constructing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-bulkwrite.construct.php
|
||||
* @return array
|
||||
*/
|
||||
private function createBulkWriteOptions()
|
||||
private function createBulkWriteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -152,9 +150,8 @@ class InsertOne implements Executable
|
||||
* Create options for executing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executebulkwrite.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -61,7 +61,7 @@ class ListCollectionNames implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, array $options = [])
|
||||
public function __construct(string $databaseName, array $options = [])
|
||||
{
|
||||
$this->listCollections = new ListCollectionsCommand($databaseName, ['nameOnly' => true] + $options);
|
||||
}
|
||||
@ -70,7 +70,6 @@ class ListCollectionNames implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return Iterator
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
|
@ -64,9 +64,9 @@ class ListCollections implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, array $options = [])
|
||||
public function __construct(string $databaseName, array $options = [])
|
||||
{
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->listCollections = new ListCollectionsCommand($databaseName, ['nameOnly' => false] + $options);
|
||||
}
|
||||
|
||||
@ -74,7 +74,6 @@ class ListCollections implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return CollectionInfoIterator
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
|
@ -72,8 +72,6 @@ class ListDatabaseNames implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return Iterator
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
|
@ -70,7 +70,6 @@ class ListDatabases implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return DatabaseInfoIterator
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
|
@ -73,7 +73,7 @@ class ListIndexes implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $options = [])
|
||||
{
|
||||
if (isset($options['maxTimeMS']) && ! is_integer($options['maxTimeMS'])) {
|
||||
throw InvalidArgumentException::invalidType('"maxTimeMS" option', $options['maxTimeMS'], 'integer');
|
||||
@ -83,8 +83,8 @@ class ListIndexes implements Executable
|
||||
throw InvalidArgumentException::invalidType('"session" option', $options['session'], Session::class);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
@ -92,7 +92,6 @@ class ListIndexes implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return IndexInfoIterator
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
@ -108,9 +107,8 @@ class ListIndexes implements Executable
|
||||
* the command be executed on the primary.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -125,11 +123,9 @@ class ListIndexes implements Executable
|
||||
* Returns information for all indexes for this collection using the
|
||||
* listIndexes command.
|
||||
*
|
||||
* @param Server $server
|
||||
* @return IndexInfoIteratorIterator
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
private function executeCommand(Server $server)
|
||||
private function executeCommand(Server $server): IndexInfoIteratorIterator
|
||||
{
|
||||
$cmd = ['listIndexes' => $this->collectionName];
|
||||
|
||||
|
@ -32,6 +32,7 @@ use MongoDB\Exception\UnsupportedException;
|
||||
use MongoDB\MapReduceResult;
|
||||
use stdClass;
|
||||
|
||||
use function assert;
|
||||
use function current;
|
||||
use function is_array;
|
||||
use function is_bool;
|
||||
@ -158,7 +159,7 @@ class MapReduce implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, JavascriptInterface $map, JavascriptInterface $reduce, $out, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, JavascriptInterface $map, JavascriptInterface $reduce, $out, array $options = [])
|
||||
{
|
||||
if (! is_string($out) && ! is_array($out) && ! is_object($out)) {
|
||||
throw InvalidArgumentException::invalidType('$out', $out, 'string or array or object');
|
||||
@ -251,8 +252,8 @@ class MapReduce implements Executable
|
||||
|
||||
$this->checkOutDeprecations($out);
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->map = $map;
|
||||
$this->reduce = $reduce;
|
||||
$this->out = $out;
|
||||
@ -263,7 +264,6 @@ class MapReduce implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return MapReduceResult
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
* @throws UnsupportedException if read concern or write concern is used and unsupported
|
||||
@ -302,6 +302,7 @@ class MapReduce implements Executable
|
||||
}
|
||||
|
||||
$result = current($cursor->toArray());
|
||||
assert($result instanceof stdClass);
|
||||
|
||||
$getIterator = $this->createGetIteratorCallable($result, $server);
|
||||
|
||||
@ -310,9 +311,8 @@ class MapReduce implements Executable
|
||||
|
||||
/**
|
||||
* @param string|array|object $out
|
||||
* @return void
|
||||
*/
|
||||
private function checkOutDeprecations($out)
|
||||
private function checkOutDeprecations($out): void
|
||||
{
|
||||
if (is_string($out)) {
|
||||
return;
|
||||
@ -331,10 +331,8 @@ class MapReduce implements Executable
|
||||
|
||||
/**
|
||||
* Create the mapReduce command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = [
|
||||
'mapReduce' => $this->collectionName,
|
||||
@ -361,12 +359,9 @@ class MapReduce implements Executable
|
||||
/**
|
||||
* Creates a callable for MapReduceResult::getIterator().
|
||||
*
|
||||
* @param stdClass $result
|
||||
* @param Server $server
|
||||
* @return callable
|
||||
* @throws UnexpectedValueException if the command response was malformed
|
||||
*/
|
||||
private function createGetIteratorCallable(stdClass $result, Server $server)
|
||||
private function createGetIteratorCallable(stdClass $result, Server $server): callable
|
||||
{
|
||||
// Inline results can be wrapped with an ArrayIterator
|
||||
if (isset($result->results) && is_array($result->results)) {
|
||||
@ -397,10 +392,8 @@ class MapReduce implements Executable
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executereadcommand.php
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executereadwritecommand.php
|
||||
* @param boolean $hasOutputCollection
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions($hasOutputCollection)
|
||||
private function createOptions(bool $hasOutputCollection): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -70,7 +70,7 @@ class ModifyCollection implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, array $collectionOptions, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, array $collectionOptions, array $options = [])
|
||||
{
|
||||
if (empty($collectionOptions)) {
|
||||
throw new InvalidArgumentException('$collectionOptions is empty');
|
||||
@ -92,8 +92,8 @@ class ModifyCollection implements Executable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->collectionOptions = $collectionOptions;
|
||||
$this->options = $options;
|
||||
}
|
||||
@ -102,7 +102,6 @@ class ModifyCollection implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
*/
|
||||
@ -132,9 +131,8 @@ class ModifyCollection implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
namespace MongoDB\Operation;
|
||||
|
||||
use MongoDB\Driver\Command;
|
||||
use MongoDB\Driver\Exception\RuntimeException as DriverRuntimeException;
|
||||
use MongoDB\Driver\Server;
|
||||
use MongoDB\Driver\Session;
|
||||
use MongoDB\Driver\WriteConcern;
|
||||
@ -104,7 +105,6 @@ class RenameCollection implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return array|object Command result document
|
||||
* @throws UnsupportedException if write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -127,10 +127,8 @@ class RenameCollection implements Executable
|
||||
|
||||
/**
|
||||
* Create the renameCollection command.
|
||||
*
|
||||
* @return Command
|
||||
*/
|
||||
private function createCommand()
|
||||
private function createCommand(): Command
|
||||
{
|
||||
$cmd = [
|
||||
'renameCollection' => $this->fromNamespace,
|
||||
@ -150,9 +148,8 @@ class RenameCollection implements Executable
|
||||
* Create options for executing the command.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executewritecommand.php
|
||||
* @return array
|
||||
*/
|
||||
private function createOptions()
|
||||
private function createOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
|
@ -80,7 +80,7 @@ class ReplaceOne implements Executable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $replacement, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $replacement, array $options = [])
|
||||
{
|
||||
if (! is_array($replacement) && ! is_object($replacement)) {
|
||||
throw InvalidArgumentException::invalidType('$replacement', $replacement, 'array or object');
|
||||
@ -107,7 +107,6 @@ class ReplaceOne implements Executable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return UpdateResult
|
||||
* @throws UnsupportedException if collation is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
|
@ -112,7 +112,7 @@ class Update implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $update, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $update, array $options = [])
|
||||
{
|
||||
if (! is_array($filter) && ! is_object($filter)) {
|
||||
throw InvalidArgumentException::invalidType('$filter', $filter, 'array or object');
|
||||
@ -175,8 +175,8 @@ class Update implements Executable, Explainable
|
||||
unset($options['writeConcern']);
|
||||
}
|
||||
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = (string) $collectionName;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->filter = $filter;
|
||||
$this->update = $update;
|
||||
$this->options = $options;
|
||||
@ -186,7 +186,6 @@ class Update implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return UpdateResult
|
||||
* @throws UnsupportedException if hint or write concern is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -219,7 +218,6 @@ class Update implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
@ -241,9 +239,8 @@ class Update implements Executable, Explainable
|
||||
* Create options for constructing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-bulkwrite.construct.php
|
||||
* @return array
|
||||
*/
|
||||
private function createBulkWriteOptions()
|
||||
private function createBulkWriteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -264,9 +261,8 @@ class Update implements Executable, Explainable
|
||||
* Create options for executing the bulk write.
|
||||
*
|
||||
* @see https://php.net/manual/en/mongodb-driver-server.executebulkwrite.php
|
||||
* @return array
|
||||
*/
|
||||
private function createExecuteOptions()
|
||||
private function createExecuteOptions(): array
|
||||
{
|
||||
$options = [];
|
||||
|
||||
@ -286,10 +282,8 @@ class Update implements Executable, Explainable
|
||||
*
|
||||
* Note that these options are different from the bulk write options, which
|
||||
* are created in createExecuteOptions().
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function createUpdateOptions()
|
||||
private function createUpdateOptions(): array
|
||||
{
|
||||
$updateOptions = [
|
||||
'multi' => $this->options['multi'],
|
||||
|
@ -83,7 +83,7 @@ class UpdateMany implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $update, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $update, array $options = [])
|
||||
{
|
||||
if (! is_array($update) && ! is_object($update)) {
|
||||
throw InvalidArgumentException::invalidType('$update', $update, 'array or object');
|
||||
@ -106,7 +106,6 @@ class UpdateMany implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return UpdateResult
|
||||
* @throws UnsupportedException if collation is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -120,7 +119,6 @@ class UpdateMany implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
@ -83,7 +83,7 @@ class UpdateOne implements Executable, Explainable
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct($databaseName, $collectionName, $filter, $update, array $options = [])
|
||||
public function __construct(string $databaseName, string $collectionName, $filter, $update, array $options = [])
|
||||
{
|
||||
if (! is_array($update) && ! is_object($update)) {
|
||||
throw InvalidArgumentException::invalidType('$update', $update, 'array or object');
|
||||
@ -106,7 +106,6 @@ class UpdateOne implements Executable, Explainable
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return UpdateResult
|
||||
* @throws UnsupportedException if collation is used and unsupported
|
||||
* @throws DriverRuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -120,7 +119,6 @@ class UpdateOne implements Executable, Explainable
|
||||
* Returns the command document for this operation.
|
||||
*
|
||||
* @see Explainable::getCommandDocument()
|
||||
* @param Server $server
|
||||
* @return array
|
||||
*/
|
||||
public function getCommandDocument(Server $server)
|
||||
|
47
cache/stores/mongodb/MongoDB/Operation/Watch.php
vendored
47
cache/stores/mongodb/MongoDB/Operation/Watch.php
vendored
@ -36,6 +36,7 @@ use MongoDB\Model\ChangeStreamIterator;
|
||||
use function array_intersect_key;
|
||||
use function array_key_exists;
|
||||
use function array_unshift;
|
||||
use function assert;
|
||||
use function count;
|
||||
use function is_array;
|
||||
use function is_bool;
|
||||
@ -85,7 +86,7 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
/** @var string */
|
||||
private $databaseName;
|
||||
|
||||
/** @var integer|null */
|
||||
/** @var integer */
|
||||
private $firstBatchSize;
|
||||
|
||||
/** @var boolean */
|
||||
@ -201,7 +202,7 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
* @param array $options Command options
|
||||
* @throws InvalidArgumentException for parameter/option parsing errors
|
||||
*/
|
||||
public function __construct(Manager $manager, $databaseName, $collectionName, array $pipeline, array $options = [])
|
||||
public function __construct(Manager $manager, ?string $databaseName, ?string $collectionName, array $pipeline, array $options = [])
|
||||
{
|
||||
if (isset($collectionName) && ! isset($databaseName)) {
|
||||
throw new InvalidArgumentException('$collectionName should also be null if $databaseName is null');
|
||||
@ -263,31 +264,31 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
}
|
||||
|
||||
$this->manager = $manager;
|
||||
$this->databaseName = (string) $databaseName;
|
||||
$this->collectionName = isset($collectionName) ? (string) $collectionName : null;
|
||||
$this->databaseName = $databaseName;
|
||||
$this->collectionName = $collectionName;
|
||||
$this->pipeline = $pipeline;
|
||||
|
||||
$this->aggregate = $this->createAggregate();
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandFailed(CommandFailedEvent $event)
|
||||
final public function commandFailed(CommandFailedEvent $event): void
|
||||
{
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandStarted(CommandStartedEvent $event)
|
||||
final public function commandStarted(CommandStartedEvent $event): void
|
||||
{
|
||||
if ($event->getCommandName() !== 'aggregate') {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->firstBatchSize = null;
|
||||
$this->firstBatchSize = 0;
|
||||
$this->postBatchResumeToken = null;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
final public function commandSucceeded(CommandSucceededEvent $event)
|
||||
final public function commandSucceeded(CommandSucceededEvent $event): void
|
||||
{
|
||||
if ($event->getCommandName() !== 'aggregate') {
|
||||
return;
|
||||
@ -317,7 +318,6 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
* Execute the operation.
|
||||
*
|
||||
* @see Executable::execute()
|
||||
* @param Server $server
|
||||
* @return ChangeStream
|
||||
* @throws UnsupportedException if collation or read concern is used and unsupported
|
||||
* @throws RuntimeException for other driver errors (e.g. connection errors)
|
||||
@ -326,7 +326,7 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
{
|
||||
return new ChangeStream(
|
||||
$this->createChangeStreamIterator($server),
|
||||
function ($resumeToken, $hasAdvanced) {
|
||||
function ($resumeToken, $hasAdvanced): ChangeStreamIterator {
|
||||
return $this->resume($resumeToken, $hasAdvanced);
|
||||
}
|
||||
);
|
||||
@ -336,10 +336,8 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
* Create the aggregate command for a change stream.
|
||||
*
|
||||
* This method is also used to recreate the aggregate command when resuming.
|
||||
*
|
||||
* @return Aggregate
|
||||
*/
|
||||
private function createAggregate()
|
||||
private function createAggregate(): Aggregate
|
||||
{
|
||||
$pipeline = $this->pipeline;
|
||||
array_unshift($pipeline, ['$changeStream' => (object) $this->changeStreamOptions]);
|
||||
@ -349,11 +347,8 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
|
||||
/**
|
||||
* Create a ChangeStreamIterator by executing the aggregate command.
|
||||
*
|
||||
* @param Server $server
|
||||
* @return ChangeStreamIterator
|
||||
*/
|
||||
private function createChangeStreamIterator(Server $server)
|
||||
private function createChangeStreamIterator(Server $server): ChangeStreamIterator
|
||||
{
|
||||
return new ChangeStreamIterator(
|
||||
$this->executeAggregate($server),
|
||||
@ -368,16 +363,16 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
*
|
||||
* The command will be executed using APM so that we can capture data from
|
||||
* its response (e.g. firstBatch size, postBatchResumeToken).
|
||||
*
|
||||
* @param Server $server
|
||||
* @return Cursor
|
||||
*/
|
||||
private function executeAggregate(Server $server)
|
||||
private function executeAggregate(Server $server): Cursor
|
||||
{
|
||||
addSubscriber($this);
|
||||
|
||||
try {
|
||||
return $this->aggregate->execute($server);
|
||||
$cursor = $this->aggregate->execute($server);
|
||||
assert($cursor instanceof Cursor);
|
||||
|
||||
return $cursor;
|
||||
} finally {
|
||||
removeSubscriber($this);
|
||||
}
|
||||
@ -411,11 +406,9 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
*
|
||||
* @see https://github.com/mongodb/specifications/blob/master/source/change-streams/change-streams.rst#resume-process
|
||||
* @param array|object|null $resumeToken
|
||||
* @param bool $hasAdvanced
|
||||
* @return ChangeStreamIterator
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
private function resume($resumeToken = null, $hasAdvanced = false)
|
||||
private function resume($resumeToken = null, bool $hasAdvanced = false): ChangeStreamIterator
|
||||
{
|
||||
if (isset($resumeToken) && ! is_array($resumeToken) && ! is_object($resumeToken)) {
|
||||
throw InvalidArgumentException::invalidType('$resumeToken', $resumeToken, 'array or object');
|
||||
@ -453,10 +446,8 @@ class Watch implements Executable, /* @internal */ CommandSubscriber
|
||||
* Determine whether to capture operation time from an aggregate response.
|
||||
*
|
||||
* @see https://github.com/mongodb/specifications/blob/master/source/change-streams/change-streams.rst#startatoperationtime
|
||||
* @param Server $server
|
||||
* @return boolean
|
||||
*/
|
||||
private function shouldCaptureOperationTime(Server $server)
|
||||
private function shouldCaptureOperationTime(Server $server): bool
|
||||
{
|
||||
if ($this->hasResumed) {
|
||||
return false;
|
||||
|
@ -52,11 +52,10 @@ class WithTransaction
|
||||
* @see Client::startSession
|
||||
*
|
||||
* @param Session $session A session object as retrieved by Client::startSession
|
||||
* @return void
|
||||
* @throws RuntimeException for driver errors while committing the transaction
|
||||
* @throws Exception for any other errors, including those thrown in the callback
|
||||
*/
|
||||
public function execute(Session $session)
|
||||
public function execute(Session $session): void
|
||||
{
|
||||
$startTime = time();
|
||||
|
||||
@ -123,9 +122,8 @@ class WithTransaction
|
||||
* Returns whether the time limit for retrying transactions in the convenient transaction API has passed
|
||||
*
|
||||
* @param int $startTime The time the transaction was started
|
||||
* @return bool
|
||||
*/
|
||||
private function isTransactionTimeLimitExceeded($startTime)
|
||||
private function isTransactionTimeLimitExceeded(int $startTime): bool
|
||||
{
|
||||
return time() - $startTime >= 120;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ class UpdateResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see UpdateResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getMatchedCount()
|
||||
@ -82,7 +82,7 @@ class UpdateResult
|
||||
* This method should only be called if the write was acknowledged.
|
||||
*
|
||||
* @see UpdateResult::isAcknowledged()
|
||||
* @return integer
|
||||
* @return integer|null
|
||||
* @throws BadMethodCallException is the write result is unacknowledged
|
||||
*/
|
||||
public function getUpsertedCount()
|
||||
|
29
cache/stores/mongodb/MongoDB/functions.php
vendored
29
cache/stores/mongodb/MongoDB/functions.php
vendored
@ -32,6 +32,7 @@ use MongoDB\Operation\WithTransaction;
|
||||
use ReflectionClass;
|
||||
use ReflectionException;
|
||||
|
||||
use function assert;
|
||||
use function end;
|
||||
use function get_object_vars;
|
||||
use function in_array;
|
||||
@ -98,7 +99,6 @@ function apply_type_map_to_document($document, array $typeMap)
|
||||
* @internal
|
||||
* @param array|object $document Document containing fields mapped to values,
|
||||
* which denote order or an index type
|
||||
* @return string
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
function generate_index_name($document): string
|
||||
@ -178,7 +178,6 @@ function get_encrypted_fields_from_server(string $databaseName, string $collecti
|
||||
*
|
||||
* @internal
|
||||
* @param array|object $document Update or replacement document
|
||||
* @return boolean
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
function is_first_key_operator($document): bool
|
||||
@ -206,7 +205,6 @@ function is_first_key_operator($document): bool
|
||||
*
|
||||
* @internal
|
||||
* @param mixed $pipeline
|
||||
* @return boolean
|
||||
*/
|
||||
function is_pipeline($pipeline): bool
|
||||
{
|
||||
@ -234,7 +232,7 @@ function is_pipeline($pipeline): bool
|
||||
reset($stage);
|
||||
$key = key($stage);
|
||||
|
||||
if (! isset($key[0]) || $key[0] !== '$') {
|
||||
if (! is_string($key) || substr($key, 0, 1) !== '$') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -247,7 +245,6 @@ function is_pipeline($pipeline): bool
|
||||
*
|
||||
* @internal
|
||||
* @param array $options Command options
|
||||
* @return boolean
|
||||
*/
|
||||
function is_in_transaction(array $options): bool
|
||||
{
|
||||
@ -266,7 +263,6 @@ function is_in_transaction(array $options): bool
|
||||
*
|
||||
* @internal
|
||||
* @param array $pipeline List of pipeline operations
|
||||
* @return boolean
|
||||
*/
|
||||
function is_last_pipeline_operator_write(array $pipeline): bool
|
||||
{
|
||||
@ -289,7 +285,6 @@ function is_last_pipeline_operator_write(array $pipeline): bool
|
||||
* @internal
|
||||
* @see https://mongodb.com/docs/manual/reference/command/mapReduce/#output-inline
|
||||
* @param string|array|object $out Output specification
|
||||
* @return boolean
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
function is_mapreduce_output_inline($out): bool
|
||||
@ -323,8 +318,6 @@ function is_mapreduce_output_inline($out): bool
|
||||
*
|
||||
* @internal
|
||||
* @see https://mongodb.com/docs/manual/reference/write-concern/
|
||||
* @param WriteConcern $writeConcern
|
||||
* @return boolean
|
||||
*/
|
||||
function is_write_concern_acknowledged(WriteConcern $writeConcern): bool
|
||||
{
|
||||
@ -340,7 +333,6 @@ function is_write_concern_acknowledged(WriteConcern $writeConcern): bool
|
||||
* @internal
|
||||
* @param Server $server Server to check
|
||||
* @param integer $feature Feature constant (i.e. wire protocol version)
|
||||
* @return boolean
|
||||
*/
|
||||
function server_supports_feature(Server $server, int $feature): bool
|
||||
{
|
||||
@ -356,7 +348,6 @@ function server_supports_feature(Server $server, int $feature): bool
|
||||
*
|
||||
* @internal
|
||||
* @param mixed $input
|
||||
* @return boolean
|
||||
*/
|
||||
function is_string_array($input): bool
|
||||
{
|
||||
@ -417,7 +408,6 @@ function recursive_copy($element)
|
||||
* @internal
|
||||
* @param array $typeMap The existing typeMap
|
||||
* @param string $fieldPath The field path to apply the root type to
|
||||
* @return array
|
||||
*/
|
||||
function create_field_path_type_map(array $typeMap, string $fieldPath): array
|
||||
{
|
||||
@ -470,11 +460,10 @@ function create_field_path_type_map(array $typeMap, string $fieldPath): array
|
||||
* @param Session $session A session object as retrieved by Client::startSession
|
||||
* @param callable $callback A callback that will be invoked within the transaction
|
||||
* @param array $transactionOptions Additional options that are passed to Session::startTransaction
|
||||
* @return void
|
||||
* @throws RuntimeException for driver errors while committing the transaction
|
||||
* @throws Exception for any other errors, including those thrown in the callback
|
||||
*/
|
||||
function with_transaction(Session $session, callable $callback, array $transactionOptions = [])
|
||||
function with_transaction(Session $session, callable $callback, array $transactionOptions = []): void
|
||||
{
|
||||
$operation = new WithTransaction($callback, $transactionOptions);
|
||||
$operation->execute($session);
|
||||
@ -484,8 +473,6 @@ function with_transaction(Session $session, callable $callback, array $transacti
|
||||
* Returns the session option if it is set and valid.
|
||||
*
|
||||
* @internal
|
||||
* @param array $options
|
||||
* @return Session|null
|
||||
*/
|
||||
function extract_session_from_options(array $options): ?Session
|
||||
{
|
||||
@ -500,8 +487,6 @@ function extract_session_from_options(array $options): ?Session
|
||||
* Returns the readPreference option if it is set and valid.
|
||||
*
|
||||
* @internal
|
||||
* @param array $options
|
||||
* @return ReadPreference|null
|
||||
*/
|
||||
function extract_read_preference_from_options(array $options): ?ReadPreference
|
||||
{
|
||||
@ -517,13 +502,13 @@ function extract_read_preference_from_options(array $options): ?ReadPreference
|
||||
* (if given)
|
||||
*
|
||||
* @internal
|
||||
* @return Server
|
||||
*/
|
||||
function select_server(Manager $manager, array $options): Server
|
||||
{
|
||||
$session = extract_session_from_options($options);
|
||||
if ($session instanceof Session && $session->getServer() !== null) {
|
||||
return $session->getServer();
|
||||
$server = $session instanceof Session ? $session->getServer() : null;
|
||||
if ($server !== null) {
|
||||
return $server;
|
||||
}
|
||||
|
||||
$readPreference = extract_read_preference_from_options($options);
|
||||
@ -578,5 +563,7 @@ function select_server_for_aggregate_write_stage(Manager $manager, array &$optio
|
||||
throw $serverSelectionError;
|
||||
}
|
||||
|
||||
assert($server instanceof Server);
|
||||
|
||||
return $server;
|
||||
}
|
||||
|
5
cache/stores/mongodb/readme_moodle.txt
vendored
5
cache/stores/mongodb/readme_moodle.txt
vendored
@ -7,6 +7,7 @@ Import procedure:
|
||||
- Copy all the files and folders from the folder mongodb/src in the cache/stores/mongodb/MongoDB directory.
|
||||
- Copy the license file from the project root.
|
||||
- Update thirdpartylibs.xml with the latest version.
|
||||
- Check the minim php driver version in https://docs.mongodb.com/drivers/php#compatibility and change the value in the "are_requirements_met" method if necessary.
|
||||
- Check the minim php driver version in https://docs.mongodb.com/drivers/php#compatibility and change the
|
||||
value in the "are_requirements_met" method if necessary.
|
||||
|
||||
This version (1.13.1) requires PHP mongodb extension >= 1.14.0
|
||||
This version (1.15.0) requires PHP mongodb extension >= 1.14.0
|
||||
|
2
cache/stores/mongodb/thirdpartylibs.xml
vendored
2
cache/stores/mongodb/thirdpartylibs.xml
vendored
@ -4,7 +4,7 @@
|
||||
<location>MongoDB</location>
|
||||
<name>MongoDB PHP Library</name>
|
||||
<description>This library provides a high-level abstraction around the lower-level PHP driver, also known as the mongodb extension.</description>
|
||||
<version>1.13.1</version>
|
||||
<version>1.15.0</version>
|
||||
<license>Apache</license>
|
||||
<licenseversion>2.0</licenseversion>
|
||||
<repository>https://github.com/mongodb/mongo-php-driver</repository>
|
||||
|
4
cache/stores/mongodb/version.php
vendored
4
cache/stores/mongodb/version.php
vendored
@ -24,6 +24,6 @@
|
||||
|
||||
defined('MOODLE_INTERNAL') || die;
|
||||
|
||||
$plugin->version = 2022112800; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->version = 2022112801; // The current module version (Date: YYYYMMDDXX).
|
||||
$plugin->requires = 2022111800; // Requires this Moodle version.
|
||||
$plugin->component = 'cachestore_mongodb'; // Full name of the plugin.
|
||||
$plugin->component = 'cachestore_mongodb'; // Full name of the plugin.
|
||||
|
Loading…
x
Reference in New Issue
Block a user