/** * {@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"); } }
/** * 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)); } }
/** * 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"); }
/** * 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; }
/** * {@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'); } }
/** * 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 . '`')); }
/** * @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()); }