X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fdatabase%2Fdatabases%2Fclass_LocalFileDatabase.php;h=407aa0d7c1d4145ac1d20f46bc982a47f2b957d0;hb=cd3c1c775e300e64f132c95b6fa46b3fe585fd8e;hp=2e28443090bf01b5ebfff2ebe9a36cb1d3a7b900;hpb=3107989f93cfb5808ce9d75f1c7d2b7ee3d83d18;p=core.git diff --git a/inc/classes/main/database/databases/class_LocalFileDatabase.php b/inc/classes/main/database/databases/class_LocalFileDatabase.php index 2e284430..407aa0d7 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 - 2009 Roland Haeder, this is free software + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2011 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * @@ -24,12 +24,14 @@ * along with this program. If not, see . */ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontendInterface { - // Constants for MySQL backward-compatiblity (PLEASE FIX THEM!) const DB_CODE_TABLE_MISSING = 0x100; const DB_CODE_TABLE_UNWRITEABLE = 0x101; const DB_CODE_DATA_FILE_CORRUPT = 0x102; + // Status results + const RESULT_OKAY = 'ok'; + /** * Save path for "file database" */ @@ -38,7 +40,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend /** * The file's extension */ - private $fileExtension = "serialized"; + private $fileExtension = 'serialized'; /** * The last read file's name @@ -73,7 +75,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend /** * Element for index */ - private $indexKey = "__idx"; + private $indexKey = '__idx'; /** * The protected constructor. Do never instance from outside! You need to @@ -81,37 +83,36 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend * * @return void */ - protected function __construct() { + protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); - - // Clean up a little - $this->removeNumberFormaters(); - $this->removeSystemArray(); } /** * Create an object of LocalFileDatabase and set the save path for local files. * This method also validates the given file path. * - * @param $savePath The local file path string - * @param $ioInstance The input/output handler. This - * should be FileIoHandler - * @return $dbInstance An instance of LocalFileDatabase + * @param $savePath The local file path string + * @return $dbInstance An instance of LocalFileDatabase */ - public final static function createLocalFileDatabase ($savePath, FileIoHandler $ioInstance) { + public static final function createLocalFileDatabase ($savePath) { // Get an instance - $dbInstance = new LocalFileDatabase(); + $databaseInstance = new LocalFileDatabase(); // Set save path and IO instance - $dbInstance->setSavePath($savePath); - $dbInstance->setFileIoInstance($ioInstance); + $databaseInstance->setSavePath($savePath); + + // Set the compressor channel + $databaseInstance->setCompressorChannel(CompressorChannel::createCompressorChannel( + $databaseInstance->getConfigInstance()->getConfigEntry('base_path'). + $databaseInstance->getConfigInstance()->getConfigEntry('compressor_base_path') + )); // "Connect" to the database - $dbInstance->connectToDatabase(); + $databaseInstance->connectToDatabase(); // Return database instance - return $dbInstance; + return $databaseInstance; } /** @@ -121,11 +122,8 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend * @return void */ public final function setSavePath ($savePath) { - // Secure string - $savePath = (string) $savePath; - // Set save path - $this->savePath = $savePath; + $this->savePath = (string) $savePath; } /** @@ -283,12 +281,12 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $infoArray = array(); // Create FQFN for getting the table information file - $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/info.' . $this->getFileExtension(); + $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, 'info'); // Get the file contents try { $infoArray = $this->getDataArrayFromFile($fqfn); - } catch (FileNotFoundException $e) { + } catch (FileIoException $e) { // Not found, so ignore it here } @@ -296,6 +294,21 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend return $infoArray; } + /** + * Generates an FQFN from given dataset instance and string + * + * @param $dataSetInstance An instance of a database set class + * @param $rowName Name of the row + * @return $fqfn The FQFN for this row + */ + private function generateFqfnFromDataSet (Criteria $dataSetInstance, $rowName) { + // This is the FQFN + $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/' . $rowName . '.' . $this->getFileExtension(); + + // Return it + return $fqfn; + } + /** * Creates the table info file from given dataset instance * @@ -304,7 +317,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend */ private function createTableInfoFile (StoreableCriteria $dataSetInstance) { // Create FQFN for creating the table information file - $fqfn = $this->getSavePath() . $dataSetInstance->getTableName() . '/info.' . $this->getFileExtension(); + $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, 'info'); // Get the data out from dataset in a local array $this->tableInfo[$dataSetInstance->getTableName()] = array( @@ -331,7 +344,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend if (!isset($this->tableInfo['primary'])) { // Then create the info file $this->createTableInfoFile($dataSetInstance); - } elseif (($this->getConfigInstance()->readConfig('db_update_primary_forced') === "Y") && ($dataSetInstance->getPrimaryKey() != $this->tableInfo['primary'])) { + } elseif (($this->getConfigInstance()->getConfigEntry('db_update_primary_forced') == 'Y') && ($dataSetInstance->getPrimaryKey() != $this->tableInfo['primary'])) { // Set the array element $this->tableInfo[$dataSetInstance->getTableName()]['primary'] = $dataSetInstance->getPrimaryKey(); @@ -353,12 +366,12 @@ 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 $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 + * @throws SqlException If an 'SQL error' occurs */ public function querySelect ($resultType, $tableName, LocalSearchCriteria $criteriaInstance) { // The result is null by any errors @@ -367,15 +380,15 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend // Create full path name $pathName = $this->getSavePath() . $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 + // 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 try { // Get a directory pointer instance $directoryInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName); // Initialize the result data, this need to be rewritten e.g. if a local file cannot be read $resultData = array( - 'status' => "ok", + 'status' => LocalfileDatabase::RESULT_OKAY, 'rows' => array() ); @@ -385,7 +398,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())) { // Does the extension match? if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) { // Skip this file! @@ -467,12 +480,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend */ public function queryInsertDataSet (StoreableCriteria $dataSetInstance) { // Create full path name - $fqfn = sprintf("%s%s/%s.%s", - $this->getSavePath(), - $dataSetInstance->getTableName(), - md5($dataSetInstance->getUniqueValue()), - $this->getFileExtension() - ); + $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, md5($dataSetInstance->getUniqueValue())); // Try to save the request away try { @@ -487,10 +495,10 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend } catch (FrameworkException $e) { // Catch all exceptions and store them in last error $this->lastException = $e; - $this->lastError = $e->getMessage(); + $this->lastError = $e->getMessage(); // 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); } } @@ -521,7 +529,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! @@ -581,7 +589,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend $this->lastError = $e->getMessage(); // 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); } }