From 55a536a94f7d4e3a5094b97d780c914547ccd4fc Mon Sep 17 00:00:00 2001 From: Anton Kaplya <anton.kaplya@magento.com> Date: Mon, 25 Jan 2016 21:17:50 +0200 Subject: [PATCH] MAGETWO-47402: All type products are available --- app/etc/di.xml | 10 ++++++++++ .../Magento/Framework/DB/Select/SelectRenderer.php | 14 ++++++++------ .../Magento/Framework/DB/Test/Unit/SelectTest.php | 11 +++++++++++ .../src/Magento/Setup/Module/ConnectionFactory.php | 10 ++++++++++ 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/app/etc/di.xml b/app/etc/di.xml index 99b0ddbbe38..f19b5e2aa44 100755 --- a/app/etc/di.xml +++ b/app/etc/di.xml @@ -1084,42 +1084,52 @@ <item name="distinct" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\DistinctRenderer</item> <item name="sort" xsi:type="string">100</item> + <item name="part" xsi:type="string">distinct</item> </item> <item name="columns" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\ColumnsRenderer</item> <item name="sort" xsi:type="string">200</item> + <item name="part" xsi:type="string">columns</item> </item> <item name="union" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\UnionRenderer</item> <item name="sort" xsi:type="string">300</item> + <item name="part" xsi:type="string">union</item> </item> <item name="from" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\FromRenderer</item> <item name="sort" xsi:type="string">400</item> + <item name="part" xsi:type="string">from</item> </item> <item name="where" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\WhereRenderer</item> <item name="sort" xsi:type="string">500</item> + <item name="part" xsi:type="string">where</item> </item> <item name="group" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\GroupRenderer</item> <item name="sort" xsi:type="string">600</item> + <item name="part" xsi:type="string">group</item> </item> <item name="having" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\HavingRenderer</item> <item name="sort" xsi:type="string">700</item> + <item name="part" xsi:type="string">having</item> </item> <item name="order" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\OrderRenderer</item> <item name="sort" xsi:type="string">800</item> + <item name="part" xsi:type="string">order</item> </item> <item name="limit" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\LimitRenderer</item> <item name="sort" xsi:type="string">900</item> + <item name="part" xsi:type="string">limitcount</item> </item> <item name="for_update" xsi:type="array"> <item name="renderer" xsi:type="object">Magento\Framework\DB\Select\ForUpdateRenderer</item> <item name="sort" xsi:type="string">1000</item> + <item name="part" xsi:type="string">forupdate</item> </item> </argument> </arguments> diff --git a/lib/internal/Magento/Framework/DB/Select/SelectRenderer.php b/lib/internal/Magento/Framework/DB/Select/SelectRenderer.php index 5aacd165fd6..9866775d1fe 100644 --- a/lib/internal/Magento/Framework/DB/Select/SelectRenderer.php +++ b/lib/internal/Magento/Framework/DB/Select/SelectRenderer.php @@ -15,7 +15,7 @@ class SelectRenderer implements RendererInterface /** * @var RendererInterface[] */ - protected $renders; + protected $renderers; /** * @param RendererInterface[] $renderers @@ -23,11 +23,11 @@ class SelectRenderer implements RendererInterface public function __construct( array $renderers ) { - $this->renders = $this->sort($renderers); + $this->renderers = $this->sort($renderers); } /** - * Sort renders + * Sort renderers * * @param array $renders * @return array @@ -65,9 +65,11 @@ class SelectRenderer implements RendererInterface */ public function render(Select $select, $sql = '') { - $sql = Select::SQL_SELECT; - foreach ($this->renders as $renderer) { - $sql = $renderer['renderer']->render($select, $sql); + $sql = Select::SQL_SELECT . ' '; + foreach ($this->renderers as $renderer) { + if (in_array($renderer['part'], [Select::COLUMNS, Select::FROM]) || $select->getPart($renderer['part'])) { + $sql = $renderer['renderer']->render($select, $sql); + } } return $sql; } diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/SelectTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/SelectTest.php index 28fa9d343c8..1ac106a4878 100644 --- a/lib/internal/Magento/Framework/DB/Test/Unit/SelectTest.php +++ b/lib/internal/Magento/Framework/DB/Test/Unit/SelectTest.php @@ -24,54 +24,65 @@ class SelectTest extends \PHPUnit_Framework_TestCase [ 'renderer' => new \Magento\Framework\DB\Select\DistinctRenderer(), 'sort' => 100, + 'part' => 'distinct' ], 'columns' => [ 'renderer' => new \Magento\Framework\DB\Select\ColumnsRenderer($quote), 'sort' => 200, + 'part' => 'columns' ], 'union' => [ 'renderer' => new \Magento\Framework\DB\Select\UnionRenderer(), 'sort' => 300, + 'part' => 'union' ], 'from' => [ 'renderer' => new \Magento\Framework\DB\Select\FromRenderer($quote), 'sort' => 400, + 'part' => 'from' ], 'where' => [ 'renderer' => new \Magento\Framework\DB\Select\WhereRenderer(), 'sort' => 500, + 'part' => 'where' ], 'group' => [ 'renderer' => new \Magento\Framework\DB\Select\GroupRenderer($quote), 'sort' => 600, + 'part' => 'group' ], 'having' => [ 'renderer' => new \Magento\Framework\DB\Select\HavingRenderer(), 'sort' => 700, + 'part' => 'having' ], 'order' => [ 'renderer' => new \Magento\Framework\DB\Select\OrderRenderer($quote), 'sort' => 800, + 'part' => 'order' ], 'limit' => [ 'renderer' => new \Magento\Framework\DB\Select\LimitRenderer(), 'sort' => 900, + 'part' => 'limitcount' ], 'for_update' => [ 'renderer' => new \Magento\Framework\DB\Select\ForUpdateRenderer(), 'sort' => 1000, + 'part' => 'forupdate' ], ] ); + $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'5'"), $renderer); $select->from('test')->where('field = ?', 5); $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field = '5')", $select->assemble()); diff --git a/setup/src/Magento/Setup/Module/ConnectionFactory.php b/setup/src/Magento/Setup/Module/ConnectionFactory.php index 1faab16ac87..87eb5c1cd3d 100644 --- a/setup/src/Magento/Setup/Module/ConnectionFactory.php +++ b/setup/src/Magento/Setup/Module/ConnectionFactory.php @@ -46,51 +46,61 @@ class ConnectionFactory implements \Magento\Framework\Model\ResourceModel\Type\D [ 'renderer' => new \Magento\Framework\DB\Select\DistinctRenderer(), 'sort' => 100, + 'part' => 'distinct' ], 'columns' => [ 'renderer' => new \Magento\Framework\DB\Select\ColumnsRenderer($quote), 'sort' => 200, + 'part' => 'columns' ], 'union' => [ 'renderer' => new \Magento\Framework\DB\Select\UnionRenderer(), 'sort' => 300, + 'part' => 'union' ], 'from' => [ 'renderer' => new \Magento\Framework\DB\Select\FromRenderer($quote), 'sort' => 400, + 'part' => 'from' ], 'where' => [ 'renderer' => new \Magento\Framework\DB\Select\WhereRenderer(), 'sort' => 500, + 'part' => 'where' ], 'group' => [ 'renderer' => new \Magento\Framework\DB\Select\GroupRenderer($quote), 'sort' => 600, + 'part' => 'group' ], 'having' => [ 'renderer' => new \Magento\Framework\DB\Select\HavingRenderer(), 'sort' => 700, + 'part' => 'having' ], 'order' => [ 'renderer' => new \Magento\Framework\DB\Select\OrderRenderer($quote), 'sort' => 800, + 'part' => 'order' ], 'limit' => [ 'renderer' => new \Magento\Framework\DB\Select\LimitRenderer(), 'sort' => 900, + 'part' => 'limitcount' ], 'for_update' => [ 'renderer' => new \Magento\Framework\DB\Select\ForUpdateRenderer(), 'sort' => 1000, + 'part' => 'forupdate' ], ] ) -- GitLab