use Doctrine\DBAL\Driver\Statement;
use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IGroupManager;
* @return int
*/
private function getTotal(): int {
- $sql = 'SELECT COUNT(*) AS `total`
- FROM `*PREFIX*share`
- WHERE `id` IN (
- SELECT `s1`.`id`
- FROM (
- SELECT *
- FROM `*PREFIX*share`
- WHERE `parent` IS NOT NULL
- AND `share_type` = 3
- ) AS s1
- JOIN `*PREFIX*share` AS s2
- ON `s1`.`parent` = `s2`.`id`
- WHERE (`s2`.`share_type` = 1 OR `s2`.`share_type` = 2)
- AND `s1`.`item_source` = `s2`.`item_source`
- )';
- $cursor = $this->connection->executeQuery($sql);
- $data = $cursor->fetchAll();
- $total = (int)$data[0]['total'];
- $cursor->closeCursor();
-
- return $total;
+ $subSubQuery = $this->connection->getQueryBuilder();
+ $subSubQuery->select('*')
+ ->from('share')
+ ->where($subSubQuery->expr()->isNotNull('parent'))
+ ->andWhere($subSubQuery->expr()->eq('share_type', $subSubQuery->expr()->literal(3, IQueryBuilder::PARAM_INT)));
+
+ $subQuery = $this->connection->getQueryBuilder();
+ $subQuery->select('s1.id')
+ ->from($subQuery->createFunction('(' . $subSubQuery->getSQL() . ')'), 's1')
+ ->join(
+ 's1', 'share', 's2',
+ $subQuery->expr()->eq('s1.parent', 's2.id')
+ )
+ ->where($subQuery->expr()->orX(
+ $subQuery->expr()->eq('s2.share_type', $subQuery->expr()->literal(1, IQueryBuilder::PARAM_INT)),
+ $subQuery->expr()->eq('s2.share_type', $subQuery->expr()->literal(2, IQueryBuilder::PARAM_INT))
+ ))
+ ->andWhere($subQuery->expr()->eq('s1.item_source', 's2.item_source'));
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select($query->func()->count('*', 'total'))
+ ->from('share')
+ ->where($query->expr()->in('id', $query->createFunction('(' . $subQuery->getSQL() . ')')));
+
+ $result = $query->execute();
+ $data = $result->fetch();
+ $result->closeCursor();
+
+ return (int) $data['total'];
}
/**
* @return \Doctrine\DBAL\Driver\Statement
*/
private function getShares(): Statement {
- $sql = 'SELECT `s1`.`id`, `s1`.`uid_owner`, `s1`.`uid_initiator`
- FROM (
- SELECT *
- FROM `*PREFIX*share`
- WHERE `parent` IS NOT NULL
- AND `share_type` = 3
- ) AS s1
- JOIN `*PREFIX*share` AS s2
- ON `s1`.`parent` = `s2`.`id`
- WHERE (`s2`.`share_type` = 1 OR `s2`.`share_type` = 2)
- AND `s1`.`item_source` = `s2`.`item_source`';
- $cursor = $this->connection->executeQuery($sql);
- return $cursor;
+ $subQuery = $this->connection->getQueryBuilder();
+ $subQuery->select('*')
+ ->from('share')
+ ->where($subQuery->expr()->isNotNull('parent'))
+ ->andWhere($subQuery->expr()->eq('share_type', $subQuery->expr()->literal(3, IQueryBuilder::PARAM_INT)));
+
+ $query = $this->connection->getQueryBuilder();
+ $query->select('s1.id', 's1.uid_owner', 's1.uid_initiator')
+ ->from($query->createFunction('(' . $subQuery->getSQL() . ')'), 's1')
+ ->join(
+ 's1', 'share', 's2',
+ $query->expr()->eq('s1.parent', 's2.id')
+ )
+ ->where($query->expr()->orX(
+ $query->expr()->eq('s2.share_type', $query->expr()->literal(1, IQueryBuilder::PARAM_INT)),
+ $query->expr()->eq('s2.share_type', $query->expr()->literal(2, IQueryBuilder::PARAM_INT))
+ ))
+ ->andWhere($query->expr()->eq('s1.item_source', 's2.item_source'));
+ return $query->execute();
}
/**