Skip to content

Commit c65a981

Browse files
committed
PHPLIB-73: Database and Collection can inherit RP/WC from Manager
Helper functions are necessary until PHPC-417 is implemented and Manager getters return actual value objects.
1 parent 1c47ca0 commit c65a981

File tree

4 files changed

+75
-8
lines changed

4 files changed

+75
-8
lines changed

src/Client.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public function listDatabases(array $options = array())
7575
public function selectCollection($databaseName, $collectionName, WriteConcern $writeConcern = null, ReadPreference $readPreference = null)
7676
{
7777
$namespace = $databaseName . '.' . $collectionName;
78-
$writeConcern = $writeConcern ?: $this->manager->getWriteConcern();
79-
$readPreference = $readPreference ?: $this->manager->getReadPreference();
78+
$writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
79+
$readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
8080

8181
return new Collection($this->manager, $namespace, $writeConcern, $readPreference);
8282
}
@@ -94,8 +94,8 @@ public function selectCollection($databaseName, $collectionName, WriteConcern $w
9494
*/
9595
public function selectDatabase($databaseName, WriteConcern $writeConcern = null, ReadPreference $readPreference = null)
9696
{
97-
$writeConcern = $writeConcern ?: $this->manager->getWriteConcern();
98-
$readPreference = $readPreference ?: $this->manager->getReadPreference();
97+
$writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
98+
$readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
9999

100100
return new Database($this->manager, $databaseName, $writeConcern, $readPreference);
101101
}

src/Collection.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public function __construct(Manager $manager, $namespace, WriteConcern $writeCon
6666
$this->collectionName = $parts[1];
6767

6868
$this->manager = $manager;
69-
$this->writeConcern = $writeConcern;
70-
$this->readPreference = $readPreference;
69+
$this->writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
70+
$this->readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
7171
}
7272

7373
/**

src/Database.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public function __construct(Manager $manager, $databaseName, WriteConcern $write
4444

4545
$this->manager = $manager;
4646
$this->databaseName = (string) $databaseName;
47-
$this->writeConcern = $writeConcern;
48-
$this->readPreference = $readPreference;
47+
$this->writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
48+
$this->readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
4949
}
5050

5151
/**

src/functions.php

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
namespace MongoDB;
44

5+
use MongoDB\Driver\Manager;
6+
use MongoDB\Driver\ReadPreference;
57
use MongoDB\Driver\Server;
8+
use MongoDB\Driver\WriteConcern;
69
use MongoDB\Exception\InvalidArgumentTypeException;
10+
use ReflectionClass;
711

812
/**
913
* Return whether the first key in the document starts with a "$" character.
@@ -30,6 +34,69 @@ function is_first_key_operator($document)
3034
return (isset($firstKey[0]) && $firstKey[0] == '$');
3135
}
3236

37+
/**
38+
* Returns a ReadPreference corresponding to the Manager's read preference.
39+
*
40+
* @internal
41+
* @todo this function can be removed once PHPC-417 is implemented
42+
* @param Manager $manager
43+
* @return ReadPreference
44+
*/
45+
function get_manager_read_preference(Manager $manager)
46+
{
47+
$rp = $manager->getReadPreference();
48+
49+
if ($rp instanceof ReadPreference) {
50+
return $rp;
51+
}
52+
53+
$args = array(
54+
$rp['mode'],
55+
);
56+
57+
if (isset($rp['tags'])) {
58+
$args[] = $rp['tags'];
59+
}
60+
61+
$rc = new ReflectionClass('MongoDB\Driver\ReadPreference');
62+
63+
return $rc->newInstanceArgs($args);
64+
}
65+
66+
/**
67+
* Returns a WriteConcern corresponding to the Manager's write concern.
68+
*
69+
* @internal
70+
* @todo this function can be removed once PHPC-417 is implemented
71+
* @param Manager $manager
72+
* @return WriteConcern
73+
*/
74+
function get_manager_write_concern(Manager $manager)
75+
{
76+
$wc = $manager->getWriteConcern();
77+
78+
if ($wc instanceof WriteConcern) {
79+
return $wc;
80+
}
81+
82+
$args = array(
83+
isset($wc['w']) ? $wc['w'] : -2,
84+
$wc['wtimeout'],
85+
);
86+
87+
if (isset($wc['journal'])) {
88+
$args[] = $wc['journal'];
89+
90+
if (isset($wc['fsync'])) {
91+
$args[] = $wc['fsync'];
92+
}
93+
}
94+
95+
$rc = new ReflectionClass('MongoDB\Driver\WriteConcern');
96+
97+
return $rc->newInstanceArgs($args);
98+
}
99+
33100
/**
34101
* Generate an index name from a key specification.
35102
*

0 commit comments

Comments
 (0)