示例#1
0
 /**
  * Converts parsed field expression $formula into SQL column expression. If needed, introduces new joins in current
  * SELECT.
  *
  * @param Mana_Db_Model_Formula_Context $context
  * @param Mana_Db_Model_Formula_Node_Field $formula
  * @param int $index
  * @throws Mana_Db_Exception_Formula
  * @return Mana_Db_Model_Formula_Expr
  */
 protected function _selectFieldRecursively($context, $formula, $index)
 {
     $processor = $context->getProcessor();
     if (isset($formula->identifiers[$index])) {
         $identifier = $formula->identifiers[$index];
     } else {
         throw new Mana_Db_Exception_Formula(Mage::helper('mana_db')->__("'%s' is entity, but field expected", implode('.', $formula->identifiers)));
     }
     if ($result = $processor->selectField($context, implode('.', array_slice($formula->identifiers, $index)))) {
         $context->getEntityHelper()->selectField($context, $formula, $result);
         return $result;
     } else {
         if ($entity = $processor->selectEntity($context, $identifier)) {
             $entity->getHelper()->select($context, $entity);
             $result = $this->_selectFieldRecursively($context, $formula, ++$index);
             $entity->getHelper()->endSelect($context, $entity);
             return $result;
         } elseif ($index == 0) {
             $context->setEntity($context->getPrimaryEntity());
             return $this->_selectFieldRecursively($context, $formula, $index);
         } else {
             throw new Mana_Db_Exception_Formula($this->__("Unknown field or entity '%s'", $identifier));
         }
     }
 }