/** * * @param Mana_Db_Model_Formula_Context $context * @param Mana_Db_Model_Formula_Entity $entity */ public function select($context, $entity) { switch ($context->getMode()) { default: $context->setMode($this->getName())->setEntityHelper($this); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); foreach ($entity->getAggregateFields() as $field) { if (!$context->hasAlias($field['alias'])) { $context->getSelect()->joinLeft(array($context->registerAlias($field['alias']) => $resource->getTable($dbHelper->getScopedName($field['entity']))), $context->resolveAliases($field['join']), null); } } $context->setEntity($entity->getEntity())->setProcessor($entity->getProcessor())->setAlias($entity->getAlias()); break; } }
/** * @param Mana_Db_Model_Formula_Context $context * @return bool */ public function selectSystemField($context) { if ($context->getField()->getRole() == Mana_Db_Helper_Config::ROLE_PRIMARY_KEY) { return false; } /* @var $formulaHelper Mana_Db_Helper_Formula */ $formulaHelper = Mage::helper('mana_db/formula'); $fieldExpr = "`{$context->registerAlias('primary')}`.`{$context->getField()->getName()}`"; if ($context->getField()->hasValue()) { $context->getSelect()->columns(array($context->getField()->getName() => new Zend_Db_Expr("COALESCE({$fieldExpr}, {$this->_getValue($context, $context->getField()->getValue())})"))); } else { $context->getSelect()->columns(array($context->getField()->getName() => new Zend_Db_Expr("COALESCE({$fieldExpr}, {$this->_getDefaultValue($context)})"))); } return true; }
/** * @param Mana_Db_Model_Formula_Context $context * @param SimpleXMLElement $selectXml * @return Varien_Db_Select */ public function createSelect($context, $selectXml) { /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); $select = $context->getSelect(); /* @var $fromXml SimpleXMLElement */ /** @noinspection PhpUndefinedFieldInspection */ $fromXml = $selectXml->from; foreach ($fromXml->children() as $alias => $definition) { $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->from(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), null); } if (isset($selectXml->join)) { $joinXml = $selectXml->join; /* @var $joinXml SimpleXMLElement */ foreach ($joinXml->children() as $alias => $definition) { $method = isset($definition->type) ? 'join' . ucfirst($definition->type) : 'joinInner'; $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->{$method}(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), $context->resolveAliases((string) $definition->on), null); } } if (isset($selectXml->order)) { $select->order($context->resolveAliases((string) $selectXml->order, false)); } if (isset($selectXml->where)) { $select->where($context->resolveAliases((string) $selectXml->where)); } if ($formula = $context->getOption('entity_filter_formula')) { /* @var $selector Mana_Db_Helper_Formula_Selector */ $selector = Mage::helper('mana_db/formula_selector'); $selector->filterFormula($context, $this->parse($formula), $context->getOption('entity_filter_id')); } return $select; }