Jelajahi Sumber

Add new slaveOkay helper

Andreas Braun 10 tahun lalu
induk
melakukan
29165300fc

+ 25 - 0
lib/Alcaeus/MongoDbAdapter/Helper/ReadPreference.php

@@ -69,6 +69,14 @@ trait ReadPreference
     }
 
     /**
+     * @return bool
+     */
+    protected function getSlaveOkayFromReadPreference()
+    {
+        return $this->readPreference->getMode() != \MongoDB\Driver\ReadPreference::RP_PRIMARY;
+    }
+
+    /**
      * @param string $readPreference
      * @param array $tags
      * @return bool
@@ -123,4 +131,21 @@ trait ReadPreference
 
         return $this->setReadPreferenceFromParameters($readPreference, $tags);
     }
+
+    /**
+     * @param bool $ok
+     * @return bool
+     */
+    protected function setReadPreferenceFromSlaveOkay($ok = true)
+    {
+        $result = $this->getSlaveOkayFromReadPreference();
+        $readPreference = new \MongoDB\Driver\ReadPreference(
+            $ok ? \MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED : \MongoDB\Driver\ReadPreference::RP_PRIMARY,
+            $ok ? $this->readPreference->getTagSets() : []
+        );
+
+        $this->readPreference = $readPreference;
+
+        return $result;
+    }
 }

+ 52 - 0
lib/Alcaeus/MongoDbAdapter/Helper/SlaveOkay.php

@@ -0,0 +1,52 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+namespace Alcaeus\MongoDbAdapter\Helper;
+
+/**
+ * @internal
+ */
+trait SlaveOkay
+{
+    /**
+     * @return bool
+     */
+    abstract protected function getSlaveOkayFromReadPreference();
+
+    /**
+     * @param bool $ok
+     * @return bool
+     */
+    abstract protected function setReadPreferenceFromSlaveOkay($ok = true);
+
+    /**
+     * @link http://www.php.net/manual/en/mongocollection.getslaveokay.php
+     * @return bool
+     */
+    public function getSlaveOkay()
+    {
+        return $this->getSlaveOkayFromReadPreference();
+    }
+
+    /**
+     * @link http://www.php.net/manual/en/mongocollection.setslaveokay.php
+     * @param bool $ok
+     * @return bool
+     */
+    public function setSlaveOkay($ok = true)
+    {
+        return $this->setReadPreferenceFromSlaveOkay($ok);
+    }
+}