/** * 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)); } } }