/**
  * 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;
 }
Example #2
0
 /**
  * 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;
 }