/** * Add EXISTS clause * * @param Varien_Db_Select $select * @param string $joinCondition * @param bool $isExists * @return Varien_Db_Select */ public function exists($select, $joinCondition, $isExists = true) { if ($isExists) { $exists = 'EXISTS (%s)'; } else { $exists = 'NOT EXISTS (%s)'; } $select->reset(self::COLUMNS)->columns(array(new Zend_Db_Expr('1')))->where($joinCondition); $exists = sprintf($exists, $select->assemble()); $this->where($exists); return $this; }
/** * Prepare and returns having array * * @param Varien_Db_Select $select * @param bool $autoReset * @return array * @throws Zend_Db_Exception */ protected function _prepareHaving(Varien_Db_Select $select, $autoReset = false) { $selectHavings = $select->getPart(Zend_Db_Select::HAVING); if (!$selectHavings) { return array(); } $havings = array(); $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; }