. */ namespace SP\Infrastructure\Database; use Aura\SqlQuery\Common\Select; use Aura\SqlQuery\QueryInterface; use SP\Core\Exceptions\QueryException; use SP\Domain\Common\Adapters\SimpleModel; use function SP\__u; /** * Class QueryData * * @package SP\Storage */ final class QueryData { protected array $params = []; protected QueryInterface $query; protected ?string $mapClassName = SimpleModel::class; protected bool $useKeyPair = false; protected ?string $select = null; protected ?string $from = null; protected ?string $where = null; protected ?string $groupBy = null; protected ?string $order = null; protected ?string $limit = null; protected ?string $onErrorMessage = null; public function __construct(QueryInterface $query) { $this->query = $query; } public static function build(QueryInterface $query): QueryData { return new self($query); } public function getQuery(): QueryInterface { return $this->query; } public function getMapClassName(): ?string { return $this->mapClassName; } public function setMapClassName(string $mapClassName): QueryData { $this->mapClassName = $mapClassName; return $this; } public function isUseKeyPair(): bool { return $this->useKeyPair; } public function addParams(array $params): void { $this->params = array_merge($this->params, $params); } /** * @throws \SP\Core\Exceptions\QueryException */ public function getQueryCount(): QueryInterface { if ($this->query instanceof Select) { $countQuery = (clone $this->query) ->resetFlags() ->resetCols() ->resetOrderBy() ->resetGroupBy() ->resetHaving() ->page(0); $countQuery->cols(['COUNT(*)']); return $countQuery; } throw new QueryException(__u('Invalid query type for count')); } public function getOnErrorMessage(): string { return $this->onErrorMessage ?: __u('Error while querying'); } public function setOnErrorMessage(string $onErrorMessage): QueryData { $this->onErrorMessage = $onErrorMessage; return $this; } }