You are here

public function Database::enqueueJobs in Advanced Queue 8

Enqueues the given jobs.

Each job will be modified with the assigned queue ID, job ID, and relevant timestamps.

Parameters

\Drupal\advancedqueue\Job[] $jobs: The jobs.

int $delay: The time, in seconds, after which the jobs will become available to consumers. Defaults to 0, indicating no delay.

Overrides BackendInterface::enqueueJobs

1 call to Database::enqueueJobs()
Database::enqueueJob in src/Plugin/AdvancedQueue/Backend/Database.php
Enqueues the given job.

File

src/Plugin/AdvancedQueue/Backend/Database.php, line 122

Class

Database
Provides the database queue backend.

Namespace

Drupal\advancedqueue\Plugin\AdvancedQueue\Backend

Code

public function enqueueJobs(array $jobs, $delay = 0) {
  if (count($jobs) > 1) {

    // Make the inserts atomic, and improve performance on certain engines.
    $this->connection
      ->startTransaction();
  }

  /** @var \Drupal\advancedqueue\Job $job */
  foreach ($jobs as $job) {
    $job
      ->setQueueId($this->queueId);
    $job
      ->setState(Job::STATE_QUEUED);
    if (!$job
      ->getAvailableTime()) {
      $job
        ->setAvailableTime($this->time
        ->getCurrentTime() + $delay);
    }
    $fields = $job
      ->toArray();
    unset($fields['id']);
    $fields['payload'] = json_encode($fields['payload']);

    // InsertQuery supports inserting multiple rows at once, which is faster,
    // but that doesn't give us the inserted job IDs.
    $query = $this->connection
      ->insert('advancedqueue')
      ->fields($fields);
    $job_id = $query
      ->execute();
    $job
      ->setId($job_id);
  }
}