]> git.mxchange.org Git - core.git/blobdiff - framework/main/classes/database/result/class_CachedDatabaseResult.php
Continued:
[core.git] / framework / main / classes / database / result / class_CachedDatabaseResult.php
index ab2ea47a6106b046fa603c33ef4911e73753d7a4..2d869894a6d7e3c08ef855654dd13d7ff5bf2db0 100644 (file)
@@ -6,13 +6,13 @@ namespace Org\Mxchange\CoreFramework\Result\Database;
 use Org\Mxchange\CoreFramework\Criteria\Local\LocalSearchCriteria;
 use Org\Mxchange\CoreFramework\Criteria\Local\LocalUpdateCriteria;
 use Org\Mxchange\CoreFramework\Criteria\Storing\StoreableCriteria;
-use Org\Mxchange\CoreFramework\Database\Frontend\DatabaseWrapper;
+use Org\Mxchange\CoreFramework\Database\Frontend\DatabaseFrontend;
 use Org\Mxchange\CoreFramework\Database\Backend\BaseDatabaseBackend;
-use Org\Mxchange\CoreFramework\Request\Requestable;
 use Org\Mxchange\CoreFramework\Result\Search\SearchableResult;
 use Org\Mxchange\CoreFramework\Result\Update\UpdateableResult;
 
 // Import SPL stuff
+use \InvalidArgumentException;
 use \SeekableIterator;
 
 /**
@@ -20,7 +20,7 @@ use \SeekableIterator;
  *
  * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2020 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.shipsimu.org
  *
@@ -55,12 +55,12 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
        /**
         * Result array
         */
-       private $resultArray = array();
+       private $resultArray = [];
 
        /**
         * Array of out-dated entries
         */
-       private $outDated = array();
+       private $outDated = [];
 
        /**
         * Affected rows
@@ -87,8 +87,18 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         *
         * @param       $resultArray            The array holding the result from query
         * @return      $resultInstance         An instance of this class
+        * @throws      InvalidArgumentException        If a parameter is invalid
         */
        public static final function createCachedDatabaseResult (array $resultArray) {
+               // Misses an element?
+               if (count($resultArray) == 0) {
+                       // Cannot be empty
+                       throw new InvalidArgumentException('Array "resultArray" cannot be empty.');
+               } elseif (!array_key_exists(BaseDatabaseBackend::RESULT_INDEX_ROWS, $resultArray)) {
+                       // Yes, then abort here
+                       throw new InvalidArgumentException(sprintf('resultArray(%d)=%s has no element "%s".', count($resultArray), print_r($resultArray, TRUE), BaseDatabaseBackend::RESULT_INDEX_ROWS));
+               }
+
                // Get a new instance
                $resultInstance = new CachedDatabaseResult();
 
@@ -129,7 +139,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
 
                        // Mark it as out-dated
                        $this->outDated[$criteriaKey] = 1;
-               } // END - foreach
+               }
        }
 
        /**
@@ -148,7 +158,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                        $this->currentPos++;
                        $this->currentRow = $this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][$this->currentPos];
                        $nextValid = true;
-               } // END - if
+               }
 
                // Return the result
                return $nextValid;
@@ -168,7 +178,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                while (($this->currentPos < $index) && ($this->valid())) {
                        // Continue on
                        $this->next();
-               } // END - while
+               }
        }
 
        /**
@@ -184,7 +194,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                if (isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][$this->currentPos])) {
                        // Then get it
                        $current = $this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][$this->currentPos];
-               } // END - if
+               }
 
                // Return the result
                return $current;
@@ -196,17 +206,9 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * @return      $isValid Whether the next/rewind entry is valid
         */
        public function valid () {
-               // By default nothing is valid
-               $isValid = false;
-
-               // Debug message
-               //*NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] this->currentPos=' . $this->currentPos);
-
                // Check if all is fine ...
-               if (($this->ifStatusIsOkay()) && (isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][($this->currentPos + 1)])) && (isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][0]))) {
-                       // All fine!
-                       $isValid = true;
-               } // END - if
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-DATABASE-RESULT: this->currentPos=' . $this->currentPos);
+               $isValid = ($this->ifStatusIsOkay() && isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][$this->currentPos]) && isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_ROWS][0]));
 
                // Return the result
                return $isValid;
@@ -228,8 +230,8 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * @return      $ifStatusOkay   Whether the status of the query was okay
         */
        public function ifStatusIsOkay () {
-               $ifStatusOkay = ((isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_STATUS])) && ($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_STATUS] === BaseDatabaseBackend::RESULT_OKAY));
-               //*NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . '] ifStatusOkay=' . intval($ifStatusOkay));
+               $ifStatusOkay = (isset($this->resultArray[BaseDatabaseBackend::RESULT_INDEX_STATUS]) && $this->resultArray[BaseDatabaseBackend::RESULT_INDEX_STATUS] === BaseDatabaseBackend::RESULT_OKAY);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-DATABASE-RESULT: ifStatusOkay=' . intval($ifStatusOkay));
                return $ifStatusOkay;
        }
 
