70 $expr = $clause->
prepare($this, $alias);
71 if ($clause instanceof
WhereClause && ($expr instanceof CompositeExpression || is_string($expr))) {
72 $this->andWhere($expr);
91 if (!str_starts_with(
$table, $prefix)) {
92 return "{$prefix}{$table}";
127 $parameters = $this->getParameters();
134 $type = ParameterType::INTEGER;
139 $type = ParameterType::INTEGER;
143 $type = ParameterType::INTEGER;
147 $type = ParameterType::INTEGER;
152 $type = ParameterType::STRING;
157 $type = ParameterType::INTEGER;
167 if (
$type === ParameterType::INTEGER) {
168 $type = Connection::PARAM_INT_ARRAY;
170 $type = Connection::PARAM_STR_ARRAY;
183 public function execute(
bool $track_query =
true) {
186 if ($this instanceof
Select) {
187 return parent::executeQuery();
189 return parent::executeStatement();
194 if ($this instanceof
Select) {
195 return parent::executeQuery();
197 return parent::executeStatement();
207 public function from($from, $alias = null) {
208 $this->table_name = $from;
209 $this->table_alias = $alias;
211 return parent::from($this->
prefix($from), $alias);
220 $this->table_name = $insert;
222 return parent::insert($this->
prefix($insert));
230 public function update($update = null, $alias = null) {
231 $this->table_name = $update;
232 $this->table_alias = $alias;
234 return parent::update($this->
prefix($update), $alias);
242 public function delete(
$delete = null, $alias = null) {
244 $this->table_alias = $alias;
252 public function join($fromAlias, $join, $alias, $condition = null) {
253 return parent::join($fromAlias, $this->
prefix($join), $alias, $condition);
259 public function innerJoin($fromAlias, $join, $alias, $condition = null) {
260 return parent::innerJoin($fromAlias, $this->
prefix($join), $alias, $condition);
266 public function leftJoin($fromAlias, $join, $alias, $condition = null) {
267 return parent::leftJoin($fromAlias, $this->
prefix($join), $alias, $condition);
273 public function rightJoin($fromAlias, $join, $alias, $condition = null) {
274 return parent::rightJoin($fromAlias, $this->
prefix($join), $alias, $condition);
285 public function merge($parts = null, $boolean =
'AND') {
290 $parts = (array) $parts;
292 $parts = array_filter($parts,
function ($e) {
297 if (!$e instanceof CompositeExpression && !is_string($e)) {
307 if (
count($parts) === 1) {
308 return array_shift($parts);
313 $parts = array_values($parts);
315 return call_user_func_array([$this->expr(),
'or'], $parts);
317 return call_user_func_array([$this->expr(),
'and'], $parts);
337 public function compare($x, $comparison, $y = null,
$type = null, $case_sensitive = null) {
351 public function between($x, $lower = null, $upper = null,
$type = null) {
361 return $this->
merge($wheres);
371 return "qbt{$this->join_index}";
384 public function joinEntitiesTable($from_alias =
'', $from_column =
'guid', $join_type =
'inner', $joined_alias = null) {
385 if (in_array($joined_alias, $this->joins)) {
386 return $joined_alias;
390 $from_column =
"$from_alias.$from_column";
393 $hash = sha1(serialize([
395 self::TABLE_ENTITIES,
399 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
400 return $this->joins[$hash];
403 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column) {
404 return $qb->
compare(
"$joined_alias.guid",
'=', $from_column);
407 $clause =
new JoinClause(self::TABLE_ENTITIES, $joined_alias, $condition, $join_type);
408 $joined_alias = $clause->prepare($this, $from_alias);
410 $this->joins[$hash] = $joined_alias;
412 return $joined_alias;
426 public function joinMetadataTable($from_alias =
'', $from_column =
'guid',
$name = null, $join_type =
'inner', $joined_alias = null) {
427 if (in_array($joined_alias, $this->joins)) {
428 return $joined_alias;
432 $from_column =
"$from_alias.$from_column";
435 $hash = sha1(serialize([
437 self::TABLE_METADATA,
442 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
443 return $this->joins[$hash];
446 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
448 $qb->
compare(
"$joined_alias.entity_guid",
'=', $from_column),
453 $clause =
new JoinClause(self::TABLE_METADATA, $joined_alias, $condition, $join_type);
455 $joined_alias = $clause->prepare($this, $from_alias);
457 $this->joins[$hash] = $joined_alias;
459 return $joined_alias;
473 public function joinAnnotationTable($from_alias =
'', $from_column =
'guid',
$name = null, $join_type =
'inner', $joined_alias = null) {
474 if (in_array($joined_alias, $this->joins)) {
475 return $joined_alias;
479 $from_column =
"$from_alias.$from_column";
482 $hash = sha1(serialize([
484 self::TABLE_ANNOTATIONS,
489 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
490 return $this->joins[$hash];
493 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name) {
495 $qb->
compare(
"$joined_alias.entity_guid",
'=', $from_column),
500 $clause =
new JoinClause(self::TABLE_ANNOTATIONS, $joined_alias, $condition, $join_type);
502 $joined_alias = $clause->prepare($this, $from_alias);
504 $this->joins[$hash] = $joined_alias;
506 return $joined_alias;
521 public function joinRelationshipTable($from_alias =
'', $from_column =
'guid',
$name = null, $inverse =
false, $join_type =
'inner', $joined_alias = null) {
522 if (in_array($joined_alias, $this->joins)) {
523 return $joined_alias;
527 $from_column =
"$from_alias.$from_column";
530 $hash = sha1(serialize([
532 self::TABLE_RELATIONSHIPS,
538 if (!isset($joined_alias) && !empty($this->joins[$hash])) {
539 return $this->joins[$hash];
542 $condition =
function (
QueryBuilder $qb, $joined_alias) use ($from_column, $name, $inverse) {
545 $parts[] = $qb->
compare(
"{$joined_alias}.guid_one",
'=', $from_column);
547 $parts[] = $qb->
compare(
"{$joined_alias}.guid_two",
'=', $from_column);
551 return $qb->
merge($parts);
554 $clause =
new JoinClause(self::TABLE_RELATIONSHIPS, $joined_alias, $condition, $join_type);
556 $joined_alias = $clause->prepare($this, $from_alias);
558 $this->joins[$hash] = $joined_alias;
560 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)
{}
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.
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
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.
update($update=null, $alias=null)
{}
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($from, $alias=null)
{}
Query builder for fetching data from the database.