Before indexing event is saved, Magento 1 tries to find an existing event for a particular entity in Mage_Index_Model_Resource_Event::_beforeSave
:
protected function _beforeSave(Mage_Core_Model_Abstract $object)
{
/**
* Check if event already exist and merge previous data
*/
if (!$object->getId()) {
$select = $this->_getReadAdapter()->select()
->from($this->getMainTable())
->where('type=?', $object->getType())
->where('entity=?', $object->getEntity());
if ($object->hasEntityPk()) {
$select->where('entity_pk=?', $object->getEntityPk());
}
$data = $this->_getWriteAdapter()->fetchRow($select);
if ($data) {
$object->mergePreviousData($data);
}
}
$object->cleanNewData();
return parent::_beforeSave($object);
}
Also, method Mage_Index_Model_Event::mergePreviousData
is called, which keeps the old event data and merges it with the current data.
I have a couple of related questions:
- Why is Magento searching for an existing event and not creating a new one?
- Why does it keep the old event data?