function fetch_associated_data_for_tasks($db, &$tasks) { $task_ids = array(); $task_by_id = array(); foreach ($tasks as &$task) { array_push($task_ids, $task['id']); $task_by_id[$task['id']] =& $task; } $bugs = $db->query_and_fetch_all('SELECT bug_id AS "id", bug_task AS "task", bug_tracker AS "bugTracker", bug_number AS "number" FROM bugs WHERE bug_task = ANY ($1)', array('{' . implode(', ', $task_ids) . '}')); if (!is_array($bugs)) { exit_with_error('FailedToFetchBugs'); } foreach ($bugs as $bug) { $associated_task =& $task_by_id[$bug['task']]; array_push($associated_task['bugs'], $bug['id']); } $commit_log_fetcher = new CommitLogFetcher($db); $commits = $commit_log_fetcher->fetch_for_tasks($task_ids, $task_by_id); if (!is_array($commits)) { exit_with_error('FailedToFetchCommits'); } $task_build_counts = $db->query_and_fetch_all('SELECT testgroup_task AS "task", count(testgroup_id) as "total", sum(case when request_status = \'failed\' or request_status = \'completed\' or request_status = \'canceled\' then 1 else 0 end) as "finished" FROM analysis_test_groups, build_requests WHERE request_group = testgroup_id AND testgroup_task = ANY($1) GROUP BY testgroup_task', array('{' . implode(', ', $task_ids) . '}')); if (!is_array($task_build_counts)) { exit_with_error('FailedToFetchTestGroups'); } foreach ($task_build_counts as $build_count) { $task =& $task_by_id[$build_count['task']]; $task['buildRequestCount'] = $build_count['total']; $task['finishedBuildRequestCount'] = $build_count['finished']; $task['category'] = determine_category($task); } return array('analysisTasks' => $tasks, 'bugs' => $bugs, 'commits' => $commits); }