The SQL storage entity query aggregate class.
Expanded class hierarchy of QueryAggregate
class QueryAggregate extends Query implements QueryAggregateInterface {
/**
* Stores the sql expressions used to build the sql query.
*
* @var array
* An array of expressions.
*/
protected $sqlExpressions = array();
/**
* Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::execute().
*/
public function execute() {
return $this
->prepare()
->addAggregate()
->compile()
->compileAggregate()
->addGroupBy()
->addSort()
->addSortAggregate()
->finish()
->result();
}
/**
* Overrides \Drupal\field_sql_storage\Entity::prepare().
*/
public function prepare() {
parent::prepare();
// Throw away the id fields.
$this->sqlFields = array();
return $this;
}
/**
* Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::conditionAggregateGroupFactory().
*/
public function conditionAggregateGroupFactory($conjunction = 'AND') {
return new ConditionAggregate($conjunction);
}
/**
* Overrides \Drupal\Core\Entity\QueryBase::exists().
*/
public function existsAggregate($field, $function, $langcode = NULL) {
return $this->conditionAggregate
->exists($field, $function, $langcode);
}
/**
* Overrides \Drupal\Core\Entity\QueryBase::notExists().
*/
public function notExistsAggregate($field, $function, $langcode = NULL) {
return $this->conditionAggregate
->notExists($field, $function, $langcode);
}
/**
* Adds the aggregations to the query.
*
* @return \Drupal\field_sql_storage\Entity\QueryAggregate
* Returns the called object.
*/
protected function addAggregate() {
if ($this->aggregate) {
foreach ($this->aggregate as $aggregate) {
$sql_field = $this
->getSqlField($aggregate['field'], $aggregate['langcode']);
$this->sqlExpressions[$aggregate['alias']] = $aggregate['function'] . "({$sql_field})";
}
}
return $this;
}
/**
* Builds the aggregation conditions part of the query.
*
* @return \Drupal\field_sql_storage\Entity\QueryAggregate
* Returns the called object.
*/
protected function compileAggregate() {
$this->conditionAggregate
->compile($this->sqlQuery);
return $this;
}
/**
* Adds the groupby values to the actual query.
*
* @return \Drupal\field_sql_storage\Entity\QueryAggregate
* Returns the called object.
*/
protected function addGroupBy() {
foreach ($this->groupBy as $group_by) {
$field = $group_by['field'];
$sql_field = $this
->getSqlField($field, $group_by['langcode']);
$this->sqlGroupBy[$sql_field] = $sql_field;
list($table, $real_sql_field) = explode('.', $sql_field);
$this->sqlFields[$sql_field] = array(
$table,
$real_sql_field,
$this
->createSqlAlias($field, $real_sql_field),
);
}
return $this;
}
/**
* Builds the aggregation sort part of the query.
*
* @return \Drupal\field_sql_storage\Entity\QueryAggregate
* Returns the called object.
*/
protected function addSortAggregate() {
if (!$this->count) {
foreach ($this->sortAggregate as $alias => $sort) {
$this->sqlQuery
->orderBy($this->sqlExpressions[$alias], $sort['direction']);
}
}
return $this;
}
/**
* Overrides \Drupal\field_sql_storage\Entity\Query::finish().
*
* Adds the sql expressions to the query.
*/
protected function finish() {
foreach ($this->sqlExpressions as $alias => $expression) {
$this->sqlQuery
->addExpression($expression, $alias);
}
return parent::finish();
}
/**
* Builds a sql alias as expected in the result.
*
* @param string $field
* The field as passed in by the caller.
* @param string $sql_field
* The sql field as returned by getSqlField.
* @return string
* The SQL alias expected in the return value. The dots in $sql_field are
* replaced with underscores and if a default fallback to .value happened,
* the _value is stripped.
*/
function createSqlAlias($field, $sql_field) {
$alias = str_replace('.', '_', $sql_field);
// If the alias contains of field_*_value remove the _value at the end.
if (substr($alias, 0, 6) === 'field_' && substr($field, -6) !== '_value' && substr($alias, -6) === '_value') {
$alias = substr($alias, 0, -6);
}
return $alias;
}
/**
* Overrides \Drupal\field_sql_storage\Entity\Query::result().
*
* @return array|int
* Returns the aggregated result, or a number if it's a count query.
*/
protected function result() {
if ($this->count) {
return parent::result();
}
$return = array();
foreach ($this->sqlQuery
->execute() as $row) {
$return[] = (array) $row;
}
return $return;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
Query:: |
protected | property | ||
Query:: |
protected | property | Contains the entity info for the entity type of that query. | |
Query:: |
protected | property | Stores the entity manager used by the query. | |
Query:: |
protected | property | An array of fields keyed by the field alias. | |
Query:: |
protected | property | An array of strings added as to the group by, keyed by the string to avoid duplicates. | |
Query:: |
protected | property | The build sql select query. | |
Query:: |
protected | function | Adds the sort to the build query. | |
Query:: |
protected | function | Compiles the conditions. | |
Query:: |
public | function |
Implements Drupal\Core\Entity\Query\QueryInterface::conditionGroupFactory(). Overrides QueryInterface:: |
|
Query:: |
protected | function | Constructs a select expression for a given field and language. | |
Query:: |
protected | function | Returns whether the query requires GROUP BY and ORDER BY MIN/MAX. | |
Query:: |
public | function |
Implements the magic __clone method. Overrides QueryBase:: |
|
Query:: |
public | function |
Constructs a query object. Overrides QueryBase:: |
|
QueryAggregate:: |
protected | property | Stores the sql expressions used to build the sql query. | |
QueryAggregate:: |
protected | function | Adds the aggregations to the query. | |
QueryAggregate:: |
protected | function | Adds the groupby values to the actual query. | |
QueryAggregate:: |
protected | function | Builds the aggregation sort part of the query. | |
QueryAggregate:: |
protected | function | Builds the aggregation conditions part of the query. | |
QueryAggregate:: |
public | function |
Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::conditionAggregateGroupFactory(). Overrides QueryAggregateInterface:: |
|
QueryAggregate:: |
function | Builds a sql alias as expected in the result. | ||
QueryAggregate:: |
public | function |
Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::execute(). Overrides Query:: |
|
QueryAggregate:: |
public | function |
Overrides \Drupal\Core\Entity\QueryBase::exists(). Overrides QueryAggregateInterface:: |
|
QueryAggregate:: |
protected | function |
Overrides \Drupal\field_sql_storage\Entity\Query::finish(). Overrides Query:: |
|
QueryAggregate:: |
public | function |
Overrides \Drupal\Core\Entity\QueryBase::notExists(). Overrides QueryAggregateInterface:: |
|
QueryAggregate:: |
public | function |
Overrides \Drupal\field_sql_storage\Entity::prepare(). Overrides Query:: |
|
QueryAggregate:: |
protected | function |
Overrides \Drupal\field_sql_storage\Entity\Query::result(). Overrides Query:: |
|
QueryBase:: |
protected | property | Whether access check is requested or not. Defaults to TRUE. | |
QueryBase:: |
protected | property | Flag indicating whether to query the current revision or all revisions. | |
QueryBase:: |
protected | property | The list of aggregate expressions. | |
QueryBase:: |
protected | property | The query metadata for alter purposes. | |
QueryBase:: |
protected | property | The query tags. | |
QueryBase:: |
protected | property | Conditions. | 1 |
QueryBase:: |
protected | property | Aggregate Conditions | |
QueryBase:: |
protected | property | TRUE if this is a count query, FALSE if it isn't. | |
QueryBase:: |
protected | property | The entity type this query runs against. | |
QueryBase:: |
protected | property | The list of columns to group on. | |
QueryBase:: |
protected | property | The query pager data. | |
QueryBase:: |
protected | property | The query range. | |
QueryBase:: |
protected | property | The list of sorts. | |
QueryBase:: |
protected | property | The list of sorts over the aggregate results. | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::accessCheck(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::addMetaData(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::addTag(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::age(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::aggregate() | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::andConditionGroup(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::condition(). | 1 |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::conditionAggregate(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::count(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::exists(). | |
QueryBase:: |
protected | function | Generates an alias for a field and it's aggregated function. | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::getEntityType(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::getMetaData(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::execute(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::hasAllTags(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::hasAnyTag(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Database\Query\AlterableInterface::hasTag(). | |
QueryBase:: |
protected | function | Gets the total number of results and initialize a pager for the query. | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::notExists(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::orConditionGroup(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::pager(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::range(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::sort(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryAggregateInterface::sortAggregate(). | |
QueryBase:: |
public | function | Implements \Drupal\Core\Entity\Query\QueryInterface::tableSort(). |