Bug #82233 ยป FileIndexRepository_patch.patch
FileIndexRepository.php 2017-08-28 16:44:23.837613533 +0530 | ||
---|---|---|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||
use TYPO3\CMS\Extbase\SignalSlot\Dispatcher;
|
||
use TYPO3\CMS\Core\Database\Platform\PlatformInformation;
|
||
/**
|
||
* Repository Class as an abstraction layer to sys_file
|
||
... | ... | |
*/
|
||
public function findInStorageAndNotInUidList(ResourceStorage $storage, array $uidList)
|
||
{
|
||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
|
||
$queryBuilder
|
||
->select(...$this->fields)
|
||
->from($this->table)
|
||
->where(
|
||
$queryBuilder->expr()->eq(
|
||
'storage',
|
||
$queryBuilder->createNamedParameter($storage->getUid(), \PDO::PARAM_INT)
|
||
)
|
||
);
|
||
$rows = [];
|
||
$connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->table);
|
||
$maxBindParameters = PlatformInformation::getMaxBindParameters($connection->getDatabasePlatform());
|
||
if (!empty($uidList)) {
|
||
$queryBuilder->andWhere(
|
||
foreach (array_chunk($uidList, $maxBindParameters - 10, true) as $chunk) {
|
||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
|
||
$queryBuilder
|
||
->select(...$this->fields)
|
||
->from($this->table)
|
||
->where(
|
||
$queryBuilder->expr()->eq(
|
||
'storage',
|
||
$queryBuilder->createNamedParameter($storage->getUid(), \PDO::PARAM_INT)
|
||
)
|
||
);
|
||
if (empty($chunk)) {
|
||
continue;
|
||
}
|
||
$queryBuilder->andWhere(
|
||
$queryBuilder->expr()->notIn(
|
||
'uid',
|
||
$queryBuilder->createNamedParameter($uidList, Connection::PARAM_INT_ARRAY)
|
||
$queryBuilder->createNamedParameter($chunk, Connection::PARAM_INT_ARRAY)
|
||
)
|
||
);
|
||
);
|
||
$rowsChunks = $queryBuilder->execute()->fetchAll();
|
||
foreach ($rowsChunks as $rowChunk) {
|
||
if (!in_array($rowChunk['uid'], $uidList)) {
|
||
$rows[$rowChunk['uid']] = $rowChunk;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else{
|
||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
|
||
$queryBuilder
|
||
->select(...$this->fields)
|
||
->from($this->table)
|
||
->where(
|
||
$queryBuilder->expr()->eq(
|
||
'storage',
|
||
$queryBuilder->createNamedParameter($storage->getUid(), \PDO::PARAM_INT)
|
||
)
|
||
);
|
||
$rows = $queryBuilder->execute()->fetchAll();
|
||
}
|
||
$rows = $queryBuilder->execute()->fetchAll();
|
||
return $rows;
|
||
}
|
||