Selaa lähdekoodia

Use the querybuilder for the queries

Signed-off-by: Joas Schilling <coding@schilljs.com>
tags/v17.0.0beta1
Joas Schilling 5 vuotta sitten
vanhempi
commit
fb396fe436
No account linked to committer's email address
1 muutettua tiedostoa jossa 49 lisäystä ja 34 poistoa
  1. 49
    34
      lib/private/Repair/RemoveLinkShares.php

+ 49
- 34
lib/private/Repair/RemoveLinkShares.php Näytä tiedosto

@@ -26,6 +26,7 @@ namespace OC\Repair;

use Doctrine\DBAL\Driver\Statement;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IGroupManager;
@@ -98,27 +99,35 @@ class RemoveLinkShares implements IRepairStep {
* @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'];
}

/**
@@ -127,19 +136,25 @@ class RemoveLinkShares implements IRepairStep {
* @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();
}

/**

Loading…
Peruuta
Tallenna