From df65737f949ce0f5c2359fbf3d717868b5b3245e Mon Sep 17 00:00:00 2001 From: Fred Cox Date: Thu, 31 Oct 2019 10:03:50 +0200 Subject: [PATCH] WIP: use dbal instead of orm --- .../Command/DoctrineDelayRunnerCommand.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php b/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php index d29f13c..e190637 100644 --- a/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php +++ b/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php @@ -49,11 +49,27 @@ protected function getJobs(): ?JobBatch { $now = new Carbon(null, new \DateTimeZone('UTC')); $em = $this->getEntityManager(); + $connection = $em->getConnection(); try { $em->getConnection()->beginTransaction(); $repo = $em->getRepository(DoctrineDelayJob::class); - $orderDir = $this->reverse ? 'DESC' : 'ASC'; + $query = $repo->createQueryBuilder('job') + ->andWhere('job.time < :now') + ->setParameter('now', $now, Type::DATETIME) + ->orderBy('job.time', $this->reverse ? 'DESC' : 'ASC') + ->setMaxResults($this->batchSize) + ->getQuery() + ->getResult() + ; + + $result = $connection->executeQuery( + $query->getSQL().' '.$connection->getDatabasePlatform()->getWriteLockSQL(), + $query->getParameters()->toArray() + )->fetch(); + + + $orderDir = ; $em->getConnection()->executeUpdate( "UPDATE DoctrineDelayJob job SET job.processing = TRUE WHERE job.time < :now ORDER BY job.time {$orderDir} LIMIT :limit",