From: Roland Haeder Date: Sat, 18 Apr 2015 00:40:33 +0000 (+0200) Subject: Added some new stuff. X-Git-Url: https://git.mxchange.org/?p=core.git;a=commitdiff_plain;h=70a00fd84fd8d07e075a3479d3475e1a8f36a772 Added some new stuff. Signed-off-by: Roland Häder --- diff --git a/inc/classes/interfaces/database/backend/class_DatabaseBackend.php b/inc/classes/interfaces/database/backend/class_DatabaseBackend.php index 835815e0..e040e8cb 100644 --- a/inc/classes/interfaces/database/backend/class_DatabaseBackend.php +++ b/inc/classes/interfaces/database/backend/class_DatabaseBackend.php @@ -27,9 +27,38 @@ */ interface DatabaseBackend extends FrameworkDatabase { /** - * Makes sure that the database connection is up and alive + * Getter for last read file + * + * @return $lastFile The last read file's name with full path + */ + function getLastFile (); + + /** + * Getter for last read file's content as an array + * + * @return $lastContent The array with elements 'header' and 'data'. + */ + function getLastContents (); + + /** + * Getter for file extension + * + * @return $fileExtension The array with elements 'header' and 'data'. + */ + function getFileExtension (); + + /** + * Getter for index key + * + * @return $indexKey Index key + */ + function getIndexKey (); + + /** + * Makes sure that the database connection is alive * * @return void + * @todo Do some checks on the database directory and files here */ function connectToDatabase (); @@ -37,16 +66,16 @@ interface DatabaseBackend extends FrameworkDatabase { * Starts a SELECT query on the database by given return type, table name * and search criteria * - * @param $tableName Name of the database table - * @param $criteria Search criteria class - * @return $resultData Result data of the query + * @param $tableName Name of the database table + * @param $searchInstance Local search criteria class + * @return $resultData Result data of the query * @throws UnsupportedCriteriaException If the criteria is unsupported - * @throws SqlException If an SQL error occurs + * @throws SqlException If an 'SQL error' occurs */ - function querySelect ($tableName, LocalSearchCriteria $criteriaInstance); + function querySelect ($tableName, LocalSearchCriteria $searchInstance); /** - * 'Inserts' a data set instance into a local file database folder + * "Inserts" a data set instance into a local file database folder * * @param $dataSetInstance A storeable data set * @return void @@ -55,7 +84,7 @@ interface DatabaseBackend extends FrameworkDatabase { function queryInsertDataSet (StoreableCriteria $dataSetInstance); /** - * 'Updates' a data set instance with a database layer + * "Updates" a data set instance with a database layer * * @param $dataSetInstance A storeable data set * @return void @@ -64,12 +93,30 @@ interface DatabaseBackend extends FrameworkDatabase { function queryUpdateDataSet (StoreableCriteria $dataSetInstance); /** - * Removes non-public data from given array. + * Getter for primary key of specified table or if not found null will be + * returned. This must be database-specific. + * + * @param $tableName Name of the table we need the primary key from + * @return $primaryKey Primary key column of the given table + */ + function getPrimaryKeyOfTable ($tableName); + + /** + * Removes non-data from given array. * - * @param $data An array with possible non-public data that needs to be removed. - * @return $data A cleaned up array with only public data. + * @param $data An array with possible non-data that needs to be removed. + * @return $data A cleaned up array with only data. + * @todo Add more generic non-data for removal */ function removeNonPublicDataFromArray (array $data); + + /** + * Counts total rows of given table + * + * @param $tableName Table name + * @return $count Total rows of given table + */ + function countTotalRows($tableName); } // [EOF] diff --git a/inc/classes/interfaces/database/class_DatabaseWrapper.php b/inc/classes/interfaces/database/class_DatabaseWrapper.php index ce2941c4..03962256 100644 --- a/inc/classes/interfaces/database/class_DatabaseWrapper.php +++ b/inc/classes/interfaces/database/class_DatabaseWrapper.php @@ -61,6 +61,13 @@ interface DatabaseWrapper extends FrameworkInterface { * @return $primaryKey Primary key used in wrapped table */ function getPrimaryKeyValue(); + + /** + * Counts total rows of this table + * + * @return $count Total rows of this table + */ + function countTotalRows(); } // [EOF] diff --git a/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php b/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php index 0763d68e..86acb923 100644 --- a/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php +++ b/inc/classes/interfaces/database/middleware/class_DatabaseConnector.php @@ -109,6 +109,14 @@ interface DatabaseConnector extends FrameworkDatabase { * @return $data A cleaned up array with only public data. */ function removeNonPublicDataFromArray (array $data); + + /** + * Counts total rows of given table + * + * @param $tableName Table name + * @return $count Total rows of given table + */ + function countTotalRows($tableName); } // [EOF] diff --git a/inc/classes/main/database/backend/class_CachedLocalFileDatabase.php b/inc/classes/main/database/backend/class_CachedLocalFileDatabase.php index 1b25719c..4e1a6a6a 100644 --- a/inc/classes/main/database/backend/class_CachedLocalFileDatabase.php +++ b/inc/classes/main/database/backend/class_CachedLocalFileDatabase.php @@ -583,7 +583,7 @@ class CachedLocalFileDatabase extends BaseDatabaseBackend implements DatabaseBac $this->setLastException($e); // Throw an SQL exception - throw new SqlException(array($this, sprintf("Cannot write data to table '%s', is the table created?", $dataSetInstance->getTableName()), self::DB_CODE_TABLE_UNWRITEABLE), self::EXCEPTION_SQL_QUERY); + throw new SqlException(array($this, sprintf('Cannot write data to table '%s', is the table created?', $dataSetInstance->getTableName()), self::DB_CODE_TABLE_UNWRITEABLE), self::EXCEPTION_SQL_QUERY); } } @@ -623,6 +623,53 @@ class CachedLocalFileDatabase extends BaseDatabaseBackend implements DatabaseBac //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: data[' . gettype($data) . ']='.print_r($data, TRUE)); return $data; } + + /** + * Counts total rows of given table + * + * @param $tableName Table name + * @return $count Total rows of given table + */ + public function countTotalRows($tableName) { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: tableName=' . $tableName . ' - CALLED!'); + + // Create full path name + $pathName = $this->getConfigInstance()->getConfigEntry('local_db_path') . $tableName . '/'; + + // Try all the requests + try { + // Get a file pointer instance + $directoryInstance = ObjectFactory::createObjectByConfiguredName('directory_class', array($pathName)); + + // Initialize counter + $count = 0; + + // Read the directory with some exceptions + while ($dataFile = $directoryInstance->readDirectoryExcept(array('.htaccess', 'info.' . $this->getFileExtension()))) { + // Does the extension match? + if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) { + // Debug message + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',getFileExtension()=' . $this->getFileExtension() . ' - SKIPPED!'); + // Skip this file! + continue; + } // END - if + + // Count this row up + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',getFileExtension()=' . $this->getFileExtension() . ' - COUNTED!'); + $count++; + } // END - while + } catch (FrameworkException $e) { + // Catch all exceptions and store them in last error + $this->setLastException($e); + + // Throw an SQL exception + throw new SqlException(array($this, sprintf('Cannot count on table '%s', is the table created?', $dataSetInstance->getTableName()), self::DB_CODE_TABLE_NOT_FOUND), self::EXCEPTION_SQL_QUERY); + } + + // Return count + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: tableName=' . $tableName . ',count=' . $count . ' - EXIT!'); + return $count; + } } // [EOF] diff --git a/inc/classes/main/database/class_BaseDatabaseWrapper.php b/inc/classes/main/database/class_BaseDatabaseWrapper.php index fde30c96..c2a18b86 100644 --- a/inc/classes/main/database/class_BaseDatabaseWrapper.php +++ b/inc/classes/main/database/class_BaseDatabaseWrapper.php @@ -51,8 +51,11 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem { * @return void */ private final function initCacheInstance () { - // Set the new instance - $this->cacheInstance = CacheFactory::getFactory()->createConfiguredCache(); + // Is the cache enabled? + if ($this->getConfigInstance()->getConfigEntry('database_cache_enabled') === TRUE) { + // Set the new instance + $this->cacheInstance = CacheFactory::getFactory()->createConfiguredCache(); + } // END - if } /** @@ -183,8 +186,11 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem { // Cache the result if not null if (!is_null($result)) { - // A valid result has returned from the database layer - $this->cacheInstance->offsetSet($cacheKey, $result); + // Is cache enabled? + if ($this->getConfigInstance()->getConfigEntry('database_cache_enabled') === TRUE) { + // A valid result has returned from the database layer + $this->cacheInstance->offsetSet($cacheKey, $result); + } // END - if } else { // This invalid result must be wrapped $result = array( @@ -242,6 +248,19 @@ class BaseDatabaseWrapper extends BaseFrameworkSystem { return $primaryKey; } + /** + * Count rows of this table + * + * @return $count Count of total rows in this table + */ + public final function countTotalRows () { + // Get the table name and a database instance and ask for it + $count = $this->getDatabaseInstance()->countTotalRows($this->getTableName()); + + // Return value + return $count; + } + /** * Removes non-public data from given array. * diff --git a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php index 1cc296ca..b855a62c 100644 --- a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php +++ b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php @@ -128,9 +128,6 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem implements Framework // Can the next entry be read? assert($this->getDirectoryIteratorInstance()->valid()); - // Default is FALSE - $currentEntry = FALSE; - // Read data from the directory pointer and return it $currentEntry = $this->getDirectoryIteratorInstance()->current(); @@ -153,6 +150,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem implements Framework return $this->readRawDirectory(); } elseif (!$this->getDirectoryIteratorInstance()->valid()) { // No more left to read + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: EOD reached.'); return NULL; } @@ -167,10 +165,10 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem implements Framework if (is_object($currentEntry)) { // Get file name $rawLine = $currentEntry->getFilename(); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine . ',isDot=' . intval($this->getDirectoryIteratorInstance()->isDot())); - // Is it not excluded? - if (in_array($rawLine, $except)) { + // Is it a dot-directory or excluded? + if (($this->getDirectoryIteratorInstance()->isDot()) || (in_array($rawLine, $except))) { // To next entry $this->getDirectoryIteratorInstance()->next(); diff --git a/inc/classes/middleware/database/class_DatabaseConnection.php b/inc/classes/middleware/database/class_DatabaseConnection.php index 484575a2..d3225c41 100644 --- a/inc/classes/middleware/database/class_DatabaseConnection.php +++ b/inc/classes/middleware/database/class_DatabaseConnection.php @@ -185,6 +185,9 @@ class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, Re * @return $data A cleaned up array with only public data. */ public function removeNonPublicDataFromArray (array $data) { + // Connect to the database + $this->dbLayer->connectToDatabase(); + // Call database backend //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DB-CONNECTION[' . $this->__toString() . ']: Calling this->dbLayer->removeNonPublicDataFromArray(data) ...'); $data = $this->dbLayer->removeNonPublicDataFromArray($data); @@ -192,6 +195,23 @@ class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, Re //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DB-CONNECTION[' . $this->__toString() . ']: data[]=' . gettype($data)); return $data; } + + /** + * Count total table rows + * + * @param $tableName Table name + * @return $count Total row count + */ + public function countTotalRows ($tableName) { + // Connect to the database + $this->dbLayer->connectToDatabase(); + + // Ask the database layer + $count = $this->dbLayer->countTotalRows($tableName); + + // Return the value + return $count; + } } // [EOF]