public function getRegisteredChain($key, $force_create = false) { if (isset($this->global_chains[$key])) { return $this->global_chains[$key]; } if ($force_create) { $chain = QueryChain::getChainByDefinition($this->init_entity, $key); $this->registerChain('global', $chain); return $chain; } return false; }
$grcSelect[] = $alias; } else { // normal field $alias = Entity\QueryChain::getAliasByDefinition($entity, $elem['name']); $grcSelect[$alias] = $selElem; } CReport::rewriteUserShortName($grcSelect, $runtime, $arParams['USER_NAME_FORMAT'], $entity, true); // add primary of grc entity field $grcChain = Entity\QueryChain::getChainByDefinition($entity, $elem['name']); $grc_field = $grcChain->getLastElement()->getValue(); if (is_array($grc_field)) { $grc_field = end($grc_field); } $grc_primary = end($grc_field->getEntity()->getPrimaryArray()); $grc_marker = substr($elem['name'], 0, strrpos($elem['name'], '.')) . '.' . $grc_primary; $grc_marker_alias = Entity\QueryChain::getAliasByDefinition($entity, $grc_marker); $grcSelect[$grc_marker_alias] = $grc_marker; // select $resultName = $viewColumns[$num]['resultName']; $grcData[$resultName] = array(); $grc_query = new Entity\Query($entity); $grc_query->setSelect($grcSelect); $grc_query->setFilter($grcFilter); foreach ($runtime as $k => $v) { $grc_query->registerRuntimeField($k, $v); } $result = $grc_query->exec(); while ($row = $result->fetch()) { if (empty($row[$grc_marker_alias])) { continue; }
public static function getAliasByChain(QueryChain $chain) { $alias = array(); $elements = $chain->getAllElements(); // add prefix of init entity if (count($elements) > 2) { $alias[] = $chain->getFirstElement()->getAliasFragment(); } // add other members of chain /** @var QueryChainElement[] $elements */ $elements = array_slice($elements, 1); foreach ($elements as $element) { $fragment = $element->getAliasFragment(); if (strlen($fragment)) { $alias[] = $fragment; } } return join('_', $alias); }
public static function rewriteUserShortName(&$select, &$runtime, $format, $entity, $grc = false) { foreach ($select as $k => $def) { if (is_string($def) && (substr($def, -11) == '.SHORT_NAME' || $def === 'SHORT_NAME') || is_array($def) && count($def['expression']) === 2 && substr($def['expression'][1], -11) == '.SHORT_NAME') { $definition = is_string($def) ? $def : $def['expression'][1]; $pre = substr($definition, 0, -11); $_alias = Entity\QueryChain::getAliasByDefinition($entity, $definition); $expression = self::getFormattedNameExpr($format, $pre); // show login if names is null global $DB; $nNameElements = count($expression) - 1; if ($nNameElements < 1) { $expression = array($DB->IsNull('%s', '\' \''), (empty($pre) ? '' : $pre . '.') . 'LOGIN'); } else { $arConcatNameElements = array($DB->IsNull('%s', '\' \'')); if (($n = $nNameElements) > 1) { while (--$n > 0) { $arConcatNameElements[] = $DB->IsNull('%s', '\' \''); } } $strConcatNameElements = call_user_func_array(array($DB, 'concat'), $arConcatNameElements); $expression[0] = 'CASE WHEN ' . $DB->Length('LTRIM(RTRIM(' . $strConcatNameElements . '))') . '>0 THEN ' . $expression[0] . ' ELSE %s END'; if ($nNameElements > 1) { for ($i = 1; $i <= $nNameElements; $i++) { $expression[] = $expression[$i]; } } $expression[] = (empty($pre) ? '' : $pre . '.') . 'LOGIN'; } // modify select unset($select[$k]); if (is_string($def)) { $runtime[$_alias] = array('data_type' => 'string', 'expression' => $expression); } else { // add aggr if (substr($def['expression'][0], 0, 14) == 'COUNT(DISTINCT') { $_alias = 'COUNT_DISTINCT_' . $_alias; } elseif ($grc) { $_alias = 'GROUP_CONCAT_' . $_alias; } $expression[0] = str_replace('%s', $expression[0], $def['expression'][0]); $runtime[$_alias] = array('data_type' => 'integer', 'expression' => $expression); } $select[] = $_alias; } } }
public function getBuildFromChains() { if (is_null($this->buildFromChains)) { $this->buildFromChains = array(); foreach ($this->buildFrom as $elem) { // validate if build from scalar or expression $chain = QueryChain::getChainByDefinition($this->entity, $elem); $field = $chain->getLastElement()->getValue(); if ($field instanceof ScalarField || $field instanceof ExpressionField) { $this->buildFromChains[] = $chain; } else { throw new SystemException(sprintf('Expected ScalarField or ExpressionField in `%s` build_from, but `%s` was given.', $this->name, is_object($field) ? get_class($field) . ':' . $field->getName() : gettype($field))); } } } return $this->buildFromChains; }
public static function rewriteUserShortName(&$select, $format, $entity, $grc = false) { foreach ($select as $k => $def) { if (is_string($def) && substr($def, -11) == '.SHORT_NAME' || is_array($def) && substr($def['expression'][1], -11) == '.SHORT_NAME') { $definition = is_string($def) ? $def : $def['expression'][1]; $pre = substr($definition, 0, -11); $_alias = Entity\QueryChain::getAliasByDefinition($entity, $definition); $expression = self::getFormattedNameExpr($format, $pre); // modify select unset($select[$k]); if (is_string($def)) { $select[$_alias] = array('data_type' => 'string', 'expression' => $expression); } else { // add aggr if (substr($def['expression'][0], 0, 14) == 'COUNT(DISTINCT') { $_alias = 'COUNT_DISTINCT_' . $_alias; } elseif ($grc) { $_alias = 'GROUP_CONCAT_' . $_alias; } $expression[0] = str_replace('%s', $expression[0], $def['expression'][0]); $select[$_alias] = array('data_type' => 'integer', 'expression' => $expression); } } } }