Skip to content

Commit 116464f

Browse files
committed
Add slaveOkay flag for all queries for a document.
1 parent d44811b commit 116464f

File tree

9 files changed

+54
-3
lines changed

9 files changed

+54
-3
lines changed

lib/Doctrine/ODM/MongoDB/DocumentManager.php

+4
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ public function getDocumentCollection($className)
337337
$this->documentCollections[$className] = $db->selectCollection($collection);
338338
}
339339
}
340+
$collection = $this->documentCollections[$className];
341+
if (isset($metadata->slaveOkay)) {
342+
$collection->setSlaveOkay($metadata->slaveOkay);
343+
}
340344
return $this->documentCollections[$className];
341345
}
342346

lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ final class Document extends AbstractDocument
3232
public $repositoryClass;
3333
public $indexes = array();
3434
public $requireIndexes = false;
35+
public $slaveOkay;
3536
}
3637
/** @Annotation */
3738
final class EmbeddedDocument extends AbstractDocument

lib/Doctrine/ODM/MongoDB/Mapping/ClassMetadataInfo.php

+15
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,11 @@ class ClassMetadataInfo implements \Doctrine\Common\Persistence\Mapping\ClassMet
166166
*/
167167
public $distance;
168168

169+
/**
170+
* READ-ONLY: Whether or not reads for this class are okay to read from a slave.
171+
*/
172+
public $slaveOkay = false;
173+
169174
/**
170175
* READ-ONLY: The array of indexes for the document collection.
171176
*/
@@ -606,6 +611,16 @@ public function setDiscriminatorValue($value)
606611
$this->discriminatorValue = $value;
607612
}
608613

614+
/**
615+
* Sets whether or not reads for this class are okay to read from a slave.
616+
*
617+
* @param bool $slaveOkay
618+
*/
619+
public function setSlaveOkay($slaveOkay)
620+
{
621+
$this->slaveOkay = $slaveOkay;
622+
}
623+
609624
/**
610625
* Add a index for this Document.
611626
*

lib/Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver.php

+3
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ public function loadMetadataForClass($className, ClassMetadataInfo $class)
186186
if (isset($documentAnnot->requireIndexes)) {
187187
$class->setRequireIndexes($documentAnnot->requireIndexes);
188188
}
189+
if (isset($documentAnnot->slaveOkay)) {
190+
$class->setSlaveOkay($documentAnnot->slaveOkay);
191+
}
189192

190193
foreach ($reflClass->getProperties() as $property) {
191194
if ($class->isMappedSuperclass && !$property->isPrivate() || $class->isInheritedField($property->name)) {

lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ public function loadMetadataForClass($className, ClassMetadataInfo $class)
9292
$this->addIndex($class, $index);
9393
}
9494
}
95-
if (isset($xmlRoot->{'requireIndexes'})) {
96-
$class->setRequireIndexes((bool) $xmlRoot->{'requireIndexes'});
95+
if (isset($xmlRoot->{'require-indexes'})) {
96+
$class->setRequireIndexes((bool) $xmlRoot->{'require-indexes'});
97+
}
98+
if (isset($xmlRoot->{'slave-okay'})) {
99+
$class->setSlaveOkay((bool) $xmlRoot->{'slave-okay'});
97100
}
98101
if (isset($xmlRoot->field)) {
99102
foreach ($xmlRoot->field as $field) {

lib/Doctrine/ODM/MongoDB/Mapping/Driver/YamlDriver.php

+3
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ public function loadMetadataForClass($className, ClassMetadataInfo $class)
8989
if (isset($element['requireIndexes'])) {
9090
$class->setRequireIndexes($element['requireIndexes']);
9191
}
92+
if (isset($element['slaveOkay'])) {
93+
$class->setSlaveOkay($element['slaveOkay']);
94+
}
9295
if (isset($element['fields'])) {
9396
foreach ($element['fields'] as $fieldName => $mapping) {
9497
if (is_string($mapping)) {

lib/Doctrine/ODM/MongoDB/Query/Builder.php

+4
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,10 @@ public function getQuery(array $options = array())
236236
->getDocumentPersister($this->class->name)
237237
->prepareSort($query['sort']);
238238

239+
if ($this->class->slaveOkay) {
240+
$query['slaveOkay'] = $this->class->slaveOkay;
241+
}
242+
239243
return new Query(
240244
$this->dm,
241245
$this->class,

tests/Doctrine/ODM/MongoDB/Tests/Functional/SlaveOkayTest.php

+18
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Doctrine\ODM\MongoDB\Tests\Functional;
44

5+
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
56
use Doctrine\ODM\MongoDB\Query\Query;
67
use Documents\User;
78
use Documents\Group;
@@ -72,4 +73,21 @@ public function testSlaveOkayOnPersistentCollection()
7273
$groups->setHints(array(Query::HINT_SLAVE_OKAY => true));
7374
$this->assertEquals(array(Query::HINT_SLAVE_OKAY => true), $groups->getHints());
7475
}
76+
77+
public function testSlaveOkayDocument()
78+
{
79+
$users = $this->dm->getRepository(__NAMESPACE__.'\SlaveOkayDocument')
80+
->createQueryBuilder()
81+
->getQuery()
82+
->execute();
83+
84+
$this->assertEquals(array(Query::HINT_SLAVE_OKAY => true), $users->getHints());
85+
}
86+
}
87+
88+
/** @ODM\Document(slaveOkay=true) */
89+
class SlaveOkayDocument
90+
{
91+
/** @ODM\Id */
92+
public $id;
7593
}

0 commit comments

Comments
 (0)