/**
  *
  * @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;
     }
 }
示例#2
0
 /**
  * @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;
 }