X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fdatabase%2Fdatabases%2Fclass_LocalFileDatabase.php;h=6d54d6462a9ee8bc506968d1d5b3782ecbf09a92;hp=6410111512afa10245ee66fa1cbc616c2fb18b59;hb=078c5fbabeb15e973ee949536173e4c9d8fa7c07;hpb=84e2207412d3c6ea9f940a83b2cdd4503509808a diff --git a/inc/classes/main/database/databases/class_LocalFileDatabase.php b/inc/classes/main/database/databases/class_LocalFileDatabase.php index 64101115..6d54d646 100644 --- a/inc/classes/main/database/databases/class_LocalFileDatabase.php +++ b/inc/classes/main/database/databases/class_LocalFileDatabase.php @@ -6,7 +6,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -32,11 +32,6 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend // Status results const RESULT_OKAY = 'ok'; - /** - * Save path for "file database" - */ - private $savePath = ''; - /** * The file's extension */ @@ -53,20 +48,10 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend private $lastContents = array(); /** - * Wether the "connection is already up + * Whether the "connection is already up */ private $alreadyConnected = false; - /** - * Last error message - */ - private $lastError = ''; - - /** - * Last exception - */ - private $lastException = null; - /** * Table information array */ @@ -83,33 +68,26 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend * * @return void */ - protected function __construct() { + protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** - * Create an object of LocalFileDatabase and set the save path for local files. - * This method also validates the given file path. + * Create an object of LocalFileDatabase and set the save path from + * configuration for local files. * - * @param $savePath The local file path string - * @param $ioInstance The input/output handler. This - * should be FileIoHandler - * @return $dbInstance An instance of LocalFileDatabase + * @return $databaseInstance An instance of LocalFileDatabase */ - public final static function createLocalFileDatabase ($savePath, FileIoHandler $ioInstance) { + public static final function createLocalFileDatabase () { // Get an instance $databaseInstance = new LocalFileDatabase(); - // Set save path and IO instance - $databaseInstance->setSavePath($savePath); - $databaseInstance->setFileIoInstance($ioInstance); + // Get a new compressor channel instance + $compressorInstance = ObjectFactory::createObjectByConfiguredName('compressor_channel_class'); // Set the compressor channel - $databaseInstance->setCompressorChannel(CompressorChannel::createCompressorChannel( - $databaseInstance->getConfigInstance()->getConfigEntry('base_path'). - $databaseInstance->getConfigInstance()->getConfigEntry('compressor_base_path') - )); + $databaseInstance->setCompressorChannel($compressorInstance); // "Connect" to the database $databaseInstance->connectToDatabase(); @@ -118,44 +96,6 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend return $databaseInstance; } - /** - * Setter for save path - * - * @param $savePath The local save path where we shall put our serialized classes - * @return void - */ - public final function setSavePath ($savePath) { - // Set save path - $this->savePath = (string) $savePath; - } - - /** - * Getter for save path - * - * @return $savePath The local save path where we shall put our serialized classes - */ - public final function getSavePath () { - return $this->savePath; - } - - /** - * Getter for last error message - * - * @return $lastError Last error message - */ - public final function getLastError () { - return $this->lastError; - } - - /** - * Getter for last exception - * - * @return $lastException Last thrown exception - */ - public final function getLastException () { - return $this->lastException; - } - /** * Setter for the last read file * @@ -167,17 +107,6 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $this->lastFile = (string) $fqfn; } - /** - * Reset the last error and exception instance. This should be done after - * a successfull "query" - * - * @return void - */ - private final function resetLastError () { - $this->lastError = ''; - $this->lastException = null; - } - /** * Getter for last read file * @@ -306,7 +235,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend */ private function generateFqfnFromDataSet (Criteria $dataSetInstance, $rowName) { // This is the FQFN - $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/' . $rowName . '.' . $this->getFileExtension(); + $fqfn = $this->getConfigInstance()->getConfigEntry('local_db_path') . $dataSetInstance->getTableName() . '/' . $rowName . '.' . $this->getFileExtension(); // Return it return $fqfn; @@ -369,19 +298,18 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend * Starts a SELECT query on the database by given return type, table name * and search criteria * - * @param $resultType Result type ('array', 'object' and 'indexed' are valid) * @param $tableName Name of the database table * @param $criteria 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 */ - public function querySelect ($resultType, $tableName, LocalSearchCriteria $criteriaInstance) { + public function querySelect ($tableName, LocalSearchCriteria $criteriaInstance) { // The result is null by any errors - $resultData = null; + $resultData = NULL; // Create full path name - $pathName = $this->getSavePath() . $tableName . '/'; + $pathName = $this->getConfigInstance()->getConfigEntry('local_db_path') . $tableName . '/'; // A 'select' query is not that easy on local files, so first try to // find the 'table' which is in fact a directory on the server @@ -391,8 +319,8 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend // Initialize the result data, this need to be rewritten e.g. if a local file cannot be read $resultData = array( - 'status' => LocalfileDatabase::RESULT_OKAY, - 'rows' => array() + BaseDatabaseFrontend::RESULT_INDEX_STATUS => LocalfileDatabase::RESULT_OKAY, + BaseDatabaseFrontend::RESULT_INDEX_ROWS => array() ); // Initialize limit/skip @@ -401,7 +329,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $idx = 1; // Read the directory with some exceptions - while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', "info." . $this->getFileExtension()))) && ($limitFound < $criteriaInstance->getLimit())) { + while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', 'info.' . $this->getFileExtension()))) && (($limitFound < $criteriaInstance->getLimit()) || ($criteriaInstance->getLimit() == 0))) { // Does the extension match? if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) { // Skip this file! @@ -419,8 +347,8 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $criteria = $criteriaInstance->getCriteriaElemnent($key); // Is the criteria met? + //* NOISY-DEBUG: */ $this->debugOutput('DATABASE: criteria[' . gettype($criteria) . ']=' . $criteria . ',()=' . strlen($criteria) . ',value=' . $value . ',()=' . strlen($value)); if ((!is_null($criteria)) && ($criteria == $value)) { - // Shall we skip this entry? if ($criteriaInstance->getSkip() > 0) { // We shall skip some entries @@ -435,7 +363,8 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $dataArray[$this->getIndexKey()] = $idx; // Entry found! - $resultData['rows'][] = $dataArray; + //* NOISY-DEBUG: */ $this->debugOutput('DATABASE: indexKey=' . $this->getIndexKey() . ',idx=' . $idx . ',dataArray=' . print_r($dataArray, true)); + $resultData[BaseDatabaseFrontend::RESULT_INDEX_ROWS][] = $dataArray; // Count found entries up $limitFound++; @@ -455,19 +384,17 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $directoryInstance->closeDirectory(); unset($directoryInstance); - // Reset last error message and exception - $this->resetLastError(); + // Reset last exception + $this->resetLastException(); } catch (PathIsNoDirectoryException $e) { // Path not found means "table not found" for real databases... - $this->lastException = $e; - $this->lastError = $e->getMessage(); + $this->setLastException($e); // So throw an SqlException here with faked error message throw new SqlException (array($this, sprintf("Table '%s' not found", $tableName), self::DB_CODE_TABLE_MISSING), self::EXCEPTION_SQL_QUERY); } catch (FrameworkException $e) { // Catch all exceptions and store them in last error - $this->lastException = $e; - $this->lastError = $e->getMessage(); + $this->setLastException($e); } // Return the gathered result @@ -493,15 +420,14 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend // Update the primary key $this->updatePrimaryKey($dataSetInstance); - // Reset last error message and exception - $this->resetLastError(); + // Reset last exception + $this->resetLastException(); } catch (FrameworkException $e) { // Catch all exceptions and store them in last error - $this->lastException = $e; - $this->lastError = $e->getMessage(); + $this->setLastException($e); // Throw an SQL exception - throw new SqlException (array($this, sprintf("Cannot write data to table '%s'", $tableName), 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); } } @@ -514,7 +440,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend */ public function queryUpdateDataSet (StoreableCriteria $dataSetInstance) { // Create full path name - $pathName = $this->getSavePath() . $dataSetInstance->getTableName() . '/'; + $pathName = $this->getConfigInstance()->getConfigEntry('local_db_path') . $dataSetInstance->getTableName() . '/'; // Try all the requests try { @@ -532,7 +458,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $searchInstance = $dataSetInstance->getSearchInstance(); // Read the directory with some exceptions - while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', "info." . $this->getFileExtension()))) && ($limitFound < $searchInstance->getLimit())) { + while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', 'info.' . $this->getFileExtension()))) && ($limitFound < $searchInstance->getLimit())) { // Does the extension match? if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) { // Skip this file! @@ -584,15 +510,14 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend // Update the primary key $this->updatePrimaryKey($dataSetInstance); - // Reset last error message and exception - $this->resetLastError(); + // Reset last exception + $this->resetLastException(); } catch (FrameworkException $e) { // Catch all exceptions and store them in last error - $this->lastException = $e; - $this->lastError = $e->getMessage(); + $this->setLastException($e); // Throw an SQL exception - throw new SqlException (array($this, sprintf("Cannot write data to table '%s'", $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); } } @@ -605,7 +530,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend */ public function getPrimaryKeyOfTable ($tableName) { // Default key is null - $primaryKey = null; + $primaryKey = NULL; // Does the table information exist? if (isset($this->tableInfo[$tableName])) {