83 $expr = $clause->
prepare($this, $alias);
84 if ($clause instanceof
WhereClause && ($expr instanceof CompositeExpression || is_string($expr))) {
85 $this->andWhere($expr);
100 if ($prefix ===
'') {
105 return "{$prefix}{$table}";
140 $parameters = $this->getParameters();
147 $type = ParameterType::INTEGER;
152 $type = ParameterType::INTEGER;
156 $type = ParameterType::INTEGER;
160 $type = ParameterType::INTEGER;
165 $type = ParameterType::STRING;
170 $type = ParameterType::INTEGER;
180 if (
$type === ParameterType::INTEGER) {
181 $type = Connection::PARAM_INT_ARRAY;
183 $type = Connection::PARAM_STR_ARRAY;
196 public function execute(
bool $track_query =
true) {
199 if ($this instanceof
Select) {
200 return parent::executeQuery();
202 return parent::executeStatement();
207 if ($this instanceof
Select) {
208 return parent::executeQuery();
210 return parent::executeStatement();
221 $this->table_name =
$table;
222 $this->table_alias = $alias;
233 $this->table_name = $insert;
235 return parent::insert($this->
prefix($insert));
244 $this->table_name =
$table;
245 $this->table_alias = $alias;
255 public function delete(
$table = null, $alias = null) {
256 $this->table_name =
$table;
257 $this->table_alias = $alias;
265 public function join($fromAlias, $join, $alias, $condition = null) {
266 return parent::join($fromAlias, $this->
prefix($join), $alias, $condition);
272 public function innerJoin($fromAlias, $join, $alias, $condition = null) {
273 return parent::innerJoin($fromAlias, $this->
prefix($join), $alias, $condition);
279 public function leftJoin($fromAlias, $join, $alias, $condition = null) {
280 return parent::leftJoin($fromAlias, $this->
prefix($join), $alias, $condition);
286 public function rightJoin($fromAlias, $join, $alias, $condition = null) {
287 return parent::rightJoin($fromAlias, $this->
prefix($join), $alias, $condition);
298 public function merge($parts = null, $boolean =
'AND') {
303 $parts = (array) $parts;
305 $parts = array_filter($parts,
function ($e) {
309 if (!$e instanceof CompositeExpression && !is_string($e)) {
319 if (
count($parts) === 1) {
320 return array_shift($parts);
325 $parts = array_values($parts);
327 return call_user_func_array([$this->expr(),
'or'], $parts);
329 return call_user_func_array([$this->expr(),
'and'], $parts);
349 public function compare($x, $comparison, $y = null,
$type = null, $case_sensitive = null) {
362 public function between($x, $lower = null, $upper = null,
$type = null) {
371 return $this->
merge($wheres);
381 return "qbt{$this->join_index}";
394 public function joinEntitiesTable($from_alias =
'', $from_column =
'guid', $join_type =
'inner', $joined_alias = null) {
395 if (in_array($joined_alias, $this->joins)) {
396 return $joined_alias;
400 $from_column =
"$from_alias.$from_column";
403 $hash = sha1(serialize([
405 self::TABLE_ENTITIES,
409 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
410 return $this->joins[$hash];
413 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column) {
414 return $qb->
compare(
"$joined_alias.guid",
'=', $from_column);
417 $clause =
new JoinClause(self::TABLE_ENTITIES, $joined_alias, $condition, $join_type);
418 $joined_alias = $clause->prepare($this, $from_alias);
420 $this->joins[$hash] = $joined_alias;
422 return $joined_alias;
436 public function joinMetadataTable($from_alias =
'', $from_column =
'guid',
$name = null, $join_type =
'inner', $joined_alias = null) {
437 if (in_array($joined_alias, $this->joins)) {
438 return $joined_alias;
442 $from_column =
"$from_alias.$from_column";
445 $hash = sha1(serialize([
447 self::TABLE_METADATA,
452 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
453 return $this->joins[$hash];
456 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
458 $qb->
compare(
"$joined_alias.entity_guid",
'=', $from_column),
463 $clause =
new JoinClause(self::TABLE_METADATA, $joined_alias, $condition, $join_type);
465 $joined_alias = $clause->prepare($this, $from_alias);
467 $this->joins[$hash] = $joined_alias;
469 return $joined_alias;
483 public function joinAnnotationTable($from_alias =
'', $from_column =
'guid',
$name = null, $join_type =
'inner', $joined_alias = null) {
484 if (in_array($joined_alias, $this->joins)) {
485 return $joined_alias;
489 $from_column =
"$from_alias.$from_column";
492 $hash = sha1(serialize([
494 self::TABLE_ANNOTATIONS,
499 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
500 return $this->joins[$hash];
503 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
505 $qb->
compare(
"$joined_alias.entity_guid",
'=', $from_column),
510 $clause =
new JoinClause(self::TABLE_ANNOTATIONS, $joined_alias, $condition, $join_type);
512 $joined_alias = $clause->prepare($this, $from_alias);
514 $this->joins[$hash] = $joined_alias;
516 return $joined_alias;
531 if (in_array($joined_alias, $this->joins)) {
532 return $joined_alias;
536 $from_column =
"$from_alias.$from_column";
539 $hash = sha1(serialize([
541 self::TABLE_PRIVATE_SETTINGS,
546 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
547 return $this->joins[$hash];
550 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
552 $qb->
compare(
"$joined_alias.entity_guid",
'=', $from_column),
557 $clause =
new JoinClause(self::TABLE_PRIVATE_SETTINGS, $joined_alias, $condition, $join_type);
559 $joined_alias = $clause->prepare($this, $from_alias);
561 $this->joins[$hash] = $joined_alias;
563 return $joined_alias;
578 public function joinRelationshipTable($from_alias =
'', $from_column =
'guid',
$name = null, $inverse =
false, $join_type =
'inner', $joined_alias = null) {
579 if (in_array($joined_alias, $this->joins)) {
580 return $joined_alias;
584 $from_column =
"$from_alias.$from_column";
587 $hash = sha1(serialize([
589 self::TABLE_RELATIONSHIPS,
595 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
596 return $this->joins[$hash];
599 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name, $inverse) {
602 $parts[] = $qb->
compare(
"$joined_alias.guid_one",
'=', $from_column);
604 $parts[] = $qb->
compare(
"$joined_alias.guid_two",
'=', $from_column);
607 return $qb->
merge($parts);
610 $clause =
new JoinClause(self::TABLE_RELATIONSHIPS, $joined_alias, $condition, $join_type);
612 $joined_alias = $clause->prepare($this, $from_alias);
614 $this->joins[$hash] = $joined_alias;
616 return $joined_alias;
getTableName()
Returns the name of the primary table.
prefix($table)
Prefixes the table name with installation DB prefix.
Utility class for building composite comparison expression.
static normalizeGuids(...$args)
Flatten an array of data into an array of GUIDs.
innerJoin($fromAlias, $join, $alias, $condition=null)
{}
getConnection(string $type)
Gets (if required, also creates) a DB connection.
Saves user notification settings.
if(!$user||!$user->canDelete()) $name
Interface that allows resolving statements and/or extending query builder.
const ELGG_VALUE_INTEGER
Value types.
Extends QueryBuilder with JOIN clauses.
Database abstraction query builder.
joinEntitiesTable($from_alias= '', $from_column= 'guid', $join_type= 'inner', $joined_alias=null)
Join entity table from alias and return joined table alias.
rightJoin($fromAlias, $join, $alias, $condition=null)
{}
const TABLE_PRIVATE_SETTINGS
prepare(QueryBuilder $qb, $table_alias=null)
Build an expression and/or apply it to an instance of query builder.
static normalizeTimestamp($time)
Returns timestamp value of the time representation.
between($x, $lower=null, $upper=null, $type=null)
Build a between clause.
addClause(Clause $clause, $alias=null)
Apply clause to this instance.
join($fromAlias, $join, $alias, $condition=null)
{}
const TABLE_RELATIONSHIPS
leftJoin($fromAlias, $join, $alias, $condition=null)
{}
static normalizeIds(...$args)
Prepare IDs.
compare($x, $comparison, $y=null, $type=null, $case_sensitive=null)
Build value comparison clause.
joinAnnotationTable($from_alias= '', $from_column= 'guid', $name=null, $join_type= 'inner', $joined_alias=null)
Join annotations table from alias and return joined table alias.
getNextJoinAlias()
Get an index of the next available join alias.
param($value, $type=null, $key=null)
Sets a new parameter assigning it a unique parameter key/name if none provided Returns the name of th...
subquery($table, $alias=null)
Creates a new SelectQueryBuilder for join/where subqueries using the DB connection of the primary Que...
const ELGG_VALUE_TIMESTAMP
if($container instanceof ElggGroup &&$container->guid!=elgg_get_page_owner_guid()) $key
joinPrivateSettingsTable($from_alias= '', $from_column= 'guid', $name=null, $join_type= 'inner', $joined_alias=null)
Join private settings table from alias and return joined table alias.
getTableAlias()
Returns the alias of the primary table.
Builds a clause from closure or composite expression.
merge($parts=null, $boolean= 'AND')
Merges multiple composite expressions with a boolean.
if($item instanceof\ElggEntity) elseif($item instanceof\ElggRiverItem) elseif($item instanceof ElggRelationship) elseif(is_callable([$item, 'getType']))
execute(bool $track_query=true)
_elgg_services()
Get the global service provider.
joinMetadataTable($from_alias= '', $from_column= 'guid', $name=null, $join_type= 'inner', $joined_alias=null)
Join metadata table from alias and return joined table alias.
joinRelationshipTable($from_alias= '', $from_column= 'guid', $name=null, $inverse=false, $join_type= 'inner', $joined_alias=null)
Join relationship table from alias and return joined table alias.
from($table, $alias=null)
{}
Query builder for fetching data from the database.
update($table=null, $alias=null)
{}