/** * Get whether secondary read queries are allowed for this collection. * * This method wraps getSlaveOkay() for driver versions before 1.3.0. For * newer drivers, this method considers any read preference other than * PRIMARY as a true "slaveOkay" value. */ public function getSlaveOkay() { if (version_compare(phpversion('mongo'), '1.3.0', '<')) { return $this->getMongoCollection()->getSlaveOkay(); } $readPref = $this->getMongoCollection()->getReadPreference(); if (is_numeric($readPref['type'])) { $readPref['type'] = ReadPreference::convertNumericType($readPref['type']); } return \MongoClient::RP_PRIMARY !== $readPref['type']; }
/** * @dataProvider provideTagSetsAcceptedBySetReadPreference */ public function testConvertTagSetsShouldNotAlterTagSetsAcceptedBySetReadPreference($tagSet) { $this->assertEquals($tagSet, ReadPreference::convertTagSets($tagSet)); }
/** * Set whether secondary read queries are allowed for this cursor. * * This method wraps setSlaveOkay() for driver versions before 1.3.0. For * newer drivers, this method either wraps setReadPreference() method and * specifies SECONDARY_PREFERRED or does nothing, depending on whether * setReadPreference() exists. * * @param boolean $ok */ public function setMongoCursorSlaveOkay($ok) { if (version_compare(phpversion('mongo'), '1.3.0', '<')) { $this->mongoCursor->slaveOkay($ok); return; } /* MongoCursor::setReadPreference() may not exist until 1.4.0. Although * we could throw an exception here, it's more user-friendly to NOP. */ if (!method_exists($this->mongoCursor, 'setReadPreference')) { return; } if ($ok) { // Preserve existing tags for non-primary read preferences $readPref = $this->mongoCursor->getReadPreference(); $tags = !empty($readPref['tagsets']) ? ReadPreference::convertTagSets($readPref['tagsets']) : array(); $this->mongoCursor->setReadPreference(\MongoClient::RP_SECONDARY_PREFERRED, $tags); } else { $this->mongoCursor->setReadPreference(\MongoClient::RP_PRIMARY); } }
/** * Wrapper method for MongoCollection::getReadPreference(). * * For driver versions between 1.3.0 and 1.3.3, the return value will be * converted for consistency with {@link Collection::setReadPreference()}. * * @see http://php.net/manual/en/mongocollection.getreadpreference.php * @return array */ public function getReadPreference() { return ReadPreference::convertReadPreference($this->mongoCollection->getReadPreference()); }
/** * Wrapper method for MongoClient::getReadPreference(). * * For driver versions between 1.3.0 and 1.3.3, the return value will be * converted for consistency with {@link Connection::setReadPreference()}. * * @see http://php.net/manual/en/mongoclient.getreadpreference.php * @return array */ public function getReadPreference() { $this->initialize(); return ReadPreference::convertReadPreference($this->mongoClient->getReadPreference()); }