Example #1
0
 /**
  * {@inheritdoc}
  */
 public function countFailedJobs()
 {
     if ($queue_id = $this->getQueueId()) {
         return (int) $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `' . MySqlQueue::FAILED_JOBS_TABLE_NAME . '` WHERE `batch_id` = ?', $queue_id);
     } else {
         throw new RuntimeException("Can't get number of jobs from an unsaved batch");
     }
 }
Example #2
0
 /**
  * Return number of records of the given type that match the given conditions.
  *
  * @param  string            $type
  * @param  array|string|null $conditions
  * @return int
  */
 public function count($type, $conditions = null)
 {
     $this->requireRegisteredType($type);
     if ($conditions = $this->connection->prepareConditions($conditions)) {
         return $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM ' . $this->getTypeTable($type, true) . " WHERE {$conditions}");
     } else {
         return $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM ' . $this->getTypeTable($type, true));
     }
 }
Example #3
0
 /**
  * Return number of records of the given type that match the given conditions.
  *
  * @param  string            $type
  * @param  array|string|null $conditions
  * @return int
  */
 public function count($type, $conditions = null)
 {
     if ($this->isTypeRegistered($type)) {
         if ($conditions = $this->connection->prepareConditions($conditions)) {
             return $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM ' . $this->getTypeTable($type, true) . " WHERE {$conditions}");
         } else {
             return $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM ' . $this->getTypeTable($type, true));
         }
     }
     throw new InvalidArgumentException("Type '{$type}' is not registered");
 }
Example #4
0
 /**
  * Return number of records that match the given criteria.
  *
  * @return int
  */
 public function count()
 {
     $table_name = $this->getEscapedTableName();
     $sql = "SELECT COUNT({$table_name}.`id`) AS 'row_count' FROM {$table_name}";
     if ($this->join) {
         $sql .= " {$this->join}";
     }
     if ($where = $this->getWhere()) {
         $sql .= " WHERE {$where}";
     }
     return $this->connection->executeFirstCell($sql);
 }
 /**
  * {@inheritdoc}
  */
 public function uniqueWhere($field_name, $where, ...$context)
 {
     if (empty($field_name)) {
         throw new InvalidArgumentException("Value '{$field_name}' is not a valid field name");
     }
     if (empty($context) && (!array_key_exists($field_name, $this->field_values) || $this->field_values[$field_name] === null)) {
         return true;
         // NULL is always good for single column keys because MySQL does not check NULL for uniqueness
     }
     $field_names = [$field_name];
     if (count($context)) {
         $field_names = array_merge($field_names, $context);
     }
     // Check if we have existsing columns
     foreach ($field_names as $v) {
         if (!array_key_exists($v, $this->field_values)) {
             throw new InvalidArgumentException("Field '{$v}' is not known");
         }
     }
     $table_name = $this->connection->escapeTableName($this->table_name);
     $conditions = [];
     if ($where) {
         $conditions[] = $this->connection->prepareConditions($where);
     }
     foreach ($field_names as $v) {
         $escaped_field_name = $this->connection->escapeFieldName($v);
         if ($this->field_values[$v] === null) {
             $conditions[] = "{$escaped_field_name} IS NULL";
         } else {
             $conditions[] = $this->connection->prepare("{$escaped_field_name} = ?", $this->field_values[$v]);
         }
     }
     $conditions = implode(' AND ', $conditions);
     if (empty($this->object_id)) {
         $sql = sprintf("SELECT COUNT(`id`) AS 'row_count' FROM {$table_name} WHERE {$conditions}");
     } else {
         $sql = $this->connection->prepare("SELECT COUNT(`id`) AS 'row_count' FROM {$table_name} WHERE ({$conditions}) AND (`id` != ?)", $this->old_object_id ? $this->old_object_id : $this->object_id);
     }
     if ($this->connection->executeFirstCell($sql) > 0) {
         if (empty($context)) {
             $this->addFieldError($field_name, "Value of '{$field_name}' needs to be unique");
         } else {
             $this->addFieldError($field_name, "Value of '{$field_name}' needs to be unique in context of " . implode(', ', array_map(function ($field_name) {
                 return "'{$field_name}'";
             }, $context)));
         }
         return false;
     }
     return true;
 }
Example #6
0
 /**
  * {@inheritdoc}
  */
 public function reportBackgroundProcess(JobInterface $job, $process_id)
 {
     if ($job->getQueue() && get_class($job->getQueue()) == get_class($this)) {
         if ($job_id = $job->getQueueId()) {
             if (is_int($process_id) && $process_id > 0) {
                 if ($this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `' . self::JOBS_TABLE_NAME . '` WHERE `id` = ? AND `reserved_at` IS NOT NULL', $job_id)) {
                     $this->connection->execute('UPDATE `' . self::JOBS_TABLE_NAME . '` SET `process_id` = ? WHERE `id` = ?', $process_id, $job_id);
                 } else {
                     throw new InvalidArgumentException('Job not found or not running');
                 }
             } else {
                 throw new InvalidArgumentException('Process ID is required (a non-negative integer is expected)');
             }
         } else {
             throw new InvalidArgumentException('Only enqueued jobs can report background processes');
         }
     } else {
         throw new InvalidArgumentException('Job does not belong to this queue');
     }
 }
Example #7
0
 /**
  * Check number of records in failed jobs queue table.
  *
  * @param int $expected
  */
 protected function assertFailedRecordsCount($expected)
 {
     $this->assertSame($expected, $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM `' . MySqlQueue::FAILED_JOBS_TABLE_NAME . '`'));
 }
Example #8
0
 /**
  * @param  PromiseInterface $promise
  * @return bool
  */
 public function isSettled(PromiseInterface $promise)
 {
     return (bool) $this->connection->executeFirstCell('SELECT COUNT(`id`) AS "row_count" FROM ' . self::PROMISES_TABLE_NAME . ' WHERE `signature` = ? AND `settlement` IS NOT NULL AND `settled_at` IS NOT NULL', $promise->getSignature());
 }