Commit e61ce5d9 authored by Jeremy Mikola's avatar Jeremy Mikola

PHPLIB-74: Use Client's default type map for Database and Collection

This ensures that the library's default type map (i.e. model classes) are used for manually constructed Database and Collection objects.
parent 573f1e75
......@@ -14,6 +14,12 @@ use MongoDB\Operation\ListDatabases;
class Client
{
private static $defaultTypeMap = [
'array' => 'MongoDB\Model\BSONArray',
'document' => 'MongoDB\Model\BSONDocument',
'root' => 'MongoDB\Model\BSONDocument',
];
private $manager;
private $uri;
private $typeMap;
......@@ -41,13 +47,7 @@ class Client
*/
public function __construct($uri = 'mongodb://localhost:27017', array $uriOptions = [], array $driverOptions = [])
{
$driverOptions += [
'typeMap' => [
'array' => 'MongoDB\Model\BSONArray',
'document' => 'MongoDB\Model\BSONDocument',
'root' => 'MongoDB\Model\BSONDocument',
],
];
$driverOptions += ['typeMap' => self::$defaultTypeMap];
if (isset($driverOptions['typeMap']) && ! is_array($driverOptions['typeMap'])) {
throw InvalidArgumentException::invalidType('"typeMap" driver option', $driverOptions['typeMap'], 'array');
......
......@@ -36,6 +36,11 @@ use Traversable;
class Collection
{
private static $defaultTypeMap = [
'array' => 'MongoDB\Model\BSONArray',
'document' => 'MongoDB\Model\BSONDocument',
'root' => 'MongoDB\Model\BSONDocument',
];
private static $wireVersionForFindAndModifyWriteConcern = 4;
private $collectionName;
......@@ -102,7 +107,7 @@ class Collection
$this->manager = $manager;
$this->readConcern = isset($options['readConcern']) ? $options['readConcern'] : $this->manager->getReadConcern();
$this->readPreference = isset($options['readPreference']) ? $options['readPreference'] : $this->manager->getReadPreference();
$this->typeMap = isset($options['typeMap']) ? $options['typeMap'] : null;
$this->typeMap = isset($options['typeMap']) ? $options['typeMap'] : self::$defaultTypeMap;
$this->writeConcern = isset($options['writeConcern']) ? $options['writeConcern'] : $this->manager->getWriteConcern();
}
......
......@@ -20,6 +20,12 @@ use MongoDB\Operation\ListCollections;
class Database
{
private static $defaultTypeMap = [
'array' => 'MongoDB\Model\BSONArray',
'document' => 'MongoDB\Model\BSONDocument',
'root' => 'MongoDB\Model\BSONDocument',
];
private $databaseName;
private $manager;
private $readConcern;
......@@ -80,7 +86,7 @@ class Database
$this->databaseName = (string) $databaseName;
$this->readConcern = isset($options['readConcern']) ? $options['readConcern'] : $this->manager->getReadConcern();
$this->readPreference = isset($options['readPreference']) ? $options['readPreference'] : $this->manager->getReadPreference();
$this->typeMap = isset($options['typeMap']) ? $options['typeMap'] : null;
$this->typeMap = isset($options['typeMap']) ? $options['typeMap'] : self::$defaultTypeMap;
$this->writeConcern = isset($options['writeConcern']) ? $options['writeConcern'] : $this->manager->getWriteConcern();
}
......
......@@ -115,9 +115,9 @@ class CollectionFunctionalTest extends FunctionalTestCase
'sort' => ['x' => -1],
];
$expected = (object) ['_id' => 3, 'x' => 33];
$expected = ['_id' => 3, 'x' => 33];
$this->assertEquals($expected, $this->collection->findOne($filter, $options));
$this->assertSameDocument($expected, $this->collection->findOne($filter, $options));
}
public function testWithOptionsInheritsReadPreferenceAndWriteConcern()
......
......@@ -32,9 +32,7 @@ abstract class FunctionalTestCase extends TestCase
protected function assertCommandSucceeded($document)
{
if (is_object($document)) {
$document = get_object_vars($document);
}
$document = is_object($document) ? (array) $document : $document;
$this->assertArrayHasKey('ok', $document);
$this->assertEquals(1, $document['ok']);
......@@ -43,8 +41,8 @@ abstract class FunctionalTestCase extends TestCase
protected function assertSameDocument($expectedDocument, $actualDocument)
{
$this->assertEquals(
($expectedDocument instanceof stdClass) ? (array) $expectedDocument : $expectedDocument,
($actualDocument instanceof stdClass) ? (array) $actualDocument : $actualDocument
is_object($expectedDocument) ? (array) $expectedDocument : $expectedDocument,
is_object($actualDocument) ? (array) $actualDocument : $actualDocument
);
}
......@@ -59,7 +57,7 @@ abstract class FunctionalTestCase extends TestCase
}
$normalizeRootDocuments = function($document) {
return ($document instanceof stdClass) ? (array) $document : $document;
return is_object($document) ? (array) $document : $document;
};
$this->assertEquals(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment