5 use Doctrine\DBAL\Query\Expression\CompositeExpression;
 
   27         $count_expr = $this->options->distinct ? 
"DISTINCT {$qb->getTableAlias()}.id" : 
'*';
 
   28         $qb->select(
"COUNT({$count_expr}) AS total");
 
   51     public function calculate($function, $property, $property_type = 
null) {
 
   53             throw new DomainException(
"'{$function}' is not a valid numeric function");
 
   56         if (!isset($property_type)) {
 
   57             $property_type = 
'annotation';
 
   62         switch ($property_type) {
 
   69                 $qb->select(
"{$function}({$alias}.{$property}) AS calculation");
 
   74                 if (!empty($this->options->annotation_name_value_pairs) && $this->options->annotation_name_value_pairs[0]->names != $property) {
 
   75                     $alias = 
$qb->joinAnnotationTable(
$qb->getTableAlias(), 
'entity_guid', $property);
 
   78                 $qb->select(
"{$function}({$alias}.value) AS calculation");
 
   82                 $alias = 
$qb->joinMetadataTable(
$qb->getTableAlias(), 
'entity_guid', $property);
 
   83                 $qb->select(
"{$function}({$alias}.value) AS calculation");
 
  106         $distinct = $this->options->distinct ? 
'DISTINCT ' : 
'';
 
  107         $qb->select(
"{$distinct}{$qb->getTableAlias()}.*");
 
  114         $original_order = 
elgg_extract(
'order_by', $this->options->__original_options);
 
  115         if (empty($this->options->order_by) && $original_order !== 
false) {
 
  116             $qb->addOrderBy(
"{$qb->getTableAlias()}.time_created", 
'asc');
 
  117             $qb->addOrderBy(
"{$qb->getTableAlias()}.id", 
'asc');
 
  125         $callback = $callback ?: $this->options->callback;
 
  126         if (!isset($callback)) {
 
  127             $callback = 
function ($row) {
 
  128                 return new \ElggAnnotation($row);
 
  133         if (!empty(
$results) && $this->options->preload_owners) {
 
  147         if ($this->options->annotation_calculation) {
 
  148             $clauses = $this->options->annotation_name_value_pairs;
 
  149             if (
count($clauses) > 1 && $this->options->annotation_name_value_pairs_operator !== 
'OR') {
 
  150                 throw new LogicException(
'Annotation calculation can not be performed on multiple annotation name value pairs merged with AND');
 
  153             $clause = array_shift($clauses);
 
  155             return $this->
calculate($this->options->annotation_calculation, $clause->names, 
'annotation');
 
  156         } 
elseif ($this->options->metadata_calculation) {
 
  157             $clauses = $this->options->metadata_name_value_pairs;
 
  158             if (
count($clauses) > 1 && $this->options->metadata_name_value_pairs_operator !== 
'OR') {
 
  159                 throw new LogicException(
'Metadata calculation can not be performed on multiple metadata name value pairs merged with AND');
 
  162             $clause = array_shift($clauses);
 
  164             return $this->
calculate($this->options->metadata_calculation, $clause->names, 
'metadata');
 
  165         } 
elseif ($this->options->count) {
 
  166             return $this->
count();
 
  167         } 
elseif ($this->options->batch) {
 
  168             return $this->
batch($this->options->limit, $this->options->offset, $this->options->callback);
 
  170             return $this->
get($this->options->limit, $this->options->offset, $this->options->callback);
 
  184         foreach ($this->options->joins as $join) {
 
  185             $join->prepare(
$qb, 
$qb->getTableAlias());
 
  188         foreach ($this->options->wheres as $where) {
 
  189             $ands[] = $where->prepare(
$qb, 
$qb->getTableAlias());
 
  192         $ands[] = $this->
buildPairedAnnotationClause($qb, $this->options->annotation_name_value_pairs, $this->options->annotation_name_value_pairs_operator);
 
  194         $ands[] = $this->
buildPairedMetadataClause($qb, $this->options->metadata_name_value_pairs, $this->options->metadata_name_value_pairs_operator);
 
  198         $ands = 
$qb->merge($ands);
 
  201             $qb->andWhere($ands);
 
  217         return EntityWhereClause::factory($this->options)->prepare(
$qb, $joined_alias);
 
  233         if (empty($clauses)) {
 
  238         foreach ($clauses as $clause) {
 
  239             $parts[] = $clause->prepare(
$qb, 
$qb->getTableAlias());
 
  242         return $qb->merge($parts, $boolean);
 
  258         foreach ($clauses as $clause) {
 
  259             if (strtoupper($boolean) === 
'OR' || 
count($clauses) === 1) {
 
  262                 $joined_alias = 
$qb->joinMetadataTable(
$qb->getTableAlias(), 
'entity_guid', $clause->names);
 
  265             $parts[] = $clause->prepare(
$qb, $joined_alias);
 
  268         return $qb->merge($parts, $boolean);
 
  284         foreach ($clauses as $clause) {
 
  285             $join_on = $clause->join_on == 
'guid' ? 
'entity_guid' : $clause->join_on;
 
  286             if (strtoupper($boolean) === 
'OR' || 
count($clauses) === 1) {
 
  289                 $joined_alias = 
$qb->joinRelationshipTable(
$qb->getTableAlias(), $join_on, $clause->names, $clause->inverse);
 
  292             $parts[] = $clause->prepare(
$qb, $joined_alias);
 
  295         return $qb->merge($parts, $boolean);
 
Annotation repository contains methods for fetching annotations from database or performing calculati...
buildPairedMetadataClause(QueryBuilder $qb, $clauses, $boolean='AND')
Process metadata name value pairs Joins metadata table on entity_guid in the annotations table and ap...
buildQuery(QueryBuilder $qb)
Build a database query.
buildPairedRelationshipClause(QueryBuilder $qb, $clauses, $boolean='AND')
Process relationship name value pairs Joins relationship table on entity_guid in the annotations tabl...
execute()
Execute the query resolving calculation, count and/or batch options.
buildPairedAnnotationClause(QueryBuilder $qb, $clauses, $boolean='AND')
Process annotation name value pairs Applies where clauses to the selected annotation table.
calculate($function, $property, $property_type=null)
Performs a mathematical calculation on metadata or metadata entity's properties.
buildEntityWhereClause(QueryBuilder $qb)
Process entity attribute wheres Joins entities table on entity guid in annotations table and applies ...
Builds queries for matching annotations against their properties.
Builds queries for filtering entities by their properties in the entities table.
Builds clauses for filtering entities by their properties in entity_relationships table.
Database abstraction query builder.
Abstract methods for interfacing with the database.
expandInto(QueryBuilder $qb, $table_alias=null)
Extend query builder with select, group_by, having and order_by clauses from $options.
batch($limit=null, $offset=null, $callback=null)
Fetch rows as an ElggBatch.
static fromTable(string $table, ?string $alias=null)
Returns a QueryBuilder for selecting data from a given table.
Exception thrown if a value does not adhere to a defined valid data domain.
Exception that represents error in the program logic.
if($item instanceof \ElggEntity) elseif($item instanceof \ElggRiverItem) elseif($item instanceof \ElggRelationship) elseif(is_callable([ $item, 'getType']))
_elgg_services()
Get the global service provider.
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.