use Org\Mxchange\CoreFramework\Factory\ObjectFactory;
use Org\Mxchange\CoreFramework\Filesystem\FileNotFoundException;
use Org\Mxchange\CoreFramework\Generic\FrameworkException;
+use Org\Mxchange\CoreFramework\Result\Database\BaseDatabaseResult;
use Org\Mxchange\CoreFramework\Traits\Compressor\Channel\CompressorChannelTrait;
use Org\Mxchange\CoreFramework\Traits\Handler\Io\IoHandlerTrait;
// Import SPL stuff
+use \InvalidArgumentException;
use \SplFileInfo;
/**
* @param $tableName Name of the database table
* @param $searchInstance Local search criteria class
* @return $resultData Result data of the query
+ * @throws InvalidArgumentException If a parameter is not valid
* @throws UnsupportedCriteriaException If the criteria is unsupported
* @throws SqlException If an 'SQL error' occurs
*/
public function querySelect (string $tableName, LocalSearchCriteria $searchInstance) {
- // The result is null by any errors
+ // Validate parameter
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: tableName=%s,searchInstance=%s - CALLED!', $tableName, $searchInstance->__toString()));
+ if (empty($tableName)) {
+ // Throw IAE
+ throw new InvalidArgumentException('Parameter "tableName" is empty');
+ }
+
+ // The result is null by any errors
$resultData = NULL;
// Create full path name
$directoryInstance = ObjectFactory::createObjectByConfiguredName('directory_class', array($pathName));
// Initialize the result data, this need to be rewritten e.g. if a local file cannot be read
- $resultData = array(
- BaseDatabaseBackend::RESULT_INDEX_STATUS => self::RESULT_OKAY,
- BaseDatabaseBackend::RESULT_INDEX_ROWS => []
- );
+ $resultData = [
+ BaseDatabaseResult::RESULT_NAME_STATUS => self::RESULT_OKAY,
+ BaseDatabaseResult::RESULT_NAME_ROWS => []
+ ];
// Initialize limit/skip
$limitFound = 0;
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: Skipping fileInfoInstance->filename=%s ...', $fileInfoInstance->getFilename()));
$directoryInstance->getDirectoryIteratorInstance()->next();
continue;
- } // END - if
+ }
// Read the file
$dataArray = $this->getDataArrayFromFile($fileInfoInstance);
// Found one entry?
$isFound = (($isFound === true) && ($searchInstance->isCriteriaMatching($key, $value)));
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: key=%s,value[%s]=%s,isFound=%s', $key, gettype($value), $value, intval($isFound)));
- } // END - foreach
+ }
// Is all found?
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: isFound=%d,limitFound=%d,limit=%d', intval($isFound), $limitFound, $searchInstance->getLimit()));
// Skip this entry
$skipFound++;
break;
- } // END - if
- } // END - if
+ }
+ }
// Set id number
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: Setting dataArray[%s]=%d', $this->getIndexKey(), $idx));
$dataArray[$this->getIndexKey()] = $idx;
// Entry found!
- array_push($resultData[BaseDatabaseBackend::RESULT_INDEX_ROWS], $dataArray);
+ array_push($resultData[BaseDatabaseResult::RESULT_NAME_ROWS], $dataArray);
// Count found entries up
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: resultData[%s]()=%d', BaseDatabaseBackend::RESULT_INDEX_ROWS, count($resultData[BaseDatabaseBackend::RESULT_INDEX_ROWS])));
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('CACHED-LFDB: resultData[%s]()=%d', BaseDatabaseResult::RESULT_NAME_ROWS, count($resultData[BaseDatabaseResult::RESULT_NAME_ROWS])));
$limitFound++;
- } // END - if
+ }
} else {
// Throw an exception here
throw new SqlException(array($this, sprintf('File '%s' contains invalid data.', $fileInfoInstance->getPathname()), self::DB_CODE_DATA_FILE_CORRUPT), self::EXCEPTION_SQL_QUERY);
// Advance to next entry
$directoryInstance->getDirectoryIteratorInstance()->next();
- } // END - while
+ }
// Close directory and throw the instance away
$directoryInstance->closeDirectory();
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: fileInfoInstance.extension=' . $fileInfoInstance->getExtension() . ',getFileExtension()=' . $this->getFileExtension() . ' - SKIPPED!');
$directoryInstance->getDirectoryIteratorInstance()->next();
continue;
- } // END - if
+ }
// Open this file for reading
$dataArray = $this->getDataArrayFromFile($fileInfoInstance);
// Found one entry?
$isFound = (($isFound === true) && ($searchInstance->isCriteriaMatching($key, $value)));
- } // END - foreach
+ }
// Is all found?
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: isFound=' . intval($isFound));
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: Found entry, but skipping ...');
$skipFound++;
break;
- } // END - if
- } // END - if
+ }
+ }
// Entry found, so update it
foreach ($searchArray as $searchKey => $searchValue) {
// Debug message + add/update it
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: criteriaKey=' . $searchKey . ',criteriaValue=' . $searchValue);
$dataArray[$searchKey] = $searchValue;
- } // END - foreach
+ }
// Write the data to a local file
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: Writing data[]=' . count($dataArray) . ' to ' . $fileInfoInstance->getPathname() . ' ...');
// Count found entries up
$limitFound++;
- } // END - if
- } // END - if
+ }
+ }
// Advance to next entry
$directoryInstance->getDirectoryIteratorInstance()->next();
- } // END - while
+ }
// Close the file pointer
$directoryInstance->closeDirectory();
*
* @param $tableName Name of the table we need the primary key from
* @return $primaryKey Primary key column of the given table
+ * @throws InvalidArgumentException If a parameter is not valid
* @todo Rename method to getPrimaryKeyFromTableInfo()
*/
public function getPrimaryKeyOfTable (string $tableName) {
+ // Validate parameter
+ if (empty($tableName)) {
+ // Throw IAE
+ throw new InvalidArgumentException('Parameter "tableName" is empty');
+ }
+
// Default key is null
$primaryKey = NULL;
if (isset($this->tableInfo[$tableName])) {
// Then return the primary key
$primaryKey = $this->tableInfo[$tableName]['primary'];
- } // END - if
+ }
// Return the column
return $primaryKey;
*
* @param $tableName Table name
* @return $count Total rows of given table
+ * @throws InvalidArgumentException If a parameter is not valid
*/
public function countTotalRows (string $tableName) {
+ // Validate parameter
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: tableName=' . $tableName . ' - CALLED!');
+ if (empty($tableName)) {
+ // Throw IAE
+ throw new InvalidArgumentException('Parameter "tableName" is empty');
+ }
+
// Create full path name
$pathName = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('local_database_path') . $tableName . DIRECTORY_SEPARATOR;
// Try all the requests
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: pathName=' . $pathName);
try {
// Get a file pointer instance
$directoryInstance = ObjectFactory::createObjectByConfiguredName('directory_class', array($pathName));
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: fileInfoInstance.extension=' . $fileInfoInstance->getExtension() . ',getFileExtension()=' . $this->getFileExtension() . ' - SKIPPED!');
// Skip this file!
continue;
- } // END - if
+ }
// Count this row up
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('CACHED-LFDB: fileInfoInstance.pathname=' . $fileInfoInstance->getPathname() . ',getFileExtension()=' . $this->getFileExtension() . ' - COUNTED!');
$count++;
- } // END - while
+ }
} catch (FrameworkException $e) {
// Catch all exceptions and store them in last error
$this->setLastException($e);