// Debug message
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: Read ' . count($dataArray) . ' elements from database file ' . $fqfn . '.');
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataArray=' . print_r($dataArray, TRUE));
// Finally return it
return $dataArray;
private function writeDataArrayToFqfn ($fqfn, array $dataArray) {
// Debug message
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: Flushing ' . count($dataArray) . ' elements to database file ' . $fqfn . ' ...');
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataArray=' . print_r($dataArray, TRUE));
// Serialize and compress it
$compressedData = $this->getCompressorChannel()->getCompressor()->compressStream(serialize($dataArray));
* 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 Local 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
*/
- public function querySelect ($tableName, LocalSearchCriteria $criteriaInstance) {
+ public function querySelect ($tableName, LocalSearchCriteria $searchInstance) {
// The result is null by any errors
$resultData = NULL;
$idx = 1;
// Read the directory with some exceptions
- while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', 'info.' . $this->getFileExtension()))) && (($limitFound < $criteriaInstance->getLimit()) || ($criteriaInstance->getLimit() == 0))) {
+ while (($dataFile = $directoryInstance->readDirectoryExcept(array('.', '..', '.htaccess', '.svn', 'info.' . $this->getFileExtension()))) && (($limitFound < $searchInstance->getLimit()) || ($searchInstance->getLimit() == 0))) {
// Does the extension match?
if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) {
// Skip this file!
// Read the file
$dataArray = $this->getDataArrayFromFile($pathName . $dataFile);
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',dataArray='.print_r($dataArray,true));
+ /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',dataArray='.print_r($dataArray, TRUE));
// Is this an array?
if (is_array($dataArray)) {
+ // Default is nothing found
+ $isFound = TRUE;
+
// Search in the criteria with FMFW (First Matches, First Wins)
foreach ($dataArray as $key => $value) {
- // Get criteria element
- $criteria = $criteriaInstance->getCriteriaElemnent($key);
-
- // Is the criteria met or none set?
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: criteria[' . gettype($criteria) . ']=' . $criteria . ';()=' . strlen($criteria) . ',criteriaInstance()=' . $criteriaInstance->count() . ',value(' . strlen($value) . ')=' . $value);
- if (((!is_null($criteria)) && ($criteria == $value)) || ($criteriaInstance->count() == 0)) {
- // Shall we skip this entry?
- if ($criteriaInstance->getSkip() > 0) {
- // We shall skip some entries
- if ($skipFound < $criteriaInstance->getSkip()) {
- // Skip this entry
- $skipFound++;
- break;
- } // END - if
+ // 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));
+ } // END - foreach
+
+ // Is all found?
+ /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: isFound=' . intval($isFound) . ',limitFound=' . $limitFound . ',limit=' . $searchInstance->getLimit());
+ if ($isFound === TRUE) {
+ // Shall we skip this entry?
+ if ($searchInstance->getSkip() > 0) {
+ // We shall skip some entries
+ if ($skipFound < $searchInstance->getSkip()) {
+ // Skip this entry
+ $skipFound++;
+ break;
} // END - if
+ } // END - if
- // Set id number
- $dataArray[$this->getIndexKey()] = $idx;
+ // Set id number
+ $dataArray[$this->getIndexKey()] = $idx;
- // 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;
+ // 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;
- // Count found entries up
- $limitFound++;
- break;
- } // END - if
- } // END - foreach
+ // 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);
* @throws SqlException If an SQL error occurs
*/
public function queryInsertDataSet (StoreableCriteria $dataSetInstance) {
- // Create full path name
- $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, md5($dataSetInstance->getUniqueValue()));
-
// Try to save the request away
try {
+ // Create full path name
+ $fqfn = $this->generateFqfnFromDataSet($dataSetInstance, md5($dataSetInstance->getUniqueValue()));
+
// Write the data away
$this->writeDataArrayToFqfn($fqfn, $dataSetInstance->getCriteriaArray());
$skipFound = 0;
// Get the criteria array from the dataset
- $criteriaArray = $dataSetInstance->getCriteriaArray();
+ $searchArray = $dataSetInstance->getCriteriaArray();
// Get search criteria
$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()) || ($searchInstance->getLimit() == 0))) {
// Does the extension match?
if (substr($dataFile, -(strlen($this->getFileExtension()))) !== $this->getFileExtension()) {
// Debug message
// Open this file for reading
$dataArray = $this->getDataArrayFromFile($pathName . $dataFile);
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',dataArray='.print_r($dataArray,true));
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',dataArray='.print_r($dataArray, TRUE));
// Is this an array?
if (is_array($dataArray)) {
+ // Default is nothing found
+ $isFound = TRUE;
+
// Search in the criteria with FMFW (First Matches, First Wins)
foreach ($dataArray as $key => $value) {
- // Get criteria element
- $criteria = $searchInstance->getCriteriaElemnent($key);
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: dataFile=' . $dataFile . ',key=' . $key . ',criteria=' . $criteria);
-
- // Is the criteria met?
- if (((!is_null($criteria)) && ($criteria == $value)) || ($searchInstance->count() == 0)) {
- // Shall we skip this entry?
- if ($searchInstance->getSkip() > 0) {
- // We shall skip some entries
- if ($skipFound < $searchInstance->getSkip()) {
- // Skip this entry
- $skipFound++;
- break;
- } // END - if
+ // Make sure value is not bool
+ assert(!is_bool($value));
+
+ // Found one entry?
+ $isFound = (($isFound === TRUE) && ($searchInstance->isCriteriaMatching($key, $value)));
+ } // END - foreach
+
+ // Is all found?
+ if ($isFound === TRUE) {
+ // Shall we skip this entry?
+ if ($searchInstance->getSkip() > 0) {
+ // We shall skip some entries
+ if ($skipFound < $searchInstance->getSkip()) {
+ // Skip this entry
+ $skipFound++;
+ break;
} // END - if
+ } // END - if
- // Entry found, so update it
- foreach ($criteriaArray as $criteriaKey => $criteriaValue) {
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: criteriaKey=' . $criteriaKey . ',criteriaValue=' . $criteriaValue);
- $dataArray[$criteriaKey] = $criteriaValue;
- } // END - foreach
+ // Entry found, so update it
+ foreach ($searchArray as $searchKey => $searchValue) {
+ // Make sure the value is not bool again
+ assert(!is_bool($searchValue));
- // Write the data to a local file
- $this->writeDataArrayToFqfn($pathName . $dataFile, $dataArray);
+ // Debug message + add/update it
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DATABASE: criteriaKey=' . $searchKey . ',criteriaValue=' . $searchValue);
+ $dataArray[$searchKey] = $searchValue;
+ } // END - foreach
- // Count it
- $limitFound++;
- break;
- } // END - if
- } // END - foreach
+ // Write the data to a local file
+ $this->writeDataArrayToFqfn($pathName . $dataFile, $dataArray);
+
+ // Count found entries up
+ $limitFound++;
+ } // END - if
} // END - if
} // END - while