]> source.dussan.org Git - nextcloud-server.git/commitdiff
Use the query builder for the joblist queries
authorJoas Schilling <nickvergessen@owncloud.com>
Fri, 18 Dec 2015 08:47:54 +0000 (09:47 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Fri, 18 Dec 2015 08:50:23 +0000 (09:50 +0100)
lib/private/backgroundjob/joblist.php
tests/lib/backgroundjob/joblist.php

index 03c9180ddb0c19affdab64001aec0bd0e33918b5..226564e2175b15887ce87271e3a2069a873bc44c 100644 (file)
@@ -28,22 +28,20 @@ use OCP\BackgroundJob\IJobList;
 use OCP\AutoloadNotAllowedException;
 
 class JobList implements IJobList {
-       /**
-        * @var \OCP\IDBConnection
-        */
-       private $conn;
+       /** @var \OCP\IDBConnection */
+       protected $connection;
 
        /**
         * @var \OCP\IConfig $config
         */
-       private $config;
+       protected $config;
 
        /**
-        * @param \OCP\IDBConnection $conn
+        * @param \OCP\IDBConnection $connection
         * @param \OCP\IConfig $config
         */
-       public function __construct($conn, $config) {
-               $this->conn = $conn;
+       public function __construct($connection, $config) {
+               $this->connection = $connection;
                $this->config = $config;
        }
 
@@ -58,12 +56,20 @@ class JobList implements IJobList {
                        } else {
                                $class = $job;
                        }
+
                        $argument = json_encode($argument);
                        if (strlen($argument) > 4000) {
                                throw new \InvalidArgumentException('Background job arguments can\'t exceed 4000 characters (json encoded)');
                        }
-                       $query = $this->conn->prepare('INSERT INTO `*PREFIX*jobs`(`class`, `argument`, `last_run`) VALUES(?, ?, 0)');
-                       $query->execute(array($class, $argument));
+
+                       $query = $this->connection->getQueryBuilder();
+                       $query->insert('jobs')
+                               ->values([
+                                       'class' => $query->createNamedParameter($class),
+                                       'argument' => $query->createNamedParameter($argument),
+                                       'last_run' => $query->createNamedParameter(0, \PDO::PARAM_INT),
+                               ]);
+                       $query->execute();
                }
        }
 
@@ -77,19 +83,25 @@ class JobList implements IJobList {
                } else {
                        $class = $job;
                }
+
+               $query = $this->connection->getQueryBuilder();
+               $query->delete('jobs')
+                       ->where($query->expr()->eq('class', $query->createNamedParameter($class)));
                if (!is_null($argument)) {
                        $argument = json_encode($argument);
-                       $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?');
-                       $query->execute(array($class, $argument));
-               } else {
-                       $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `class` = ?');
-                       $query->execute(array($class));
+                       $query->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument)));
                }
+               $query->execute();
        }
 
