Skip to content

Commit

Permalink
feature #98 Total count JobExecution matched by query
Browse files Browse the repository at this point in the history
  • Loading branch information
guich25 committed Jan 11, 2024
1 parent f6f6826 commit f3ea53b
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 25 deletions.
71 changes: 46 additions & 25 deletions src/batch-doctrine-dbal/src/DoctrineDBALJobExecutionStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver\Result;
use Doctrine\DBAL\Exception as DBALException;
use Doctrine\DBAL\Query\QueryBuilder;
use Doctrine\DBAL\Schema\Comparator;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Types\Types;
Expand Down Expand Up @@ -147,34 +148,10 @@ public function list(string $jobName): iterable

public function query(Query $query): iterable
{
$queryParameters = [];
$queryTypes = [];

$qb = $this->connection->createQueryBuilder();
$qb->select('*')
->from($this->table);

$names = $query->jobs();
if (\count($names) > 0) {
$qb->andWhere($qb->expr()->in('job_name', ':jobNames'));
$queryParameters['jobNames'] = $names;
$queryTypes['jobNames'] = Connection::PARAM_STR_ARRAY;
}

$ids = $query->ids();
if (\count($ids) > 0) {
$qb->andWhere($qb->expr()->in('id', ':ids'));
$queryParameters['ids'] = $ids;
$queryTypes['ids'] = Connection::PARAM_STR_ARRAY;
}

$statuses = $query->statuses();
if (\count($statuses) > 0) {
$qb->andWhere($qb->expr()->in('status', ':statuses'));
$queryParameters['statuses'] = $statuses;
$queryTypes['statuses'] = Connection::PARAM_INT_ARRAY;
}

switch ($query->sort()) {
case Query::SORT_BY_START_ASC:
$qb->orderBy('start_time', 'asc');
Expand All @@ -193,7 +170,19 @@ public function query(Query $query): iterable
$qb->setMaxResults($query->limit());
$qb->setFirstResult($query->offset());

yield from $this->queryList($qb->getSQL(), $queryParameters, $queryTypes);
yield from $this->queryList($qb->getSQL(), ...$this->addWheres($query, $qb));
}

public function count(Query $query): int
{
$qb = $this->connection->createQueryBuilder();
$qb->select('count(*)')
->from($this->table);

/** @var int $result */
$result = $this->connection->executeQuery($qb->getSQL(), ...$this->addWheres($query, $qb))->fetchOne()

return $result;

Check failure on line 185 in src/batch-doctrine-dbal/src/DoctrineDBALJobExecutionStorage.php

View workflow job for this annotation

GitHub Actions / PhpStan

Syntax error, unexpected T_RETURN on line 185
}

private function getSchema(): Schema
Expand Down Expand Up @@ -325,4 +314,36 @@ private function getNormalizer(): JobExecutionRowNormalizer

return $this->normalizer;
}

/**
* @return array<int, array<string, array<int|string>|int>>
*/
private function addWheres(Query $query, QueryBuilder $qb): array
{
$queryParameters = [];
$queryTypes = [];

$names = $query->jobs();
if (\count($names) > 0) {
$qb->andWhere($qb->expr()->in('job_name', ':jobNames'));
$queryParameters['jobNames'] = $names;
$queryTypes['jobNames'] = Connection::PARAM_STR_ARRAY;
}

$ids = $query->ids();
if (\count($ids) > 0) {
$qb->andWhere($qb->expr()->in('id', ':ids'));
$queryParameters['ids'] = $ids;
$queryTypes['ids'] = Connection::PARAM_STR_ARRAY;
}

$statuses = $query->statuses();
if (\count($statuses) > 0) {
$qb->andWhere($qb->expr()->in('status', ':statuses'));
$queryParameters['statuses'] = $statuses;
$queryTypes['statuses'] = Connection::PARAM_INT_ARRAY;
}

return [$queryParameters, $queryTypes];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ public function testQuery(QueryBuilder $queryBuilder, array $expectedCouples): v
$this->loadFixtures($storage);

self::assertExecutions($expectedCouples, $storage->query($queryBuilder->getQuery()));
self::assertSame(\count($expectedCouples), $storage->count($queryBuilder->getQuery()));
}

public function queries(): Generator
Expand Down
8 changes: 8 additions & 0 deletions src/batch/src/Storage/FilesystemJobExecutionStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,14 @@ public function query(Query $query): iterable
return \array_slice($candidates, $query->offset(), $query->limit());
}

public function count(Query $query): int
{
/** @var JobExecution[] $result */
$result = $this->query($query);

return \count($result);
}

private function buildFilePath(string $jobName, string $executionId): string
{
return \implode(DIRECTORY_SEPARATOR, [$this->directory, $jobName, $executionId]) .
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ interface QueryableJobExecutionStorageInterface extends ListableJobExecutionStor
* @return iterable|JobExecution[]
*/
public function query(Query $query): iterable;

/**
* Execute query against stored job executions, and return count result.
*/
public function count(Query $query): int;
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ public function testQueryWithProvider(QueryBuilder $query, array $expectedCouple
);

self::assertExecutions($expectedCouples, $storage->query($query->getQuery()));
self::assertEquals(\count($expectedCouples), $storage->count($query->getQuery()));
}

public function query(): \Generator
Expand Down

0 comments on commit f3ea53b

Please sign in to comment.