From f4c942b9a247109d02fb741c7b46f316f8ccff2f Mon Sep 17 00:00:00 2001 From: Rob Wigginton Date: Mon, 6 Mar 2017 11:12:02 +0000 Subject: [PATCH] [impr-#187] Ensure all db transactions are either committed or rolled back --- .../core/Mage/Admin/Model/Resource/User.php | 5 +- .../core/Mage/Api/Model/Resource/Rules.php | 1 + .../core/Mage/Api/Model/Resource/User.php | 5 +- app/code/core/Mage/Backup/Model/Db.php | 82 ++++++++++--------- .../Bundle/Model/Resource/Price/Index.php | 11 ++- app/code/core/Mage/Catalog/Model/Category.php | 3 +- .../Model/Resource/Product/Indexer/Price.php | 15 ++-- .../Model/Resource/Product/Website.php | 5 +- .../core/Mage/CatalogIndex/Model/Indexer.php | 52 +++++++----- .../Model/Resource/Indexer/Stock.php | 7 +- .../CatalogInventory/Model/Resource/Stock.php | 9 +- .../Mage/CatalogInventory/Model/Stock.php | 30 ++++--- .../Mage/CatalogRule/Model/Resource/Rule.php | 67 ++++++++------- app/code/core/Mage/Core/Model/Abstract.php | 2 +- .../core/Mage/Core/Model/Resource/Cache.php | 2 +- .../Model/Resource/Report/Settlement.php | 2 +- .../Mage/Rule/Model/Resource/Abstract.php | 4 +- .../Sales/Model/Resource/Report/Refunded.php | 2 +- .../Sales/Model/Resource/Report/Shipping.php | 6 +- .../core/Mage/Sales/Model/Service/Quote.php | 4 +- .../Mage/SalesRule/Model/Resource/Rule.php | 2 +- .../Model/Resource/Carrier/Tablerate.php | 3 +- .../XmlConnect/Model/Resource/ConfigData.php | 2 +- 23 files changed, 176 insertions(+), 145 deletions(-) diff --git a/app/code/core/Mage/Admin/Model/Resource/User.php b/app/code/core/Mage/Admin/Model/Resource/User.php index 1bfa885d5add..aeff8f1060e1 100644 --- a/app/code/core/Mage/Admin/Model/Resource/User.php +++ b/app/code/core/Mage/Admin/Model/Resource/User.php @@ -212,14 +212,14 @@ public function delete(Mage_Core_Model_Abstract $user) $adapter->delete($this->getMainTable(), $conditions); $adapter->delete($this->getTable('admin/role'), $conditions); + $adapter->commit(); } catch (Mage_Core_Exception $e) { + $adapter->rollBack(); throw $e; - return false; } catch (Exception $e) { $adapter->rollBack(); return false; } - $adapter->commit(); $this->_afterDelete($user); return true; } @@ -270,6 +270,7 @@ public function _saveRelations(Mage_Core_Model_Abstract $user) } $adapter->commit(); } catch (Mage_Core_Exception $e) { + $adapter->rollBack(); throw $e; } catch (Exception $e) { $adapter->rollBack(); diff --git a/app/code/core/Mage/Api/Model/Resource/Rules.php b/app/code/core/Mage/Api/Model/Resource/Rules.php index 3668b160a2a0..4e6b30fc4e48 100644 --- a/app/code/core/Mage/Api/Model/Resource/Rules.php +++ b/app/code/core/Mage/Api/Model/Resource/Rules.php @@ -79,6 +79,7 @@ public function saveRel(Mage_Api_Model_Rules $rule) $adapter->commit(); } catch (Mage_Core_Exception $e) { + $adapter->rollBack(); throw $e; } catch (Exception $e) { $adapter->rollBack(); diff --git a/app/code/core/Mage/Api/Model/Resource/User.php b/app/code/core/Mage/Api/Model/Resource/User.php index f6e927801d4f..eae6fd08d82e 100644 --- a/app/code/core/Mage/Api/Model/Resource/User.php +++ b/app/code/core/Mage/Api/Model/Resource/User.php @@ -245,14 +245,14 @@ public function delete(Mage_Core_Model_Abstract $user) try { $dbh->delete($this->getTable('api/user'), array('user_id = ?' => $uid)); $dbh->delete($this->getTable('api/role'), array('user_id = ?' => $uid)); + $dbh->commit(); } catch (Mage_Core_Exception $e) { + $dbh->rollBack(); throw $e; - return false; } catch (Exception $e) { $dbh->rollBack(); return false; } - $dbh->commit(); return true; } @@ -298,6 +298,7 @@ public function _saveRelations(Mage_Core_Model_Abstract $user) } $adapter->commit(); } catch (Mage_Core_Exception $e) { + $adapter->rollBack(); throw $e; } catch (Exception $e) { $adapter->rollBack(); diff --git a/app/code/core/Mage/Backup/Model/Db.php b/app/code/core/Mage/Backup/Model/Db.php index 2d2fb4083cd8..722d8abac465 100644 --- a/app/code/core/Mage/Backup/Model/Db.php +++ b/app/code/core/Mage/Backup/Model/Db.php @@ -112,52 +112,54 @@ public function createBackup(Mage_Backup_Model_Backup $backup) $backup->open(true); $this->getResource()->beginTransaction(); - - $tables = $this->getResource()->getTables(); - - $backup->write($this->getResource()->getHeader()); - - $ignoreDataTablesList = $this->getIgnoreDataTablesList(); - - foreach ($tables as $table) { - $backup->write($this->getResource()->getTableHeader($table) - . $this->getResource()->getTableDropSql($table) . "\n"); - $backup->write($this->getResource()->getTableCreateSql($table, false) . "\n"); - - $tableStatus = $this->getResource()->getTableStatus($table); - - if ($tableStatus->getRows() && !in_array($table, $ignoreDataTablesList)) { - $backup->write($this->getResource()->getTableDataBeforeSql($table)); - - if ($tableStatus->getDataLength() > self::BUFFER_LENGTH) { - if ($tableStatus->getAvgRowLength() > 0 && $tableStatus->getAvgRowLength() < self::BUFFER_LENGTH) { - // Process rows in batches - $limit = floor(self::BUFFER_LENGTH / $tableStatus->getAvgRowLength()); - $multiRowsLength = ceil($tableStatus->getRows() / $limit); + try { + $tables = $this->getResource()->getTables(); + + $backup->write($this->getResource()->getHeader()); + + $ignoreDataTablesList = $this->getIgnoreDataTablesList(); + + foreach ($tables as $table) { + $backup->write($this->getResource()->getTableHeader($table) + . $this->getResource()->getTableDropSql($table) . "\n"); + $backup->write($this->getResource()->getTableCreateSql($table, false) . "\n"); + + $tableStatus = $this->getResource()->getTableStatus($table); + + if ($tableStatus->getRows() && !in_array($table, $ignoreDataTablesList)) { + $backup->write($this->getResource()->getTableDataBeforeSql($table)); + + if ($tableStatus->getDataLength() > self::BUFFER_LENGTH) { + if ($tableStatus->getAvgRowLength() > 0 && $tableStatus->getAvgRowLength() < self::BUFFER_LENGTH) { + // Process rows in batches + $limit = floor(self::BUFFER_LENGTH / $tableStatus->getAvgRowLength()); + $multiRowsLength = ceil($tableStatus->getRows() / $limit); + } else { + // Process rows one by one + $limit = 1; + $multiRowsLength = $tableStatus->getRows(); + } + } else { + // Process all rows at once + $limit = $tableStatus->getRows(); + $multiRowsLength = 1; } - else { - // Process rows one by one - $limit = 1; - $multiRowsLength = $tableStatus->getRows(); + + for ($i = 0; $i < $multiRowsLength; $i++) { + $backup->write($this->getResource()->getTableDataSql($table, $limit, $i * $limit)); } - } - else { - // Process all rows at once - $limit = $tableStatus->getRows(); - $multiRowsLength = 1; - } - for ($i = 0; $i < $multiRowsLength; $i ++) { - $backup->write($this->getResource()->getTableDataSql($table, $limit, $i*$limit)); + $backup->write($this->getResource()->getTableDataAfterSql($table)); } - - $backup->write($this->getResource()->getTableDataAfterSql($table)); } - } - $backup->write($this->getResource()->getTableForeignKeysSql()); - $backup->write($this->getResource()->getFooter()); + $backup->write($this->getResource()->getTableForeignKeysSql()); + $backup->write($this->getResource()->getFooter()); - $this->getResource()->commitTransaction(); + $this->getResource()->commitTransaction(); + } catch (Exception $e) { + $this->getResource()->rollBackTransaction(); + throw $e; + } $backup->close(); diff --git a/app/code/core/Mage/Bundle/Model/Resource/Price/Index.php b/app/code/core/Mage/Bundle/Model/Resource/Price/Index.php index e1cd3d2c97bf..b9bdba145599 100644 --- a/app/code/core/Mage/Bundle/Model/Resource/Price/Index.php +++ b/app/code/core/Mage/Bundle/Model/Resource/Price/Index.php @@ -253,9 +253,14 @@ protected function _savePriceIndex($productId, $websiteId, $groupId, $minPrice, { $adapter = $this->_getWriteAdapter(); $adapter->beginTransaction(); - $bind = array($productId, $websiteId, $groupId, $minPrice, $maxPrice); - $adapter->insertOnDuplicate($this->getMainTable(), $bind, array('min_price', 'max_price')); - $adapter->commit(); + try { + $bind = array($productId, $websiteId, $groupId, $minPrice, $maxPrice); + $adapter->insertOnDuplicate($this->getMainTable(), $bind, array('min_price', 'max_price')); + $adapter->commit(); + } catch (Exception $e) { + $adapter->rollBack(); + throw $e; + } return $this; } diff --git a/app/code/core/Mage/Catalog/Model/Category.php b/app/code/core/Mage/Catalog/Model/Category.php index 6e59038157d1..9dad2a4c04c4 100644 --- a/app/code/core/Mage/Catalog/Model/Category.php +++ b/app/code/core/Mage/Catalog/Model/Category.php @@ -245,12 +245,13 @@ public function move($parentId, $afterCategoryId) Mage::dispatchEvent($this->_eventPrefix.'_move_after', $eventParams); Mage::dispatchEvent('catalog_category_tree_move_after', $eventParams); - $this->_getResource()->commit(); // Set data for indexer $this->setAffectedCategoryIds(array($this->getId(), $this->getParentId(), $parentId)); $moveComplete = true; + + $this->_getResource()->commit(); } catch (Exception $e) { $this->_getResource()->rollBack(); throw $e; diff --git a/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Price.php b/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Price.php index aad623801590..d46a1d70ee15 100644 --- a/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Price.php +++ b/app/code/core/Mage/Catalog/Model/Resource/Product/Indexer/Price.php @@ -590,13 +590,18 @@ protected function _prepareWebsiteDateTable() } $write->beginTransaction(); - $table = $this->_getWebsiteDateTable(); - $write->delete($table); + try { + $table = $this->_getWebsiteDateTable(); + $write->delete($table); - if ($data) { - $write->insertMultiple($table, $data); + if ($data) { + $write->insertMultiple($table, $data); + } + $write->commit(); + } catch (Exception $e) { + $write->rollBack(); + throw $e; } - $write->commit(); return $this; } diff --git a/app/code/core/Mage/Catalog/Model/Resource/Product/Website.php b/app/code/core/Mage/Catalog/Model/Resource/Product/Website.php index beae8ae015c0..d7785b4f460a 100644 --- a/app/code/core/Mage/Catalog/Model/Resource/Product/Website.php +++ b/app/code/core/Mage/Catalog/Model/Resource/Product/Website.php @@ -106,9 +106,10 @@ public function addProducts($websiteIds, $productIds) $this->_getWriteAdapter()->beginTransaction(); - // Before adding of products we should remove it old rows with same ids - $this->removeProducts($websiteIds, $productIds); try { + // Before adding of products we should remove it old rows with same ids + $this->removeProducts($websiteIds, $productIds); + foreach ($websiteIds as $websiteId) { foreach ($productIds as $productId) { if (!$productId) { diff --git a/app/code/core/Mage/CatalogIndex/Model/Indexer.php b/app/code/core/Mage/CatalogIndex/Model/Indexer.php index f95dc273bd0a..88d1dbd13ec1 100644 --- a/app/code/core/Mage/CatalogIndex/Model/Indexer.php +++ b/app/code/core/Mage/CatalogIndex/Model/Indexer.php @@ -497,34 +497,44 @@ protected function _walkCollection($collection, $store, $attributes = array(), $ for ($i=0;$i<$productCount/self::STEP_SIZE;$i++) { $this->_getResource()->beginTransaction(); + try { + $deleteKill = false; - $stepData = $collection->getAllIds(self::STEP_SIZE, $i*self::STEP_SIZE); + $stepData = $collection->getAllIds(self::STEP_SIZE, $i*self::STEP_SIZE); - /** - * Reindex EAV attributes if required - */ - if (count($attributes)) { - $this->_getResource()->reindexAttributes($stepData, $attributes, $store); - } + /** + * Reindex EAV attributes if required + */ + if (count($attributes)) { + $this->_getResource()->reindexAttributes($stepData, $attributes, $store); + } - /** - * Reindex prices if required - */ - if (count($prices)) { - $this->_getResource()->reindexPrices($stepData, $prices, $store); - $this->_getResource()->reindexTiers($stepData, $store); - $this->_getResource()->reindexMinimalPrices($stepData, $store); - $this->_getResource()->reindexFinalPrices($stepData, $store); - } + /** + * Reindex prices if required + */ + if (count($prices)) { + $this->_getResource()->reindexPrices($stepData, $prices, $store); + $this->_getResource()->reindexTiers($stepData, $store); + $this->_getResource()->reindexMinimalPrices($stepData, $store); + $this->_getResource()->reindexFinalPrices($stepData, $store); + } - Mage::getResourceSingleton('catalog/product')->refreshEnabledIndex($store, $stepData); + Mage::getResourceSingleton('catalog/product')->refreshEnabledIndex($store, $stepData); - $kill = Mage::getModel('catalogindex/catalog_index_kill_flag')->loadSelf(); - if ($kill->checkIsThisProcess()) { + $kill = Mage::getModel('catalogindex/catalog_index_kill_flag')->loadSelf(); + if ($kill->checkIsThisProcess()) { + $this->_getResource()->rollBack(); + $deleteKill = true; + } else { + $this->_getResource()->commit(); + } + } catch (Exception $e) { $this->_getResource()->rollBack(); + throw $e; + } + + if ($deleteKill && isset($kill)) { $kill->delete(); - } else { - $this->_getResource()->commit(); } } return $this; diff --git a/app/code/core/Mage/CatalogInventory/Model/Resource/Indexer/Stock.php b/app/code/core/Mage/CatalogInventory/Model/Resource/Indexer/Stock.php index 7b5c4c042fc4..815308f5c5ce 100644 --- a/app/code/core/Mage/CatalogInventory/Model/Resource/Indexer/Stock.php +++ b/app/code/core/Mage/CatalogInventory/Model/Resource/Indexer/Stock.php @@ -115,11 +115,11 @@ public function reindexProducts($productIds) $indexer->reindexEntity($byType[$indexer->getTypeId()]); } } + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); return $this; } @@ -149,13 +149,12 @@ public function catalogProductDelete(Mage_Index_Model_Event $event) foreach ($parentIds as $parentType => $entityIds) { $this->_getIndexer($parentType)->reindexEntity($entityIds); } + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); - return $this; } @@ -223,11 +222,11 @@ public function catalogProductMassAction(Mage_Index_Model_Event $event) $indexer->reindexEntity($byType[$indexer->getTypeId()]); } } + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); return $this; } diff --git a/app/code/core/Mage/CatalogInventory/Model/Resource/Stock.php b/app/code/core/Mage/CatalogInventory/Model/Resource/Stock.php index dcc19b96b37f..b4f1b3db6ff2 100644 --- a/app/code/core/Mage/CatalogInventory/Model/Resource/Stock.php +++ b/app/code/core/Mage/CatalogInventory/Model/Resource/Stock.php @@ -181,8 +181,13 @@ public function correctItemsQty($stock, $productQtys, $operator = '-') ); $adapter->beginTransaction(); - $adapter->update($this->getTable('cataloginventory/stock_item'), array('qty' => $value), $where); - $adapter->commit(); + try { + $adapter->update($this->getTable('cataloginventory/stock_item'), array('qty' => $value), $where); + $adapter->commit(); + } catch (Exception $e) { + $adapter->rollBack(); + throw $e; + } return $this; } diff --git a/app/code/core/Mage/CatalogInventory/Model/Stock.php b/app/code/core/Mage/CatalogInventory/Model/Stock.php index fb14ae49e1c9..ee401f840a7b 100644 --- a/app/code/core/Mage/CatalogInventory/Model/Stock.php +++ b/app/code/core/Mage/CatalogInventory/Model/Stock.php @@ -135,21 +135,25 @@ public function registerProductsSale($items) $qtys = $this->_prepareProductQtys($items); $item = Mage::getModel('cataloginventory/stock_item'); $this->_getResource()->beginTransaction(); - $stockInfo = $this->_getResource()->getProductsStock($this, array_keys($qtys), true); - $fullSaveItems = array(); - foreach ($stockInfo as $itemInfo) { - $item->setData($itemInfo); - if (!$item->checkQty($qtys[$item->getProductId()])) { - $this->_getResource()->commit(); - Mage::throwException(Mage::helper('cataloginventory')->__('Not all products are available in the requested quantity')); - } - $item->subtractQty($qtys[$item->getProductId()]); - if (!$item->verifyStock() || $item->verifyNotification()) { - $fullSaveItems[] = clone $item; + try { + $stockInfo = $this->_getResource()->getProductsStock($this, array_keys($qtys), true); + $fullSaveItems = array(); + foreach ($stockInfo as $itemInfo) { + $item->setData($itemInfo); + if (!$item->checkQty($qtys[$item->getProductId()])) { + Mage::throwException(Mage::helper('cataloginventory')->__('Not all products are available in the requested quantity')); + } + $item->subtractQty($qtys[$item->getProductId()]); + if (!$item->verifyStock() || $item->verifyNotification()) { + $fullSaveItems[] = clone $item; + } } + $this->_getResource()->correctItemsQty($this, $qtys, '-'); + $this->_getResource()->commit(); + } catch (Exception $e) { + $this->_getResource()->rollBack(); + throw $e; } - $this->_getResource()->correctItemsQty($this, $qtys, '-'); - $this->_getResource()->commit(); return $fullSaveItems; } diff --git a/app/code/core/Mage/CatalogRule/Model/Resource/Rule.php b/app/code/core/Mage/CatalogRule/Model/Resource/Rule.php index a89356610bfc..436e058ff858 100644 --- a/app/code/core/Mage/CatalogRule/Model/Resource/Rule.php +++ b/app/code/core/Mage/CatalogRule/Model/Resource/Rule.php @@ -338,26 +338,27 @@ public function updateRuleProductData(Mage_CatalogRule_Model_Rule $rule) $ruleId = $rule->getId(); $write = $this->_getWriteAdapter(); $write->beginTransaction(); - if ($rule->getProductsFilter()) { - $this->cleanProductData($ruleId, $rule->getProductsFilter()); - } else { - $this->cleanProductData($ruleId); - } + try { + if ($rule->getProductsFilter()) { + $this->cleanProductData($ruleId, $rule->getProductsFilter()); + } else { + $this->cleanProductData($ruleId); + } - if (!$rule->getIsActive()) { - $write->commit(); - return $this; - } + if (!$rule->getIsActive()) { + $write->commit(); + return $this; + } - $websiteIds = $rule->getWebsiteIds(); - if (!is_array($websiteIds)) { - $websiteIds = explode(',', $websiteIds); - } - if (empty($websiteIds)) { - return $this; - } + $websiteIds = $rule->getWebsiteIds(); + if (!is_array($websiteIds)) { + $websiteIds = explode(',', $websiteIds); + } + if (empty($websiteIds)) { + $write->commit(); + return $this; + } - try { $this->insertRuleData($rule, $websiteIds); $write->commit(); } catch (Exception $e) { @@ -657,13 +658,12 @@ protected function _saveRuleProductPrices($arrData) } $adapter->insertOnDuplicate($this->getTable('catalogrule/affected_product'), array_unique($productIds)); $adapter->insertOnDuplicate($this->getTable('catalogrule/rule_product_price'), $arrData); - + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); return $this; } @@ -781,26 +781,25 @@ public function applyToProduct($rule, $product, $websiteIds) $write = $this->_getWriteAdapter(); $write->beginTransaction(); - - if ($this->_isProductMatchedRule($ruleId, $product)) { - $this->cleanProductData($ruleId, array($productId)); - } - if ($this->validateProduct($rule, $product, $websiteIds)) { - try { + try { + if ($this->_isProductMatchedRule($ruleId, $product)) { + $this->cleanProductData($ruleId, array($productId)); + } + if ($this->validateProduct($rule, $product, $websiteIds)) { $this->insertRuleData($rule, $websiteIds, array( $productId => array_combine(array_values($websiteIds), array_values($websiteIds))) ); - } catch (Exception $e) { - $write->rollback(); - throw $e; + } else { + $write->delete($this->getTable('catalogrule/rule_product_price'), array( + $write->quoteInto('product_id = ?', $productId), + )); } - } else { - $write->delete($this->getTable('catalogrule/rule_product_price'), array( - $write->quoteInto('product_id = ?', $productId), - )); - } - $write->commit(); + $write->commit(); + } catch (Exception $e) { + $write->rollback(); + throw $e; + } return $this; } diff --git a/app/code/core/Mage/Core/Model/Abstract.php b/app/code/core/Mage/Core/Model/Abstract.php index 757164d91a72..dbc7279fe18e 100644 --- a/app/code/core/Mage/Core/Model/Abstract.php +++ b/app/code/core/Mage/Core/Model/Abstract.php @@ -481,12 +481,12 @@ public function delete() $this->_afterDelete(); $this->_getResource()->commit(); - $this->_afterDeleteCommit(); } catch (Exception $e){ $this->_getResource()->rollBack(); throw $e; } + $this->_afterDeleteCommit(); return $this; } diff --git a/app/code/core/Mage/Core/Model/Resource/Cache.php b/app/code/core/Mage/Core/Model/Resource/Cache.php index cf8203ea85a0..7e02e8993ab3 100644 --- a/app/code/core/Mage/Core/Model/Resource/Cache.php +++ b/app/code/core/Mage/Core/Model/Resource/Cache.php @@ -89,11 +89,11 @@ public function saveAllOptions($options) if ($data) { $this->_getWriteAdapter()->insertArray($this->getMainTable(), array('code', 'value'), $data); } + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); return $this; } diff --git a/app/code/core/Mage/Paypal/Model/Resource/Report/Settlement.php b/app/code/core/Mage/Paypal/Model/Resource/Report/Settlement.php index faf335f69e73..fd1f699b6e2e 100644 --- a/app/code/core/Mage/Paypal/Model/Resource/Report/Settlement.php +++ b/app/code/core/Mage/Paypal/Model/Resource/Report/Settlement.php @@ -63,8 +63,8 @@ protected function _afterSave(Mage_Core_Model_Abstract $object) if (is_array($rows)) { $adapter = $this->_getWriteAdapter(); $reportId = (int)$object->getId(); + $adapter->beginTransaction(); try { - $adapter->beginTransaction(); if ($reportId) { $adapter->delete($this->_rowsTable, array('report_id = ?' => $reportId)); } diff --git a/app/code/core/Mage/Rule/Model/Resource/Abstract.php b/app/code/core/Mage/Rule/Model/Resource/Abstract.php index ee8484c80e55..b57b4463d09a 100644 --- a/app/code/core/Mage/Rule/Model/Resource/Abstract.php +++ b/app/code/core/Mage/Rule/Model/Resource/Abstract.php @@ -177,14 +177,14 @@ public function bindRuleToEntity($ruleIds, $entityIds, $entityType, $deleteOldRe $adapter->quoteInto($entityInfo['entity_id_field'] . ' NOT IN (?)', $entityIds) ); } + + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); - return $this; } diff --git a/app/code/core/Mage/Sales/Model/Resource/Report/Refunded.php b/app/code/core/Mage/Sales/Model/Resource/Report/Refunded.php index 0ebf344245a5..671c35442d94 100644 --- a/app/code/core/Mage/Sales/Model/Resource/Report/Refunded.php +++ b/app/code/core/Mage/Sales/Model/Resource/Report/Refunded.php @@ -267,11 +267,11 @@ protected function _aggregateByRefundCreatedAt($from, $to) $insertQuery = $helper->getInsertFromSelectUsingAnalytic($select, $table, array_keys($columns)); $adapter->query($insertQuery); + $adapter->commit(); } catch (Exception $e) { $adapter->rollBack(); throw $e; } - $adapter->commit(); return $this; } } diff --git a/app/code/core/Mage/Sales/Model/Resource/Report/Shipping.php b/app/code/core/Mage/Sales/Model/Resource/Report/Shipping.php index 1d7dbf8ead3d..bd833e51135c 100644 --- a/app/code/core/Mage/Sales/Model/Resource/Report/Shipping.php +++ b/app/code/core/Mage/Sales/Model/Resource/Report/Shipping.php @@ -156,12 +156,11 @@ protected function _aggregateByOrderCreatedAt($from, $to) $insertQuery = $helper->getInsertFromSelectUsingAnalytic($select, $table, array_keys($columns)); $adapter->query($insertQuery); + $adapter->commit(); } catch (Exception $e) { $adapter->rollBack(); throw $e; } - - $adapter->commit(); return $this; } @@ -272,12 +271,11 @@ protected function _aggregateByShippingCreatedAt($from, $to) )); $insertQuery = $helper->getInsertFromSelectUsingAnalytic($select, $table, array_keys($columns)); $adapter->query($insertQuery); + $adapter->commit(); } catch (Exception $e) { $adapter->rollBack(); throw $e; } - - $adapter->commit(); return $this; } } diff --git a/app/code/core/Mage/Sales/Model/Service/Quote.php b/app/code/core/Mage/Sales/Model/Service/Quote.php index 8b44e5dfa0a9..89a40d2896a2 100644 --- a/app/code/core/Mage/Sales/Model/Service/Quote.php +++ b/app/code/core/Mage/Sales/Model/Service/Quote.php @@ -187,8 +187,6 @@ public function submitOrder() Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order'=>$order, 'quote'=>$quote)); try { $transaction->save(); - $this->_inactivateQuote(); - Mage::dispatchEvent('sales_model_service_quote_submit_success', array('order'=>$order, 'quote'=>$quote)); } catch (Exception $e) { if (!Mage::getSingleton('customer/session')->isLoggedIn()) { @@ -207,6 +205,8 @@ public function submitOrder() Mage::dispatchEvent('sales_model_service_quote_submit_failure', array('order'=>$order, 'quote'=>$quote)); throw $e; } + $this->_inactivateQuote(); + Mage::dispatchEvent('sales_model_service_quote_submit_success', array('order'=>$order, 'quote'=>$quote)); Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order'=>$order, 'quote'=>$quote)); $this->_order = $order; return $order; diff --git a/app/code/core/Mage/SalesRule/Model/Resource/Rule.php b/app/code/core/Mage/SalesRule/Model/Resource/Rule.php index fd4d2e52175c..45d89fc795f6 100644 --- a/app/code/core/Mage/SalesRule/Model/Resource/Rule.php +++ b/app/code/core/Mage/SalesRule/Model/Resource/Rule.php @@ -196,12 +196,12 @@ public function saveStoreLabels($ruleId, $labels) 'store_id IN (?)' => $deleteByStoreIds )); } + $adapter->commit(); } catch (Exception $e) { $adapter->rollback(); throw $e; } - $adapter->commit(); return $this; } diff --git a/app/code/core/Mage/Shipping/Model/Resource/Carrier/Tablerate.php b/app/code/core/Mage/Shipping/Model/Resource/Carrier/Tablerate.php index 97cf7d6e2d83..ffd1e3081310 100644 --- a/app/code/core/Mage/Shipping/Model/Resource/Carrier/Tablerate.php +++ b/app/code/core/Mage/Shipping/Model/Resource/Carrier/Tablerate.php @@ -253,6 +253,7 @@ public function uploadAndImport(Varien_Object $object) } $this->_saveImportData($importData); $io->streamClose(); + $adapter->commit(); } catch (Mage_Core_Exception $e) { $adapter->rollback(); $io->streamClose(); @@ -264,8 +265,6 @@ public function uploadAndImport(Varien_Object $object) Mage::throwException(Mage::helper('shipping')->__('An error occurred while import table rates.')); } - $adapter->commit(); - if ($this->_importErrors) { $error = Mage::helper('shipping')->__('File has not been imported. See the following list of errors: %s', implode(" \n", $this->_importErrors)); Mage::throwException($error); diff --git a/app/code/core/Mage/XmlConnect/Model/Resource/ConfigData.php b/app/code/core/Mage/XmlConnect/Model/Resource/ConfigData.php index 7f97f9c41e45..164d14d8cd38 100644 --- a/app/code/core/Mage/XmlConnect/Model/Resource/ConfigData.php +++ b/app/code/core/Mage/XmlConnect/Model/Resource/ConfigData.php @@ -76,8 +76,8 @@ public function saveConfig($applicationId, $category, $path, $value) */ public function deleteConfig($applicationId, $category = '', $path = '', $pathLike = true) { + $this->_getWriteAdapter()->beginTransaction(); try { - $this->_getWriteAdapter()->beginTransaction(); $writeAdapter = $this->_getWriteAdapter(); $deleteWhere[] = $writeAdapter->quoteInto('application_id=?', $applicationId); if ($category) {