+       /**
+        * @param int $id
+        */
        protected function removeById($id) {
-               $query = $this->conn->prepare('DELETE FROM `*PREFIX*jobs` WHERE `id` = ?');
-               $query->execute([$id]);
+               $query = $this->connection->getQueryBuilder();
+               $query->delete('jobs')
+                       ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT)));
+               $query->execute();
        }
 
        /**
@@ -106,9 +118,19 @@ class JobList implements IJobList {
                        $class = $job;
                }
                $argument = json_encode($argument);
-               $query = $this->conn->prepare('SELECT `id` FROM `*PREFIX*jobs` WHERE `class` = ? AND `argument` = ?');
-               $query->execute(array($class, $argument));
-               return (bool)$query->fetch();
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('id')
+                       ->from('jobs')
+                       ->where($query->expr()->eq('class', $query->createNamedParameter($class)))
+                       ->andWhere($query->expr()->eq('argument', $query->createNamedParameter($argument)))
+                       ->setMaxResults(1);
+
+               $result = $query->execute();
+               $row = $result->fetch();
+               $result->closeCursor();
+
+               return (bool) $row;
        }
 
        /**
@@ -117,15 +139,20 @@ class JobList implements IJobList {
         * @return Job[]
         */
        public function getAll() {
-               $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs`');
-               $query->execute();
-               $jobs = array();
-               while ($row = $query->fetch()) {
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')
+                       ->from('jobs');
+               $result = $query->execute();
+
+               $jobs = [];
+               while ($row = $result->fetch()) {
                        $job = $this->buildJob($row);
                        if ($job) {
                                $jobs[] = $job;
                        }
                }
+               $result->closeCursor();
+
                return $jobs;
        }
 
@@ -136,22 +163,39 @@ class JobList implements IJobList {
         */
        public function getNext() {
                $lastId = $this->getLastJob();
-               $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` > ? ORDER BY `id` ASC', 1);
-               $query->execute(array($lastId));
-               if ($row = $query->fetch()) {
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')
+                       ->from('jobs')
+                       ->where($query->expr()->gt('id', $query->createNamedParameter($lastId, \PDO::PARAM_INT)))
+                       ->orderBy('id', 'ASC')
+                       ->setMaxResults(1);
+               $result = $query->execute();
+               $row = $result->fetch();
+               $result->closeCursor();
+
+               if ($row) {
                        $jobId = $row['id'];
                        $job = $this->buildJob($row);
                } else {
                        //begin at the start of the queue
-                       $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` ORDER BY `id` ASC', 1);
-                       $query->execute();
-                       if ($row = $query->fetch()) {
+                       $query = $this->connection->getQueryBuilder();
+                       $query->select('*')
+                               ->from('jobs')
+                               ->orderBy('id', 'ASC')
+                               ->setMaxResults(1);
+                       $result = $query->execute();
+                       $row = $result->fetch();
+                       $result->closeCursor();
+
+                       if ($row) {
                                $jobId = $row['id'];
                                $job = $this->buildJob($row);
                        } else {
                                return null; //empty job list
                        }
                }
+
                if (is_null($job)) {
                        $this->removeById($jobId);
                        return $this->getNext();
@@ -165,9 +209,15 @@ class JobList implements IJobList {
         * @return Job|null
         */
        public function getById($id) {
-               $query = $this->conn->prepare('SELECT `id`, `class`, `last_run`, `argument` FROM `*PREFIX*jobs` WHERE `id` = ?');
-               $query->execute(array($id));
-               if ($row = $query->fetch()) {
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')
+                       ->from('jobs')
+                       ->where($query->expr()->eq('id', $query->createNamedParameter($id, \PDO::PARAM_INT)));
+               $result = $query->execute();
+               $row = $result->fetch();
+               $result->closeCursor();
+
+               if ($row) {
                        return $this->buildJob($row);
                } else {
                        return null;
@@ -225,7 +275,10 @@ class JobList implements IJobList {
         * @param Job $job
         */
        public function setLastRun($job) {
-               $query = $this->conn->prepare('UPDATE `*PREFIX*jobs` SET `last_run` = ? WHERE `id` = ?');
-               $query->execute(array(time(), $job->getId()));
+               $query = $this->connection->getQueryBuilder();
+               $query->update('jobs')
+                       ->set('last_run', $query->createNamedParameter(time(), \PDO::PARAM_INT))
+                       ->where($query->expr()->eq('id', $query->createNamedParameter($job->getId(), \PDO::PARAM_INT)));
+               $query->execute();
        }
 }
index 73b3255c0795ca4acd40e595ecdb756dcf53f2ea..c0796d8253aeeab1cfc9c8c702e54fee912eca86 100644 (file)
@@ -15,26 +15,21 @@ use Test\TestCase;
  * Class JobList
  *
  * @group DB
- *
  * @package Test\BackgroundJob
  */
 class JobList extends TestCase {
-       /**
-        * @var \OC\BackgroundJob\JobList
-        */
+       /** @var \OC\BackgroundJob\JobList */
        protected $instance;
 
-       /**
-        * @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject $config
-        */
+       /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */
        protected $config;
 
        protected function setUp() {
                parent::setUp();
 
-               $conn = \OC::$server->getDatabaseConnection();
+               $connection = \OC::$server->getDatabaseConnection();
                $this->config = $this->getMock('\OCP\IConfig');
-               $this->instance = new \OC\BackgroundJob\JobList($conn, $this->config);
+               $this->instance = new \OC\BackgroundJob\JobList($connection, $this->config);
        }
 
        protected function getAllSorted() {