Skip to content

Commit a31ca33

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 a31ca33

File tree

4 files changed

+67
-8
lines changed

4 files changed

+67
-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\copy_manager_write_concern($this->manager);
79+
$readPreference = $readPreference ?: \MongoDB\copy_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\copy_manager_write_concern($this->manager);
98+
$readPreference = $readPreference ?: \MongoDB\copy_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\copy_manager_write_concern($this->manager);
70+
$this->readPreference = $readPreference ?: \MongoDB\copy_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\copy_manager_write_concern($this->manager);
48+
$this->readPreference = $readPreference ?: \MongoDB\copy_manager_read_preference($this->manager);
4949
}
5050

5151
/**

src/functions.php

Lines changed: 59 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,61 @@ function is_first_key_operator($document)
3034
return (isset($firstKey[0]) && $firstKey[0] == '$');
3135
}
3236

37+
/**
38+
* Creates a new ReadPreference instance from 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 copy_manager_read_preference(Manager $manager)
46+
{
47+
$rp = $manager->getReadPreference();
48+
49+
$args = array(
50+
$rp['mode'],
51+
);
52+
53+
if (isset($rp['tags'])) {
54+
$args[] = $rp['tags'];
55+
}
56+
57+
$rc = new ReflectionClass('MongoDB\Driver\ReadPreference');
58+
59+
return $rc->newInstanceArgs($args);
60+
}
61+
62+
/**
63+
* Creates a new WriteConcern instance from the Manager's write concern.
64+
*
65+
* @internal
66+
* @todo this function can be removed once PHPC-417 is implemented
67+
* @param Manager $manager
68+
* @return WriteConcern
69+
*/
70+
function copy_manager_write_concern(Manager $manager)
71+
{
72+
$wc = $manager->getWriteConcern();
73+
74+
$args = array(
75+
isset($wc['w']) ? $wc['w'] : -2,
76+
$wc['wtimeout'],
77+
);
78+
79+
if (isset($wc['journal'])) {
80+
$args[] = $wc['journal'];
81+
82+
if (isset($wc['fsync'])) {
83+
$args[] = $wc['fsync'];
84+
}
85+
}
86+
87+
$rc = new ReflectionClass('MongoDB\Driver\WriteConcern');
88+
89+
return $rc->newInstanceArgs($args);
90+
}
91+
3392
/**
3493
* Generate an index name from a key specification.
3594
*

0 commit comments

Comments
 (0)