*
* @author Roland Haeder <webmaster@ship-simu.org>
* @version 0.0.0
- * @copyright Copyright (c) 2007 - 2009 Roland Haeder, this is free software
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.ship-simu.org
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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"
*/
- private $savePath = "";
+ private $savePath = '';
/**
* The file's extension
*/
- private $fileExtension = "serialized";
+ private $fileExtension = 'serialized';
/**
* The last read file's name
*/
- private $lastFile = "";
+ private $lastFile = '';
/**
* The last read file's content including header information
/**
* Last error message
*/
- private $lastError = "";
+ private $lastError = '';
/**
* Last exception
/**
* Element for index
*/
- private $indexKey = "__idx";
+ private $indexKey = '__idx';
/**
* The protected constructor. Do never instance from outside! You need to
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
+ * @param $ioInstance The input/output handler. This
+ * should be FileIoHandler
+ * @return $dbInstance An instance of LocalFileDatabase
*/
public final static function createLocalFileDatabase ($savePath, FileIoHandler $ioInstance) {
// Get an instance
* @return void
*/
private final function resetLastError () {
- $this->lastError = "";
+ $this->lastError = '';
$this->lastException = null;
}
$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 {
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
*
*/
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(
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();
* 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
// 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()
);
$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!
*/
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 {
$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!