X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fdatabase%2Fdatabases%2Fclass_LocalFileDatabase.php;h=445b7f8d67481fd3e4e8e73647cace9df07f8721;hp=ac5bbb9553d52ec6660c4a56fbcda8091715e8b7;hb=54dce2f61472927289ae152afedf1aeaf076e8b1;hpb=30b7d2640709bbec4cac06ddc7c5d1dddb997a1c diff --git a/inc/classes/main/database/databases/class_LocalFileDatabase.php b/inc/classes/main/database/databases/class_LocalFileDatabase.php index ac5bbb95..445b7f8d 100644 --- a/inc/classes/main/database/databases/class_LocalFileDatabase.php +++ b/inc/classes/main/database/databases/class_LocalFileDatabase.php @@ -8,11 +8,11 @@ * * A configurable 'file_io_class' is being used as "storage backend". * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendInterface { +class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackend { /** * The file's extension */ @@ -46,7 +46,7 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn /** * Whether the "connection is already up */ - private $alreadyConnected = false; + private $alreadyConnected = FALSE; /** * Table information array @@ -206,7 +206,7 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: Writing ' . strlen($compressedData) . ' bytes ...'); // Write this data BASE64 encoded to the file - $this->getFileIoInstance()->saveFile($fqfn, $compressedData); + $this->getFileIoInstance()->saveFile($fqfn, $compressedData, $this); // Debug message //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: Flushing ' . count($dataArray) . ' elements to database file completed.'); @@ -272,6 +272,27 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn $this->writeDataArrayToFqfn($fqfn, $this->tableInfo[$dataSetInstance->getTableName()]); } + /** + * Updates the table info file from given dataset instance + * + * @param $dataSetInstance An instance of a database set class + * @return void + */ + private function updateTableInfoFile (StoreableCriteria $dataSetInstance) { + // "Cache" table name + $tableName = $dataSetInstance->getTableName(); + + // Create FQFN for creating the table information file + $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, 'info'); + + // Get the data out from dataset in a local array + $this->tableInfo[$tableName]['primary'] = $dataSetInstance->getPrimaryKey(); + $this->tableInfo[$tableName]['last_updated'] = time(); + + // Write the data to the file + $this->writeDataArrayToFqfn($fqfn, $this->tableInfo[$tableName]); + } + /** * Updates the primary key information or creates the table info file if not found * @@ -279,16 +300,20 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn * @return void */ private function updatePrimaryKey (StoreableCriteria $dataSetInstance) { + // "Cache" table name + $tableName = $dataSetInstance->getTableName(); + // Get the information array from lower method $infoArray = $this->getContentsFromTableInfoFile($dataSetInstance); // Is the primary key there? - if (!isset($this->tableInfo['primary'])) { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: tableInfo=' . print_r($this->tableInfo, TRUE)); + if (!isset($this->tableInfo[$tableName]['primary'])) { // Then create the info file $this->createTableInfoFile($dataSetInstance); - } elseif (($this->getConfigInstance()->getConfigEntry('db_update_primary_forced') == 'Y') && ($dataSetInstance->getPrimaryKey() != $this->tableInfo['primary'])) { + } elseif (($this->getConfigInstance()->getConfigEntry('db_update_primary_forced') == 'Y') && ($dataSetInstance->getPrimaryKey() != $this->tableInfo[$tableName]['primary'])) { // Set the array element - $this->tableInfo[$dataSetInstance->getTableName()]['primary'] = $dataSetInstance->getPrimaryKey(); + $this->tableInfo[$tableName]['primary'] = $dataSetInstance->getPrimaryKey(); // Update the entry $this->updateTableInfoFile($dataSetInstance); @@ -357,6 +382,9 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn // Search in the criteria with FMFW (First Matches, First Wins) foreach ($dataArray as $key => $value) { + // Make sure value is not bool + assert(!is_bool($value)); + // Found one entry? $isFound = (($isFound === TRUE) && ($searchInstance->isCriteriaMatching($key, $value))); //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: key=' . $key . ',value=' . $value . ',isFound=' . intval($isFound)); @@ -380,14 +408,14 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn // Entry found! //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: indexKey=' . $this->getIndexKey() . ',idx=' . $idx . ',dataArray=' . print_r($dataArray, TRUE)); - $resultData[BaseDatabaseBackend::RESULT_INDEX_ROWS][] = $dataArray; + array_push($resultData[BaseDatabaseBackend::RESULT_INDEX_ROWS], $dataArray); // Count found entries up $limitFound++; } // END - if } else { // Throw an exception here - throw new SqlException(array($this, sprintf("File '%s' contains invalid data.", $dataFile), self::DB_CODE_DATA_FILE_CORRUPT), self::EXCEPTION_SQL_QUERY); + throw new SqlException(array($this, sprintf('File '%s' contains invalid data.', $dataFile), self::DB_CODE_DATA_FILE_CORRUPT), self::EXCEPTION_SQL_QUERY); } // Count entry up @@ -405,7 +433,7 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn $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); + 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->setLastException($e); @@ -441,7 +469,7 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn $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); } } @@ -492,6 +520,9 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn // Search in the criteria with FMFW (First Matches, First Wins) foreach ($dataArray as $key => $value) { + // Make sure value is not bool + assert(!is_bool($value)); + // Found one entry? $isFound = (($isFound === TRUE) && ($searchInstance->isCriteriaMatching($key, $value))); } // END - foreach @@ -510,6 +541,11 @@ class LocalFileDatabase extends BaseDatabaseBackend implements DatabaseBackendIn // Entry found, so update it foreach ($searchArray as $searchKey => $searchValue) { + // Make sure the value is not bool again + assert(!is_bool($searchValue)); + assert($searchKey != $this->indexKey); + + // Debug message + add/update it //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: criteriaKey=' . $searchKey . ',criteriaValue=' . $searchValue); $dataArray[$searchKey] = $searchValue; } // END - foreach