/**
* Process ParsedQueryData from DELETE query and deletes entity/entities data from Storage.
* Source parsed query does not contain any special Sql functions (e.g. NOW)
*
* @param ParsedQueryData $parsedQueryData
*/
private function processDeleteQuery($parsedQueryData)
{
$entityInfo = $this->dbSchemaInfo->getEntityInfo($parsedQueryData->entityName);
if (!$entityInfo || !$entityInfo->usesGeneratedVpids) {
foreach ($parsedQueryData->ids as $ids) {
$where = [];
foreach ($parsedQueryData->idColumnsNames as $key => $idColumnName) {
$where[$idColumnName] = $ids[$key];
$this->vpidRepository->deleteId($parsedQueryData->entityName, $ids[$key]);
}
if (!$entityInfo) {
$referenceDetails = $this->dbSchemaInfo->getMnReferenceDetails($parsedQueryData->table);
if (!$referenceDetails) {
return;
}
$this->deleteReference($referenceDetails, $where);
} else {
$this->mirror->delete($parsedQueryData->entityName, $where);
}
}
return;
}
foreach ($parsedQueryData->ids as $ids) {
$id = $ids[0];
// Composite primary key is not yet supported.
$where['vp_id'] = $this->vpidRepository->getVpidForEntity($parsedQueryData->entityName, $id);
if (!$where['vp_id']) {
continue;
// already deleted - deleting postmeta is sometimes called twice
}
if ($this->dbSchemaInfo->isChildEntity($parsedQueryData->entityName)) {
$parentVpReference = "vp_" . $entityInfo->parentReference;
$where[$parentVpReference] = $this->fillParentId($parsedQueryData->entityName, $entityInfo, $id);
}
$this->vpidRepository->deleteId($parsedQueryData->entityName, $id);
$this->mirror->delete($parsedQueryData->entityName, $where);
}
}