@@ -248,8 +250,8 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * @return      void
         */
        public function rewind () {
-               $this->currentPos = -1;
-               $this->currentRow = array();
+               $this->currentPos = 0;
+               $this->currentRow = [];
        }
 
        /**
@@ -267,19 +269,19 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * Adds an update request to the database result for writing it to the
         * database layer
         *
-        * @param       $criteriaInstance       An instance of a updateable criteria
+        * @param       $updateInstance An instance of a updateable criteria
         * @return      void
         * @throws      ResultUpdateException   If no result was updated
         */
-       public function add2UpdateQueue (LocalUpdateCriteria $criteriaInstance) {
+       public function add2UpdateQueue (LocalUpdateCriteria $updateInstance) {
                // Rewind the pointer
                $this->rewind();
 
                // Get search criteria
-               $searchInstance = $criteriaInstance->getSearchInstance();
+               $searchInstance = $updateInstance->getSearchInstance();
 
                // And start looking for the result
-               $foundEntries = 0;
+               $foundEntries = $this->getAffectedRows();
                while (($this->valid()) && ($foundEntries < $searchInstance->getLimit())) {
                        // Get next entry
                        $this->next();
@@ -288,24 +290,24 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                        // Is this entry found?
                        if ($searchInstance->ifEntryMatches($currentEntry)) {
                                // Update this entry
-                               $this->updateCurrentEntryByCriteria($criteriaInstance);
+                               $this->updateCurrentEntryByCriteria($updateInstance);
 
                                // Count one up
                                $foundEntries++;
-                       } // END - if
-               } // END - while
+                       }
+               }
 
                // If no entry is found/updated throw an exception
                if ($foundEntries == 0) {
                        // Throw an exception here
                        throw new ResultUpdateException($this, self::EXCEPTION_RESULT_UPDATE_FAILED);
-               } // END - if
+               }
 
                // Set affected rows
                $this->setAffectedRows($foundEntries);
 
                // Set update instance
-               $this->setUpdateInstance($criteriaInstance);
+               $this->setUpdateInstance($updateInstance);
        }
 
        /**
@@ -314,7 +316,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * @param       $rows   Number of affected rows
         * @return      void
         */
-       public final function setAffectedRows ($rows) {
+       public final function setAffectedRows (int $rows) {
                $this->affectedRows = $rows;
        }
 
@@ -350,10 +352,9 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * Adds registration elements to a given dataset instance
         *
         * @param       $criteriaInstance       An instance of a StoreableCriteria class
-        * @param       $requestInstance        An instance of a Requestable class
         * @return      void
         */
-       public function addElementsToDataSet (StoreableCriteria $criteriaInstance, Requestable $requestInstance = NULL) {
+       public function addElementsToDataSet (StoreableCriteria $criteriaInstance) {
                // Walk only through out-dated columns
                foreach ($this->outDated as $key => $dummy) {
                        // Does this key exist?
@@ -361,8 +362,8 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                        if ($this->find($key)) {
                                // Then update it
                                $criteriaInstance->addCriteria($key, $this->getFoundValue());
-                       } // END - if
-               } // END - foreach
+                       }
+               }
        }
 
        /**
@@ -396,8 +397,8 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
 
                                // And stop searching
                                break;
-                       } // END - if
-               } // END - while
+                       }
+               }
 
                // Return the result
                return $found;
@@ -407,13 +408,13 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
         * Solver for result index value with call-back method
         *
         * @param       $databaseColumn         Database column where the index might be found
-        * @param       $wrapperInstance        The wrapper instance to ask for array element
+        * @param       $frontendInstance       The frontend instance to ask for array element
         * @para        $callBack                       Call-back object for setting the index;
         *                                                              0=object instance,1=method name
         * @return      void
         * @todo        Find a caching way without modifying the result array
         */
-       public function solveResultIndex ($databaseColumn, DatabaseWrapper $wrapperInstance, array $callBack) {
+       public function solveResultIndex ($databaseColumn, DatabaseFrontend $frontendInstance, array $callBack) {
                // By default nothing is found
                $indexValue = 0;
 
@@ -421,7 +422,7 @@ class CachedDatabaseResult extends BaseDatabaseResult implements SearchableResul
                if ($this->find($databaseColumn)) {
                        // Use this value
                        $indexValue = $this->getFoundValue();
-               } elseif ($this->find($wrapperInstance->getIndexKey())) {
+               } elseif ($this->find($frontendInstance->getIndexKey())) {
                        // Use this value
                        $indexValue = $this->getFoundValue();
                }