73 lines
1.7 KiB
PHP
73 lines
1.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2019 F7cloud GmbH and F7cloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
namespace OCA\Text\Db;
|
|
|
|
use Generator;
|
|
use OCP\AppFramework\Db\DoesNotExistException;
|
|
use OCP\AppFramework\Db\QBMapper;
|
|
use OCP\DB\QueryBuilder\IQueryBuilder;
|
|
use OCP\IDBConnection;
|
|
|
|
/** @extends QBMapper<Document> */
|
|
class DocumentMapper extends QBMapper {
|
|
public function __construct(IDBConnection $db) {
|
|
parent::__construct($db, 'text_documents', Document::class);
|
|
}
|
|
|
|
/**
|
|
* @param $documentId
|
|
* @return Document
|
|
* @throws DoesNotExistException
|
|
*/
|
|
public function find(int $documentId): Document {
|
|
/* @var $qb IQueryBuilder */
|
|
$qb = $this->db->getQueryBuilder();
|
|
$result = $qb->select('*')
|
|
->from($this->getTableName())
|
|
->where($qb->expr()->eq('id', $qb->createNamedParameter($documentId)))
|
|
->executeQuery();
|
|
|
|
$data = $result->fetch();
|
|
$result->closeCursor();
|
|
if ($data === false) {
|
|
throw new DoesNotExistException('Document doesn\'t exist');
|
|
}
|
|
return Document::fromRow($data);
|
|
}
|
|
|
|
public function findAll(): Generator {
|
|
$qb = $this->db->getQueryBuilder();
|
|
$result = $qb->select('*')
|
|
->from($this->getTableName())
|
|
->executeQuery();
|
|
try {
|
|
while ($row = $result->fetch()) {
|
|
yield $this->mapRowToEntity($row);
|
|
}
|
|
} finally {
|
|
$result->closeCursor();
|
|
}
|
|
}
|
|
|
|
public function countAll(): int {
|
|
$qb = $this->db->getQueryBuilder();
|
|
$qb->select($qb->func()->count('id'))
|
|
->from($this->getTableName());
|
|
$result = $qb->executeQuery();
|
|
$count = (int)$result->fetchOne();
|
|
$result->closeCursor();
|
|
return $count;
|
|
}
|
|
|
|
public function clearAll(): void {
|
|
$qb = $this->db->getQueryBuilder();
|
|
$qb->delete($this->getTableName())
|
|
->executeStatement();
|
|
}
|
|
}
|