From: Marcin Haba Date: Fri, 3 Mar 2023 12:35:34 +0000 (+0100) Subject: baculum: Change a way of executing SQL queries X-Git-Tag: Release-13.0.3~121 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5115cfef06f78018ec015945e00e3e841196ce57;p=thirdparty%2Fbacula.git baculum: Change a way of executing SQL queries --- diff --git a/gui/baculum/protected/API/Modules/ClientManager.php b/gui/baculum/protected/API/Modules/ClientManager.php index 2ee07aa27..1ee3bd4e3 100644 --- a/gui/baculum/protected/API/Modules/ClientManager.php +++ b/gui/baculum/protected/API/Modules/ClientManager.php @@ -33,29 +33,6 @@ use Prado\Data\ActiveRecord\TActiveRecordCriteria; */ class ClientManager extends APIModule { - /** - * SQL query builder. - * - * @var TDbCommandBuilder command builder - */ - private static $query_builder; - - /** - * Get the SQL query builder instance. - * Note: Singleton - * - * @return TDbCommandBuilder command builder - */ - private function getQueryBuilder() { - if (is_null(self::$query_builder)) { - $record = ClientRecord::finder(); - $connection = $record->getDbConnection(); - $tableInfo = $record->getRecordGateway()->getRecordTableInfo($record); - self::$query_builder = $tableInfo->createCommandBuilder($connection); - } - return self::$query_builder; - } - /** * Get client list. * @@ -79,23 +56,7 @@ class ClientManager extends APIModule { FROM Client ' . $where['where'] . $offset . $limit; - $builder = $this->getQueryBuilder(); - if (count($where['params']) == 0) { - /** - * Please note that in case no params the TDbCommandBuilder::applyCriterias() - * returns empty the PDO statement handler. From this reason here - * the query is called directly by PDO. - */ - $connection = JobRecord::finder()->getDbConnection(); - $connection->setActive(true); - $pdo = $connection->getPdoInstance(); - $statement = $pdo->query($sql); - - } else { - $command = $builder->applyCriterias($sql, $where['params']); - $statement = $command->getPdoStatement(); - $command->query(); - } + $statement = Database::runQuery($sql, $where['params']); return $statement->fetchAll(\PDO::FETCH_OBJ); } diff --git a/gui/baculum/protected/API/Modules/Database.php b/gui/baculum/protected/API/Modules/Database.php index 226f039e7..5826be253 100644 --- a/gui/baculum/protected/API/Modules/Database.php +++ b/gui/baculum/protected/API/Modules/Database.php @@ -24,6 +24,7 @@ namespace Baculum\API\Modules; use Baculum\Common\Modules\Logging; use Baculum\Common\Modules\Errors\DatabaseError; +use Baculum\API\Modules\JobRecord; use Prado\Data\TDbConnection; use Prado\Exceptions\TDbException; @@ -45,6 +46,13 @@ class Database extends APIModule { const MYSQL_TYPE = 'mysql'; const SQLITE_TYPE = 'sqlite'; + /** + * SQL query builder. + * + * @var TDbCommandBuilder command builder + */ + private static $query_builder; + /** * Check/test connection to database. * @@ -246,5 +254,50 @@ class Database extends APIModule { $result = $new_result; } } + + /** + * Get the SQL query builder instance. + * Note: Singleton + * + * @param object $record Active Record object + * @return TDbCommandBuilder command builder + */ + private static function getQueryBuilder() { + if (is_null(self::$query_builder)) { + $record = JobRecord::finder(); + $connection = $record->getDbConnection(); + $tableInfo = $record->getRecordGateway()->getRecordTableInfo($record); + self::$query_builder = $tableInfo->createCommandBuilder($connection); + } + return self::$query_builder; + } + + /** + * Run query and get SQL query statement. + * + * @param string $sql SQL query + * @param array $params SQL query params + * @return PDO statement. + */ + public static function runQuery($sql, $params = []) { + $builder = self::getQueryBuilder(); + if (count($params) == 0) { + /** + * Please note that in case no params the TDbCommandBuilder::applyCriterias() + * returns empty the PDO statement handler. From this reason here + * the query is called directly by PDO. + */ + $connection = JobRecord::finder()->getDbConnection(); + $connection->setActive(true); + $pdo = $connection->getPdoInstance(); + $statement = $pdo->query($sql); + + } else { + $command = $builder->applyCriterias($sql, $params); + $statement = $command->getPdoStatement(); + $command->query(); + } + return $statement; + } } ?> diff --git a/gui/baculum/protected/API/Modules/JobManager.php b/gui/baculum/protected/API/Modules/JobManager.php index c100e4b61..76c429faa 100644 --- a/gui/baculum/protected/API/Modules/JobManager.php +++ b/gui/baculum/protected/API/Modules/JobManager.php @@ -34,13 +34,6 @@ use Prado\Data\ActiveRecord\TActiveRecordCriteria; */ class JobManager extends APIModule { - /** - * SQL query builder. - * - * @var TDbCommandBuilder command builder - */ - private static $query_builder; - /** * Job statuses in some parts are not compatible with rest of the API. * NOTE: Used here are also internal job statuses that are not used in the Catalog @@ -110,22 +103,6 @@ class JobManager extends APIModule { const JOB_RESULT_VIEW_BASIC = 'basic'; const JOB_RESULT_VIEW_FULL = 'full'; - /** - * Get the SQL query builder instance. - * Note: Singleton - * - * @return TDbCommandBuilder command builder - */ - private function getQueryBuilder() { - if (is_null(self::$query_builder)) { - $record = JobRecord::finder(); - $connection = $record->getDbConnection(); - $tableInfo = $record->getRecordGateway()->getRecordTableInfo($record); - self::$query_builder = $tableInfo->createCommandBuilder($connection); - } - return self::$query_builder; - } - /** * Get job status groups. * @@ -185,10 +162,7 @@ LEFT JOIN Pool USING (PoolId) LEFT JOIN FileSet USING (FilesetId)' . $where['where'] . $order . $limit . $offset; - $builder = $this->getQueryBuilder(); - $command = $builder->applyCriterias($sql, $where['params']); - $statement = $command->getPdoStatement(); - $command->query(); + $statement = Database::runQuery($sql, $where['params']); $result = []; if ($mode == self::JOB_RESULT_MODE_OVERVIEW) { // Overview mode. @@ -383,23 +357,7 @@ LEFT JOIN FileSet USING (FilesetId)' (SELECT COUNT(1) FROM Job ' . (!empty($where['where']) ? ' WHERE ' . $where['where'] : '') . ') AS all '; - $builder = $this->getQueryBuilder(); - if (count($where['params']) == 0) { - /** - * Please note that in case no params the TDbCommandBuilder::applyCriterias() - * returns empty the PDO statement handler. From this reason here - * the query is called directly by PDO. - */ - $connection = JobRecord::finder()->getDbConnection(); - $connection->setActive(true); - $pdo = $connection->getPdoInstance(); - $statement = $pdo->query($sql); - - } else { - $command = $builder->applyCriterias($sql, $where['params']); - $statement = $command->getPdoStatement(); - $command->query(); - } + $statement = Database::runQuery($sql, $where['params']); return $statement->fetch(\PDO::FETCH_ASSOC); } diff --git a/gui/baculum/protected/API/Modules/ObjectManager.php b/gui/baculum/protected/API/Modules/ObjectManager.php index 2f0367ccd..e9d3b0895 100644 --- a/gui/baculum/protected/API/Modules/ObjectManager.php +++ b/gui/baculum/protected/API/Modules/ObjectManager.php @@ -22,6 +22,8 @@ namespace Baculum\API\Modules; +use Baculum\API\Modules\Database; + /** * Object manager module. * @@ -49,13 +51,6 @@ class ObjectManager extends APIModule 'ObjectCount' ]; - /** - * SQL query builder. - * - * @var TDbCommandBuilder command builder - */ - private static $query_builder; - /** * Object result record view. * Views: @@ -65,23 +60,6 @@ class ObjectManager extends APIModule const OBJ_RESULT_VIEW_BASIC = 'basic'; const OBJ_RESULT_VIEW_FULL = 'full'; - - /** - * Get the SQL query builder instance. - * Note: Singleton - * - * @return TDbCommandBuilder command builder - */ - private static function getQueryBuilder() { - if (is_null(self::$query_builder)) { - $record = ObjectRecord::finder(); - $connection = $record->getDbConnection(); - $tableInfo = $record->getRecordGateway()->getRecordTableInfo($record); - self::$query_builder = $tableInfo->createCommandBuilder($connection); - } - return self::$query_builder; - } - /** * Get objects. * @@ -130,11 +108,7 @@ class ObjectManager extends APIModule FROM Object LEFT JOIN Job USING (JobId) ' . $where['where'] . $order . $limit . $offset; - - $builder = $this->getQueryBuilder(); - $command = $builder->applyCriterias($sql, $where['params']); - $statement = $command->getPdoStatement(); - $command->query(); + $statement = Database::runQuery($sql, $where['params']); $result = $statement->fetchAll(\PDO::FETCH_OBJ); Database::groupBy($group_by, $result, $group_limit); return $result; @@ -153,10 +127,7 @@ LEFT JOIN Job USING (JobId) ' FROM Object JOIN Job USING (JobId) ' . $where['where']; - $builder = $this->getQueryBuilder(); - $command = $builder->applyCriterias($sql, $where['params']); - $statement = $command->getPdoStatement(); - $command->query(); + $statement = Database::runQuery($sql, $where['params']); return $statement->fetchAll(\PDO::FETCH_ASSOC); }