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