44 public function __construct(
protected readonly Connection $backup_connection) {
45 parent::__construct($backup_connection);
56 return $this->backup_connection;
69 $qb->from($table, $alias);
87 $expr = $clause->
prepare($this, $alias);
88 if ($clause instanceof
WhereClause && ($expr instanceof CompositeExpression || is_string($expr))) {
89 $this->andWhere($expr);
104 if ($prefix ===
'') {
108 if (!str_starts_with($table, $prefix)) {
109 return "{$prefix}{$table}";
145 $parameters = $this->getParameters();
152 $type = ParameterType::INTEGER;
157 $type = ParameterType::INTEGER;
161 $type = ParameterType::INTEGER;
165 $type = ParameterType::INTEGER;
170 $type = ParameterType::STRING;
175 $type = ParameterType::INTEGER;
185 if (
$type === ParameterType::INTEGER) {
186 $type = ArrayParameterType::INTEGER;
188 $type = ArrayParameterType::STRING;
201 public function execute(
bool $track_query =
true) {
203 if ($this instanceof
Select) {
204 return parent::executeQuery();
206 return parent::executeStatement();
211 if ($this instanceof
Select) {
212 return parent::executeQuery();
214 return parent::executeStatement();
224 public function from(
string $table, ?
string $alias = null): self {
225 $this->table_name =
$table;
226 $this->table_alias = $alias;
228 return parent::from($this->
prefix($table), $alias);
237 $this->table_name =
$table;
239 return parent::insert($this->
prefix($table));
248 $this->table_name =
$table;
250 return parent::update($this->
prefix($table));
258 public function delete(
string $table):
self {
259 $this->table_name =
$table;
267 public function join(
string $fromAlias,
string $join,
string $alias, ?
string $condition = null): self {
268 return parent::join($fromAlias, $this->
prefix($join), $alias, $condition);
274 public function innerJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition = null): self {
275 return parent::innerJoin($fromAlias, $this->
prefix($join), $alias, $condition);
281 public function leftJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition = null): self {
282 return parent::leftJoin($fromAlias, $this->
prefix($join), $alias, $condition);
288 public function rightJoin(
string $fromAlias,
string $join,
string $alias, ?
string $condition = null): self {
289 return parent::rightJoin($fromAlias, $this->
prefix($join), $alias, $condition);
300 public function merge($parts = null, $boolean =
'AND') {
305 $parts = (array) $parts;
307 $parts = array_filter($parts,
function ($e) {
312 if (!$e instanceof CompositeExpression && !is_string($e)) {
322 if (
count($parts) === 1) {
323 return array_shift($parts);
328 $parts = array_values($parts);
330 return call_user_func_array([$this->expr(),
'or'], $parts);
333 return call_user_func_array([$this->expr(),
'and'], $parts);
352 public function compare(
string $x,
string $comparison, $y = null,
string $type = null,
bool $case_sensitive = null) {
366 public function between(
string $x, $lower = null, $upper = null,
string $type = null) {
376 return $this->
merge($wheres);
387 return "qbt{$this->join_index}";
400 public function joinEntitiesTable(
string $from_alias =
'',
string $from_column =
'guid', ?
string $join_type =
'inner',
string $joined_alias = null): string {
401 if (in_array($joined_alias, $this->joins)) {
402 return $joined_alias;
406 $from_column =
"{$from_alias}.{$from_column}";
409 $hash = sha1(serialize([
415 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
416 return $this->joins[$hash];
419 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column) {
420 return $qb->
compare(
"{$joined_alias}.guid",
'=', $from_column);
424 $joined_alias = $clause->prepare($this, $from_alias);
426 $this->joins[$hash] = $joined_alias;
428 return $joined_alias;
442 public function joinMetadataTable(
string $from_alias =
'',
string $from_column =
'guid',
$name = null, ?
string $join_type =
'inner',
string $joined_alias = null): string {
443 if (in_array($joined_alias, $this->joins)) {
444 return $joined_alias;
448 $from_column =
"{$from_alias}.{$from_column}";
451 $hash = sha1(serialize([
458 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
459 return $this->joins[$hash];
462 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
464 $qb->
compare(
"{$joined_alias}.entity_guid",
'=', $from_column),
471 $joined_alias = $clause->prepare($this, $from_alias);
473 $this->joins[$hash] = $joined_alias;
475 return $joined_alias;
489 public function joinAnnotationTable(
string $from_alias =
'',
string $from_column =
'guid',
$name = null, ?
string $join_type =
'inner',
string $joined_alias = null): string {
490 if (in_array($joined_alias, $this->joins)) {
491 return $joined_alias;
495 $from_column =
"{$from_alias}.{$from_column}";
498 $hash = sha1(serialize([
505 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
506 return $this->joins[$hash];
509 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
511 $qb->
compare(
"{$joined_alias}.entity_guid",
'=', $from_column),
518 $joined_alias = $clause->prepare($this, $from_alias);
520 $this->joins[$hash] = $joined_alias;
522 return $joined_alias;
537 public function joinRelationshipTable(
string $from_alias =
'',
string $from_column =
'guid',
$name = null,
bool $inverse =
false, ?
string $join_type =
'inner',
string $joined_alias = null): string {
538 if (in_array($joined_alias, $this->joins)) {
539 return $joined_alias;
543 $from_column =
"{$from_alias}.{$from_column}";
546 $hash = sha1(serialize([
554 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
555 return $this->joins[$hash];
558 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name, $inverse) {
561 $parts[] = $qb->
compare(
"{$joined_alias}.guid_one",
'=', $from_column);
563 $parts[] = $qb->
compare(
"{$joined_alias}.guid_two",
'=', $from_column);
567 return $qb->
merge($parts);
572 $joined_alias = $clause->prepare($this, $from_alias);
574 $this->joins[$hash] = $joined_alias;
576 return $joined_alias;
getTableName()
Returns the name of the primary table.
joinAnnotationTable(string $from_alias= '', string $from_column= 'guid', $name=null,?string $join_type= 'inner', string $joined_alias=null)
Join annotations table from alias and return joined table alias.
Utility class for building composite comparison expression.
static normalizeGuids(...$args)
Flatten an array of data into an array of GUIDs.
from(string $table,?string $alias=null)
{}
innerJoin(string $fromAlias, string $join, string $alias,?string $condition=null)
{}
param($value, string $type=ELGG_VALUE_STRING, string $key=null)
Sets a new parameter assigning it a unique parameter key/name if none provided Returns the name of th...
Saves user notification settings.
if(!$user||!$user->canDelete()) $name
subquery(string $table, string $alias=null)
Creates a new SelectQueryBuilder for join/where sub queries using the DB connection of the primary Qu...
Interface that allows resolving statements and/or extending query builder.
const ELGG_VALUE_INTEGER
Value types.
addClause(Clause $clause, string $alias=null)
Apply clause to this instance.
Extends QueryBuilder with JOIN clauses.
Database abstraction query builder.
__construct(protected readonly Connection $backup_connection)
Initializes a new QueryBuilder.
getConnection()
Returns the connection.
if($item instanceof\ElggEntity) elseif($item instanceof\ElggRiverItem) elseif($item instanceof\ElggRelationship) elseif(is_callable([$item, 'getType']))
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.
compare(string $x, string $comparison, $y=null, string $type=null, bool $case_sensitive=null)
Build value comparison clause.
static normalizeIds(...$args)
Prepare IDs.
joinEntitiesTable(string $from_alias= '', string $from_column= 'guid',?string $join_type= 'inner', string $joined_alias=null)
Join entity table from alias and return joined table alias.
joinRelationshipTable(string $from_alias= '', string $from_column= 'guid', $name=null, bool $inverse=false,?string $join_type= 'inner', string $joined_alias=null)
Join relationship table from alias and return joined table alias.
getNextJoinAlias()
Get an index of the next available join alias.
const ELGG_VALUE_TIMESTAMP
if($container instanceof ElggGroup &&$container->guid!=elgg_get_page_owner_guid()) $key
joinMetadataTable(string $from_alias= '', string $from_column= 'guid', $name=null,?string $join_type= 'inner', string $joined_alias=null)
Join metadata 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.
prefix(string $table)
Prefixes the table name with installation DB prefix.
execute(bool $track_query=true)
rightJoin(string $fromAlias, string $join, string $alias,?string $condition=null)
{}
_elgg_services()
Get the global service provider.
join(string $fromAlias, string $join, string $alias,?string $condition=null)
{}
leftJoin(string $fromAlias, string $join, string $alias,?string $condition=null)
{}
between(string $x, $lower=null, $upper=null, string $type=null)
Build a between clause.
Query builder for fetching data from the database.