From ef10316fa00cfc9df980718c97ec25b3b5bd1091 Mon Sep 17 00:00:00 2001 From: Cristian Partica <cpartica@magento.com> Date: Fri, 13 Jan 2017 10:44:50 -0600 Subject: [PATCH] MAGETWO-58924: SQL error wait timeout error when saving categories - fix singleton resource --- .../Model/Map/DataCategoryHashMap.php | 17 +++++++++-------- .../Unit/Model/Map/DataCategoryHashMapTest.php | 17 +++++++++++++---- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Map/DataCategoryHashMap.php b/app/code/Magento/CatalogUrlRewrite/Model/Map/DataCategoryHashMap.php index ece8b203395..668517f46d8 100644 --- a/app/code/Magento/CatalogUrlRewrite/Model/Map/DataCategoryHashMap.php +++ b/app/code/Magento/CatalogUrlRewrite/Model/Map/DataCategoryHashMap.php @@ -5,7 +5,7 @@ */ namespace Magento\CatalogUrlRewrite\Model\Map; -use Magento\Catalog\Model\ResourceModel\Category; +use Magento\Catalog\Model\ResourceModel\CategoryFactory; use Magento\Catalog\Model\CategoryRepository; use Magento\Catalog\Api\Data\CategoryInterface; @@ -20,19 +20,19 @@ class DataCategoryHashMap implements HashMapInterface /** @var CategoryRepository */ private $categoryRepository; - /** @var Category */ - private $categoryResource; + /** @var CategoryFactory */ + private $categoryResourceFactory; /** * @param CategoryRepository $categoryRepository - * @param Category $categoryResource + * @param CategoryFactory $categoryResourceFactory */ public function __construct( CategoryRepository $categoryRepository, - Category $categoryResource + CategoryFactory $categoryResourceFactory ) { $this->categoryRepository = $categoryRepository; - $this->categoryResource = $categoryResource; + $this->categoryResourceFactory = $categoryResourceFactory; } /** @@ -70,9 +70,10 @@ class DataCategoryHashMap implements HashMapInterface */ private function getAllCategoryChildrenIds(CategoryInterface $category) { - $connection = $this->categoryResource->getConnection(); + $categoryResource = $this->categoryResourceFactory->create(); + $connection = $categoryResource->getConnection(); $select = $connection->select() - ->from($this->categoryResource->getEntityTable(), 'entity_id') + ->from($categoryResource->getEntityTable(), 'entity_id') ->where($connection->quoteIdentifier('path') . ' LIKE :c_path'); $bind = ['c_path' => $category->getPath() . '%']; return $connection->fetchCol($select, $bind); diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/DataCategoryHashMapTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/DataCategoryHashMapTest.php index 1aa6276742b..52d65710fed 100644 --- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/DataCategoryHashMapTest.php +++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Map/DataCategoryHashMapTest.php @@ -5,7 +5,8 @@ */ namespace Magento\CatalogUrlRewrite\Test\Unit\Model\Map; -use Magento\Catalog\Model\ResourceModel\Category as CategoryResource; +use Magento\Catalog\Model\ResourceModel\CategoryFactory; +use Magento\Catalog\Model\ResourceModel\Category; use Magento\Framework\DB\Select; use Magento\Catalog\Model\CategoryRepository; use Magento\Catalog\Api\Data\CategoryInterface; @@ -21,7 +22,10 @@ class DataCategoryHashMapTest extends \PHPUnit_Framework_TestCase /** @var CategoryRepository|\PHPUnit_Framework_MockObject_MockObject */ private $categoryRepository; - /** @var CategoryResource|\PHPUnit_Framework_MockObject_MockObject */ + /** @var CategoryResourceFactory|\PHPUnit_Framework_MockObject_MockObject */ + private $categoryResourceFactory; + + /** @var Category|\PHPUnit_Framework_MockObject_MockObject */ private $categoryResource; /** @var DataCategoryHashMap|\PHPUnit_Framework_MockObject_MockObject */ @@ -30,19 +34,24 @@ class DataCategoryHashMapTest extends \PHPUnit_Framework_TestCase protected function setUp() { $this->categoryRepository = $this->getMock(CategoryRepository::class, [], [], '', false); + $this->categoryResourceFactory = $this->getMock(CategoryFactory::class, ['create'], [], '', false); $this->categoryResource = $this->getMock( - CategoryResource::class, + Category::class, ['getConnection', 'getEntityTable'], [], '', false ); + $this->categoryResourceFactory->expects($this->any()) + ->method('create') + ->willReturn($this->categoryResource); + $this->model = (new ObjectManager($this))->getObject( DataCategoryHashMap::class, [ 'categoryRepository' => $this->categoryRepository, - 'categoryResource' => $this->categoryResource + 'categoryResourceFactory' => $this->categoryResourceFactory ] ); } -- GitLab