Skip to content

Commit 17cebb3

Browse files
nickvergessenrullzer
authored andcommitted
Use the querybuilder for the queries
Signed-off-by: Joas Schilling <coding@schilljs.com>
1 parent 7884668 commit 17cebb3

File tree

1 file changed

+49
-34
lines changed

1 file changed

+49
-34
lines changed

lib/private/Repair/RemoveLinkShares.php

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
use Doctrine\DBAL\Driver\Statement;
2828
use OCP\AppFramework\Utility\ITimeFactory;
29+
use OCP\DB\QueryBuilder\IQueryBuilder;
2930
use OCP\IConfig;
3031
use OCP\IDBConnection;
3132
use OCP\IGroupManager;
@@ -98,27 +99,35 @@ private function deleteShare(int $id) {
9899
* @return int
99100
*/
100101
private function getTotal(): int {
101-
$sql = 'SELECT COUNT(*) AS `total`
102-
FROM `*PREFIX*share`
103-
WHERE `id` IN (
104-
SELECT `s1`.`id`
105-
FROM (
106-
SELECT *
107-
FROM `*PREFIX*share`
108-
WHERE `parent` IS NOT NULL
109-
AND `share_type` = 3
110-
) AS s1
111-
JOIN `*PREFIX*share` AS s2
112-
ON `s1`.`parent` = `s2`.`id`
113-
WHERE (`s2`.`share_type` = 1 OR `s2`.`share_type` = 2)
114-
AND `s1`.`item_source` = `s2`.`item_source`
115-
)';
116-
$cursor = $this->connection->executeQuery($sql);
117-
$data = $cursor->fetchAll();
118-
$total = (int)$data[0]['total'];
119-
$cursor->closeCursor();
120-
121-
return $total;
102+
$subSubQuery = $this->connection->getQueryBuilder();
103+
$subSubQuery->select('*')
104+
->from('share')
105+
->where($subSubQuery->expr()->isNotNull('parent'))
106+
->andWhere($subSubQuery->expr()->eq('share_type', $subSubQuery->expr()->literal(3, IQueryBuilder::PARAM_INT)));
107+
108+
$subQuery = $this->connection->getQueryBuilder();
109+
$subQuery->select('s1.id')
110+
->from($subQuery->createFunction('(' . $subSubQuery->getSQL() . ')'), 's1')
111+
->join(
112+
's1', 'share', 's2',
113+
$subQuery->expr()->eq('s1.parent', 's2.id')
114+
)
115+
->where($subQuery->expr()->orX(
116+
$subQuery->expr()->eq('s2.share_type', $subQuery->expr()->literal(1, IQueryBuilder::PARAM_INT)),
117+
$subQuery->expr()->eq('s2.share_type', $subQuery->expr()->literal(2, IQueryBuilder::PARAM_INT))
118+
))
119+
->andWhere($subQuery->expr()->eq('s1.item_source', 's2.item_source'));
120+
121+
$query = $this->connection->getQueryBuilder();
122+
$query->select($query->func()->count('*', 'total'))
123+
->from('share')
124+
->where($query->expr()->in('id', $query->createFunction('(' . $subQuery->getSQL() . ')')));
125+
126+
$result = $query->execute();
127+
$data = $result->fetch();
128+
$result->closeCursor();
129+
130+
return (int) $data['total'];
122131
}
123132

124133
/**
@@ -127,19 +136,25 @@ private function getTotal(): int {
127136
* @return \Doctrine\DBAL\Driver\Statement
128137
*/
129138
private function getShares(): Statement {
130-
$sql = 'SELECT `s1`.`id`, `s1`.`uid_owner`, `s1`.`uid_initiator`
131-
FROM (
132-
SELECT *
133-
FROM `*PREFIX*share`
134-
WHERE `parent` IS NOT NULL
135-
AND `share_type` = 3
136-
) AS s1
137-
JOIN `*PREFIX*share` AS s2
138-
ON `s1`.`parent` = `s2`.`id`
139-
WHERE (`s2`.`share_type` = 1 OR `s2`.`share_type` = 2)
140-
AND `s1`.`item_source` = `s2`.`item_source`';
141-
$cursor = $this->connection->executeQuery($sql);
142-
return $cursor;
139+
$subQuery = $this->connection->getQueryBuilder();
140+
$subQuery->select('*')
141+
->from('share')
142+
->where($subQuery->expr()->isNotNull('parent'))
143+
->andWhere($subQuery->expr()->eq('share_type', $subQuery->expr()->literal(3, IQueryBuilder::PARAM_INT)));
144+
145+
$query = $this->connection->getQueryBuilder();
146+
$query->select('s1.id', 's1.uid_owner', 's1.uid_initiator')
147+
->from($query->createFunction('(' . $subQuery->getSQL() . ')'), 's1')
148+
->join(
149+
's1', 'share', 's2',
150+
$query->expr()->eq('s1.parent', 's2.id')
151+
)
152+
->where($query->expr()->orX(
153+
$query->expr()->eq('s2.share_type', $query->expr()->literal(1, IQueryBuilder::PARAM_INT)),
154+
$query->expr()->eq('s2.share_type', $query->expr()->literal(2, IQueryBuilder::PARAM_INT))
155+
))
156+
->andWhere($query->expr()->eq('s1.item_source', 's2.item_source'));
157+
return $query->execute();
143158
}
144159

145160
/**

0 commit comments

Comments
 (0)