]> git.mxchange.org Git - core.git/blobdiff - inc/classes/main/database/class_BaseDatabaseWrapper.php
Added type-hint 'array' for $onlyKeys because this should only be an array.
[core.git] / inc / classes / main / database / class_BaseDatabaseWrapper.php
index 76d486e2df65d4f7a3e8cf57b1f30eeff024b73c..1ca253c8fcff68d9c7a4719ccebe41d4540c59cb 100644 (file)
@@ -55,25 +55,101 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem {
                $this->cacheInstance = CacheFactory::getFactory()->createConfiguredCache();
        }
 
+       /**
+        * Setter for table name
+        *
+        * @param       $tableName      Name of table name to set
+        * @return      void
+        */
+       protected final function setTableName ($tableName) {
+               $this->tableName = (string) $tableName;
+       }
+
+       /**
+        * Getter for table name
+        *
+        * @return      $tableName      Name of table name to set
+        */
+       protected final function getTableName () {
+               return $this->tableName;
+       }
+
+       /**
+        * 'Inserts' a data set instance into a local file database folder
+        *
+        * @param       $dataSetInstance        A storeable data set
+        * @param       $onlyKeys                       Only use these keys for a cache key
+        * @return      void
+        */
+       protected function queryInsertDataSet (StoreableCriteria $dataSetInstance, array $onlyKeys = array()) {
+               // First get a key suitable for our cache and extend it with this class name
+               $cacheKey = $this->getCacheKeyByCriteria($dataSetInstance, $onlyKeys);
+               //* DEBUG: */ $this->debugOutput('BASE-WRAPPER: Using cache key ' . $cacheKey . ' for purging ...');
+
+               // Does this key exists in cache?
+               if ($this->cacheInstance->offsetExists($cacheKey)) {
+                       // Purge the cache
+                       $this->cacheInstance->purgeOffset($cacheKey);
+               } // END - if
+
+               // Handle it over to the middleware
+               $this->getDatabaseInstance()->queryInsertDataSet($dataSetInstance);
+       }
+
+       /**
+        * 'Updates' a data set instance with a database layer
+        *
+        * @param       $dataSetInstance        A storeable data set
+        * @param       $onlyKeys                       Only use these keys for a cache key
+        * @return      void
+        */
+       protected function queryUpdateDataSet (StoreableCriteria $dataSetInstance, array $onlyKeys = array()) {
+               // First get a key suitable for our cache and extend it with this class name
+               $cacheKey = $this->getCacheKeyByCriteria($dataSetInstance, $onlyKeys);
+               //* DEBUG: */ $this->debugOutput('BASE-WRAPPER: Using cache key ' . $cacheKey . ' for purging ...');
+
+               // Does this key exists in cache?
+               if ($this->cacheInstance->offsetExists($cacheKey)) {
+                       // Purge the cache
+                       $this->cacheInstance->purgeOffset($cacheKey);
+               } // END - if
+
+               // Handle it over to the middleware
+               $this->getDatabaseInstance()->queryUpdateDataSet($dataSetInstance);
+       }
+
+       /**
+        * Getter for index key
+        *
+        * @return      $indexKey       Index key
+        */
+       public final function getIndexKey () {
+               return $this->getDatabaseInstance()->getIndexKey();
+       }
+
        /**
         * Do a "select" query on the current table with the given search criteria and
         * store it in cache for later usage
         *
         * @param       $criteriaInstance       An instance of a Criteria class
+        * @param       $onlyKeys                       Only use these keys for a cache key
         * @return      $resultInstance         An instance of a database result class
         */
-       public function doSelectByCriteria (Criteria $criteriaInstance) {
+       public function doSelectByCriteria (Criteria $criteriaInstance, array $onlyKeys = array()) {
                // First get a key suitable for our cache and extend it with this class name
-               $cacheKey = sprintf("%s@%s",
-                       $this->__toString(),
-                       $criteriaInstance->getCacheKey()
-               );
+               $cacheKey = $this->getCacheKeyByCriteria($criteriaInstance, $onlyKeys);
 
                // Does this key exists in cache?
                if ($this->cacheInstance->offsetExists($cacheKey)) {
+                       // Debug message
+                       //* DEBUG: */ $this->debugOutput('BASE-WRAPPER: Cache used for cacheKey=' . $cacheKey);
+
                        // Then use this result
                        $result = $this->cacheInstance->offsetGet($cacheKey);
                } else {
+                       // Debug message
+                       //* DEBUG: */ $this->debugOutput('BASE-WRAPPER: Quering database, cacheKey=' . $cacheKey);
+
                        // Now it's time to ask the database layer for this select statement
                        $result = $this->getDatabaseInstance()->doSelectByTableCriteria($this->getTableName(), $criteriaInstance);
 
@@ -84,8 +160,8 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem {
                        } else {
                                // This invalid result must be wrapped
                                $result = array(
-                                       'status'                => 'invalid',
-                                       'exception'             => $this->getDatabaseInstance()->getLastException()
+                                       BaseDatabaseFrontend::RESULT_INDEX_STATUS    => 'invalid',
+                                       BaseDatabaseFrontend::RESULT_INDEX_EXCEPTION => $this->getDatabaseInstance()->getLastException()
                                );
                        }
                }
@@ -101,44 +177,29 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem {
         * Count the numbers of rows we shall receive
         *
         * @param       $criteriaInstance       An instance of a Criteria class
+        * @param       $onlyKeys                       Only use these keys for a cache key
         * @return      $numRows                        Numbers of rows of database entries
         */
-       public function doSelectCountByCriteria (Criteria $criteriaInstance) {
+       public function doSelectCountByCriteria (Criteria $criteriaInstance, $onlyKeys =  array()) {
                // Total numbers is -1 so we can distinglish between failed and valid queries
                $numRows = 0;
 
                // Get the result from above method
-               $resultInstance = $this->doSelectByCriteria($criteriaInstance);
+               $resultInstance = $this->doSelectByCriteria($criteriaInstance, $onlyKeys);
 
                // Was that query fine?
                if ($resultInstance->ifStatusIsOkay()) {
                        // Then get the number of rows
                        $numRows = $resultInstance->getAffectedRows();
+
+                       // Debug message
+                       //* DEBUG: */ $this->debugOutput('BASE-WRAPPER: numRows=' . $numRows);
                } // END - if
 
                // Return the result
                return $numRows;
        }
 
-       /**
-        * Setter for table name
-        *
-        * @param       $tableName      Name of table name to set
-        * @return      void
-        */
-       protected final function setTableName ($tableName) {
-               $this->tableName = (string) $tableName;
-       }
-
-       /**
-        * Getter for table name
-        *
-        * @return      $tableName      Name of table name to set
-        */
-       protected final function getTableName () {
-               return $this->tableName;
-       }
-
        /**
         * Getter for primary key used in wrapped table
         *