/** * Resets select object * * @param null $part * @return $this */ public function reset($part = null) { if ($part === self::COLUMNS || $part === null) { $this->outfile = false; } return parent::reset($part); }
/** * Retrieve product count select for categories * * @return \Magento\Framework\DB\Select */ public function getProductCountSelect() { if ($this->_productCountSelect === null) { $this->_productCountSelect = clone $this->getSelect(); $this->_productCountSelect->reset(\Magento\Framework\DB\Select::COLUMNS)->reset(\Magento\Framework\DB\Select::GROUP)->reset(\Magento\Framework\DB\Select::ORDER)->distinct(false)->join(['count_table' => $this->getTable('catalog_category_product_index')], 'count_table.product_id = e.entity_id', ['count_table.category_id', 'product_count' => new \Zend_Db_Expr('COUNT(DISTINCT count_table.product_id)')])->where('count_table.store_id = ?', $this->getStoreId())->group('count_table.category_id'); } return $this->_productCountSelect; }
/** * Add EXISTS clause * * @param Select $select * @param string $joinCondition * @param bool $isExists * @return $this */ public function exists($select, $joinCondition, $isExists = true) { if ($isExists) { $exists = 'EXISTS (%s)'; } else { $exists = 'NOT EXISTS (%s)'; } $select->reset(self::COLUMNS)->columns([new \Zend_Db_Expr('1')])->where($joinCondition); $exists = sprintf($exists, $select->assemble()); $this->where($exists); return $this; }
/** * Prepare and returns having array * * @param \Magento\Framework\DB\Select $select * @param bool $autoReset * @return array * @throws \Zend_Db_Exception */ protected function _prepareHaving(\Magento\Framework\DB\Select $select, $autoReset = false) { $selectHavings = $select->getPart(\Zend_Db_Select::HAVING); if (!$selectHavings) { return []; } $havings = []; $columns = $select->getPart(\Zend_Db_Select::COLUMNS); foreach ($columns as $columnEntry) { $correlationName = (string) $columnEntry[1]; $column = $columnEntry[2]; foreach ($selectHavings as $having) { /** * Looking for column expression in the having clause */ if (strpos($having, $correlationName) !== false) { if (is_string($column)) { /** * Replace column expression to column alias in having clause */ $havings[] = str_replace($correlationName, $column, $having); } else { throw new \Zend_Db_Exception(sprintf("Can't prepare expression without column alias: '%s'", $correlationName)); } } } } if ($autoReset) { $select->reset(\Zend_Db_Select::HAVING); } return $havings; }