Commit ffb2a7df authored by Jeremy Mikola's avatar Jeremy Mikola

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.
parent 477f44d7
......@@ -75,8 +75,8 @@ class Client
public function selectCollection($databaseName, $collectionName, WriteConcern $writeConcern = null, ReadPreference $readPreference = null)
{
$namespace = $databaseName . '.' . $collectionName;
$writeConcern = $writeConcern ?: $this->manager->getWriteConcern();
$readPreference = $readPreference ?: $this->manager->getReadPreference();
$writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
$readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
return new Collection($this->manager, $namespace, $writeConcern, $readPreference);
}
......@@ -94,8 +94,8 @@ class Client
*/
public function selectDatabase($databaseName, WriteConcern $writeConcern = null, ReadPreference $readPreference = null)
{
$writeConcern = $writeConcern ?: $this->manager->getWriteConcern();
$readPreference = $readPreference ?: $this->manager->getReadPreference();
$writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
$readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
return new Database($this->manager, $databaseName, $writeConcern, $readPreference);
}
......
......@@ -66,8 +66,8 @@ class Collection
$this->collectionName = $parts[1];
$this->manager = $manager;
$this->writeConcern = $writeConcern;
$this->readPreference = $readPreference;
$this->writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
$this->readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
}
/**
......
......@@ -44,8 +44,8 @@ class Database
$this->manager = $manager;
$this->databaseName = (string) $databaseName;
$this->writeConcern = $writeConcern;
$this->readPreference = $readPreference;
$this->writeConcern = $writeConcern ?: \MongoDB\get_manager_write_concern($this->manager);
$this->readPreference = $readPreference ?: \MongoDB\get_manager_read_preference($this->manager);
}
/**
......
......@@ -2,8 +2,12 @@
namespace MongoDB;
use MongoDB\Driver\Manager;
use MongoDB\Driver\ReadPreference;
use MongoDB\Driver\Server;
use MongoDB\Driver\WriteConcern;
use MongoDB\Exception\InvalidArgumentTypeException;
use ReflectionClass;
/**
* Return whether the first key in the document starts with a "$" character.
......@@ -30,6 +34,69 @@ function is_first_key_operator($document)
return (isset($firstKey[0]) && $firstKey[0] == '$');
}
/**
* Returns a ReadPreference corresponding to the Manager's read preference.
*
* @internal
* @todo this function can be removed once PHPC-417 is implemented
* @param Manager $manager
* @return ReadPreference
*/
function get_manager_read_preference(Manager $manager)
{
$rp = $manager->getReadPreference();
if ($rp instanceof ReadPreference) {
return $rp;
}
$args = array(
$rp['mode'],
);
if (isset($rp['tags'])) {
$args[] = $rp['tags'];
}
$rc = new ReflectionClass('MongoDB\Driver\ReadPreference');
return $rc->newInstanceArgs($args);
}
/**
* Returns a WriteConcern corresponding to the Manager's write concern.
*
* @internal
* @todo this function can be removed once PHPC-417 is implemented
* @param Manager $manager
* @return WriteConcern
*/
function get_manager_write_concern(Manager $manager)
{
$wc = $manager->getWriteConcern();
if ($wc instanceof WriteConcern) {
return $wc;
}
$args = array(
isset($wc['w']) ? $wc['w'] : -2,
$wc['wtimeout'],
);
if (isset($wc['journal'])) {
$args[] = $wc['journal'];
if (isset($wc['fsync'])) {
$args[] = $wc['fsync'];
}
}
$rc = new ReflectionClass('MongoDB\Driver\WriteConcern');
return $rc->newInstanceArgs($args);
}
/**
* Generate an index name from a key specification.
*
......
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