Skip to content

Commit

Permalink
Fix SUM and AVG queries for postgres to return integers (#727)
Browse files Browse the repository at this point in the history
  • Loading branch information
mooxbot committed Jan 21, 2025
1 parent a83f198 commit 6dbdfaa
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions src/Resources/JobsResource/Widgets/JobStatsOverview.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ protected function getCards(): array
{
$aggregationColumns = [
DB::raw('COUNT(*) as count'),
DB::raw('SUM(finished_at - started_at) as total_time_elapsed'),
DB::raw('AVG(finished_at - started_at) as average_time_elapsed'),
DB::raw($this->dbSum('finished_at', 'started_at').' as total_time_elapsed'),
DB::raw($this->dbAvg('finished_at', 'started_at').' as average_time_elapsed'),
];

$aggregatedInfo = JobManager::query()
Expand All @@ -44,4 +44,23 @@ protected function getCards(): array
Stat::make(__('jobs::translations.average_time'), $averageTime),
];
}

private function dbAvg(string $col1, string $col2): string
{
return 'AVG('.$this->dbColumnAsInteger($col1).' - '.$this->dbColumnAsInteger($col2).')'.(DB::connection()->getConfig()['driver'] === 'pgsql' ? '::int' : '');
}

private function dbSum(string $col1, string $col2): string
{
return 'SUM('.$this->dbColumnAsInteger($col1).' - '.$this->dbColumnAsInteger($col2).')'.(DB::connection()->getConfig()['driver'] === 'pgsql' ? '::int' : '');
}

private function dbColumnAsInteger(string $colName): string
{
if (DB::connection()->getConfig()['driver'] === 'pgsql') {
return 'cast(extract(epoch from '.$colName.') as integer)';
}

return $colName;
}
}

0 comments on commit 6dbdfaa

Please sign in to comment.