composer update + SQL Compare refactored

This commit is contained in:
Roman Hergenreder 2022-11-26 23:57:28 +01:00
parent b1c4c9e976
commit 3b2b5984d6
23 changed files with 317 additions and 540 deletions

@ -15,10 +15,10 @@ namespace Core\API {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$res = $sql->select($sql->count()) $res = $sql->select($sql->count())
->from("ApiKey") ->from("ApiKey")
->where(new Compare("id", $id)) ->whereEq("id", $id)
->where(new Compare("user_id", $this->context->getUser()->getId())) ->whereEq("user_id", $this->context->getUser()->getId())
->where(new Compare("valid_until", $sql->currentTimestamp(), ">")) ->whereGt("valid_until", $sql->currentTimestamp())
->where(new Compare("active", 1)) ->whereEq("active", 1)
->execute(); ->execute();
$this->success = ($res !== FALSE); $this->success = ($res !== FALSE);
@ -120,12 +120,12 @@ namespace Core\API\ApiKey {
return false; return false;
} }
$validUntil = (new \DateTime)->modify("+30 DAY"); $validUntil = (new \DateTime())->modify("+30 DAY");
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$this->success = $sql->update("ApiKey") $this->success = $sql->update("ApiKey")
->set("valid_until", $validUntil) ->set("valid_until", $validUntil)
->where(new Compare("id", $id)) ->whereEq("id", $id)
->where(new Compare("user_id", $this->context->getUser()->getId())) ->whereEq("user_id", $this->context->getUser()->getId())
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
@ -155,8 +155,8 @@ namespace Core\API\ApiKey {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$this->success = $sql->update("ApiKey") $this->success = $sql->update("ApiKey")
->set("active", false) ->set("active", false)
->where(new Compare("id", $id)) ->whereEq("id", $id)
->where(new Compare("user_id", $this->context->getUser()->getId())) ->whereEq("user_id", $this->context->getUser()->getId())
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();

@ -15,7 +15,7 @@ namespace Core\API {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$res = $sql->select($sql->count()) $res = $sql->select($sql->count())
->from("Group") ->from("Group")
->where(new Compare("name", $name)) ->whereEq("name", $name)
->execute(); ->execute();
$this->success = ($res !== FALSE); $this->success = ($res !== FALSE);

@ -94,7 +94,7 @@ namespace Core\API\Language {
$this->success = $sql->update("User") $this->success = $sql->update("User")
->set("language_id", $languageId) ->set("language_id", $languageId)
->where(new Compare("id", $userId)) ->whereEq("id", $userId)
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();

@ -223,8 +223,8 @@ namespace Core\API\Mail {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$mailQueueItems = MailQueueItem::findBy(MailQueueItem::createBuilder($sql, false) $mailQueueItems = MailQueueItem::findBy(MailQueueItem::createBuilder($sql, false)
->where(new Compare("retryCount", 0, ">")) ->whereGt("retryCount", 0)
->where(new Compare("status", "waiting")) ->whereEq("status", "waiting")
->where(new Compare("nextTry", $sql->now(), "<="))); ->where(new Compare("nextTry", $sql->now(), "<=")));
$this->success = ($mailQueueItems !== false); $this->success = ($mailQueueItems !== false);

@ -183,7 +183,7 @@ namespace Core\API\Permission {
if ($this->success) { if ($this->success) {
$res = $sql->delete("ApiPermission") $res = $sql->delete("ApiPermission")
->where(new Compare("description", "")) // only delete non default permissions ->whereEq("description", "") // only delete non default permissions
->where(new CondNot(new CondIn(new Column("method"), $insertedMethods))) ->where(new CondNot(new CondIn(new Column("method"), $insertedMethods)))
->execute(); ->execute();

@ -22,7 +22,7 @@ namespace Core\API {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$res = $sql->select($sql->count()) $res = $sql->select($sql->count())
->from("Route") ->from("Route")
->where(new Compare("id", $uid)) ->whereEq("id", $uid)
->execute(); ->execute();
$this->success = ($res !== false); $this->success = ($res !== false);
@ -44,7 +44,7 @@ namespace Core\API {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$this->success = $sql->update("Route") $this->success = $sql->update("Route")
->set("active", $active) ->set("active", $active)
->where(new Compare("id", $uid)) ->whereEq("id", $uid)
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
@ -275,7 +275,7 @@ namespace Core\API\Routes {
->set("action", $action) ->set("action", $action)
->set("target", $target) ->set("target", $target)
->set("extra", $extra) ->set("extra", $extra)
->where(new Compare("id", $id)) ->whereEq("id", $id)
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
@ -294,14 +294,14 @@ namespace Core\API\Routes {
public function _execute(): bool { public function _execute(): bool {
$uid = $this->getParam("id"); $id = $this->getParam("id");
if (!$this->routeExists($uid)) { if (!$this->routeExists($id)) {
return false; return false;
} }
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$this->success = $sql->delete("Route") $this->success = $sql->delete("Route")
->where(new Compare("id", $uid)) ->where("id", $id)
->execute(); ->execute();
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();

@ -86,7 +86,7 @@ namespace Core\API\TFA {
if ($password) { if ($password) {
$res = $sql->select("password") $res = $sql->select("password")
->from("User") ->from("User")
->where(new Compare("id", $currentUser->getId())) ->whereEq("id", $currentUser->getId())
->execute(); ->execute();
$this->success = !empty($res); $this->success = !empty($res);
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
@ -101,7 +101,7 @@ namespace Core\API\TFA {
} }
$res = $sql->delete("2FA") $res = $sql->delete("2FA")
->where(new Compare("id", $token->getId())) ->whereEq("id", $token->getId())
->execute(); ->execute();
$this->success = $res !== false; $this->success = $res !== false;
@ -164,7 +164,8 @@ namespace Core\API\TFA {
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
if ($this->success) { if ($this->success) {
$this->success = $sql->update("User") $this->success = $sql->update("User")
->set("2fa_id", $sql->getLastInsertId())->where(new Compare("id", $currentUser->getId())) ->set("2fa_id", $sql->getLastInsertId())
->whereEq("id", $currentUser->getId())
->execute() !== false; ->execute() !== false;
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
} }
@ -196,7 +197,7 @@ namespace Core\API\TFA {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$this->success = $sql->update("2FA") $this->success = $sql->update("2FA")
->set("confirmed", true) ->set("confirmed", true)
->where(new Compare("id", $twoFactorToken->getId())) ->whereEq("id", $twoFactorToken->getId())
->execute() !== false; ->execute() !== false;
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
return $this->success; return $this->success;
@ -282,7 +283,7 @@ namespace Core\API\TFA {
$this->success = $sql->update("User") $this->success = $sql->update("User")
->set("2fa_id", $sql->getLastInsertId()) ->set("2fa_id", $sql->getLastInsertId())
->where(new Compare("id", $currentUser->getId())) ->whereEq("id", $currentUser->getId())
->execute() !== false; ->execute() !== false;
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
if (!$this->success) { if (!$this->success) {
@ -328,7 +329,7 @@ namespace Core\API\TFA {
$this->success = $sql->update("2FA") $this->success = $sql->update("2FA")
->set("data", json_encode($data)) ->set("data", json_encode($data))
->set("confirmed", true) ->set("confirmed", true)
->where(new Compare("id", $twoFactorToken->getId())) ->whereEq("id", $twoFactorToken->getId())
->execute() !== false; ->execute() !== false;
$this->lastError = $sql->getLastError(); $this->lastError = $sql->getLastError();
} }

@ -109,9 +109,9 @@ namespace Core\API {
protected function checkToken(string $token) : UserToken|bool { protected function checkToken(string $token) : UserToken|bool {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$userToken = UserToken::findBy(UserToken::createBuilder($sql, true) $userToken = UserToken::findBy(UserToken::createBuilder($sql, true)
->where(new Compare("UserToken.token", $token)) ->whereEq("UserToken.token", $token)
->where(new Compare("UserToken.valid_until", $sql->now(), ">")) ->whereGt("UserToken.valid_until", $sql->now())
->where(new Compare("UserToken.used", 0)) ->whereFalse("UserToken.used")
->fetchEntities()); ->fetchEntities());
if ($userToken === false) { if ($userToken === false) {
@ -841,7 +841,7 @@ namespace Core\API\User {
if ($user->save($sql)) { if ($user->save($sql)) {
$deleteQuery = $sql->delete("UserGroup")->where(new Compare("user_id", $id)); $deleteQuery = $sql->delete("UserGroup")->whereEq("user_id", $id);
$insertQuery = $sql->insert("UserGroup", array("user_id", "group_id")); $insertQuery = $sql->insert("UserGroup", array("user_id", "group_id"));
foreach ($groupIds as $groupId) { foreach ($groupIds as $groupId) {
@ -928,7 +928,7 @@ namespace Core\API\User {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$email = $this->getParam("email"); $email = $this->getParam("email");
$user = User::findBy(User::createBuilder($sql, true) $user = User::findBy(User::createBuilder($sql, true)
->where(new Compare("email", $email)) ->whereEq("email", $email)
->fetchEntities()); ->fetchEntities());
if ($user === false) { if ($user === false) {
return $this->createError("Could not fetch user details: " . $sql->getLastError()); return $this->createError("Could not fetch user details: " . $sql->getLastError());
@ -1009,8 +1009,8 @@ namespace Core\API\User {
$email = $this->getParam("email"); $email = $this->getParam("email");
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$user = User::findBy(User::createBuilder($sql, true) $user = User::findBy(User::createBuilder($sql, true)
->where(new Compare("User.email", $email)) ->whereEq("User.email", $email)
->where(new Compare("User.confirmed", false))); ->whereFalse("User.confirmed"));
if ($user === false) { if ($user === false) {
return $this->createError("Error retrieving user details: " . $sql->getLastError()); return $this->createError("Error retrieving user details: " . $sql->getLastError());
@ -1020,9 +1020,9 @@ namespace Core\API\User {
} }
$userToken = UserToken::findBy(UserToken::createBuilder($sql, true) $userToken = UserToken::findBy(UserToken::createBuilder($sql, true)
->where(new Compare("used", false)) ->whereFalse("used")
->where(new Compare("tokenType", UserToken::TYPE_EMAIL_CONFIRM)) ->whereEq("tokenType", UserToken::TYPE_EMAIL_CONFIRM)
->where(new Compare("user_id", $user->getId()))); ->whereEq("user_id", $user->getId()));
$validHours = 48; $validHours = 48;
if ($userToken === false) { if ($userToken === false) {
@ -1333,10 +1333,10 @@ namespace Core\API\User {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$userToken = UserToken::findBy(UserToken::createBuilder($sql, true) $userToken = UserToken::findBy(UserToken::createBuilder($sql, true)
->where(new Compare("token", $token)) ->whereEq("token", $token)
->where(new Compare("valid_until", $sql->now(), ">=")) ->where(new Compare("valid_until", $sql->now(), ">="))
->where(new Compare("user_id", $currentUser->getId())) ->whereEq("user_id", $currentUser->getId())
->where(new Compare("token_type", UserToken::TYPE_GPG_CONFIRM))); ->whereEq("token_type", UserToken::TYPE_GPG_CONFIRM));
if ($userToken !== false) { if ($userToken !== false) {
if ($userToken === null) { if ($userToken === null) {

@ -84,7 +84,7 @@ namespace Core\API\Visitors {
$sql = $this->context->getSQL(); $sql = $this->context->getSQL();
$query = $sql->select($sql->count(), "day") $query = $sql->select($sql->count(), "day")
->from("Visitor") ->from("Visitor")
->where(new Compare("count", 1, ">")) ->whereGt("count", 1)
->groupBy("day") ->groupBy("day")
->orderBy("day") ->orderBy("day")
->ascending(); ->ascending();

@ -39,8 +39,8 @@ class EntityLog_2021_04_08 extends DatabaseScript {
->exec(array( ->exec(array(
$sql->update("EntityLog") $sql->update("EntityLog")
->set("modified", $sql->now()) ->set("modified", $sql->now())
->where(new Compare("entityId", new CurrentColumn("id"))) ->whereEq("entityId", new CurrentColumn("id"))
->where(new Compare("tableName", new CurrentTable())) ->whereEq("tableName", new CurrentTable())
)); ));
$deleteProcedure = $sql->createProcedure("DeleteEntityLog") $deleteProcedure = $sql->createProcedure("DeleteEntityLog")
@ -49,8 +49,8 @@ class EntityLog_2021_04_08 extends DatabaseScript {
->returns(new Trigger()) ->returns(new Trigger())
->exec(array( ->exec(array(
$sql->delete("EntityLog") $sql->delete("EntityLog")
->where(new Compare("entityId", new CurrentColumn("id"))) ->whereEq("entityId", new CurrentColumn("id"))
->where(new Compare("tableName", new CurrentTable())) ->whereEq("tableName", new CurrentTable())
)); ));
$queries[] = $insertProcedure; $queries[] = $insertProcedure;

@ -0,0 +1,9 @@
<?php
namespace Core\Driver\SQL\Join;
class InnerJoin extends Join {
public function __construct(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []) {
parent::__construct("INNER", $table, $columnA, $columnB, $tableAlias, $conditions);
}
}

@ -1,6 +1,6 @@
<?php <?php
namespace Core\Driver\SQL; namespace Core\Driver\SQL\Join;
use Core\Driver\SQL\Column\Column; use Core\Driver\SQL\Column\Column;
use Core\Driver\SQL\Condition\Compare; use Core\Driver\SQL\Condition\Compare;

@ -0,0 +1,9 @@
<?php
namespace Core\Driver\SQL\Join;
class LeftJoin extends Join {
public function __construct(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []) {
parent::__construct("LEFT", $table, $columnA, $columnB, $tableAlias, $conditions);
}
}

@ -0,0 +1,63 @@
<?php
namespace Core\Driver\SQL\Query;
use Core\Driver\SQL\Condition\Compare;
use Core\Driver\SQL\Condition\CondBool;
use Core\Driver\SQL\Condition\CondNot;
use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\SQL;
abstract class ConditionalQuery extends Query {
private array $conditions;
public function __construct(SQL $sql) {
parent::__construct($sql);
$this->conditions = [];
}
public function getWhereClause(array &$params): string {
return $this->sql->getWhereClause($this->getConditions(), $params);
}
public function getConditions(): array {
return $this->conditions;
}
public function where(...$conditions): static {
$this->conditions[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions));
return $this;
}
public function whereEq(string $col, mixed $val): static {
$this->conditions[] = new Compare($col, $val, "=");
return $this;
}
public function whereNeq(string $col, mixed $val): static {
$this->conditions[] = new Compare($col, $val, "!=");
return $this;
}
public function whereGt(string $col, mixed $val): static {
$this->conditions[] = new Compare($col, $val, ">");
return $this;
}
public function whereLt(string $col, mixed $val): static {
$this->conditions[] = new Compare($col, $val, "<");
return $this;
}
public function whereTrue(string $col): static {
$this->conditions[] = new CondBool($col);
return $this;
}
public function whereFalse(string $col): static {
$this->conditions[] = new CondNot(new CondBool($col));
return $this;
}
}

@ -5,28 +5,20 @@ namespace Core\Driver\SQL\Query;
use Core\Driver\SQL\Condition\CondOr; use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\SQL; use Core\Driver\SQL\SQL;
class Delete extends Query { class Delete extends ConditionalQuery {
private string $table; private string $table;
private array $conditions;
public function __construct(SQL $sql, string $table) { public function __construct(SQL $sql, string $table) {
parent::__construct($sql); parent::__construct($sql);
$this->table = $table; $this->table = $table;
$this->conditions = array();
}
public function where(...$conditions): Delete {
$this->conditions[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions));
return $this;
} }
public function getTable(): string { return $this->table; } public function getTable(): string { return $this->table; }
public function getConditions(): array { return $this->conditions; }
public function build(array &$params): ?string { public function build(array &$params): ?string {
$table = $this->sql->tableName($this->getTable()); $table = $this->sql->tableName($this->getTable());
$where = $this->sql->getWhereClause($this->getConditions(), $params); $where = $this->getWhereClause($params);
return "DELETE FROM $table$where"; return "DELETE FROM $table$where";
} }
} }

@ -4,14 +4,15 @@ namespace Core\Driver\SQL\Query;
use Core\Driver\SQL\Condition\CondOr; use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\Expression\JsonArrayAgg; use Core\Driver\SQL\Expression\JsonArrayAgg;
use Core\Driver\SQL\Join; use Core\Driver\SQL\Join\InnerJoin;
use Core\Driver\SQL\Join\Join;
use Core\Driver\SQL\Join\LeftJoin;
use Core\Driver\SQL\SQL; use Core\Driver\SQL\SQL;
class Select extends Query { class Select extends ConditionalQuery {
private array $selectValues; private array $selectValues;
private array $tables; private array $tables;
private array $conditions;
private array $joins; private array $joins;
private array $orderColumns; private array $orderColumns;
private array $groupColumns; private array $groupColumns;
@ -26,7 +27,6 @@ class Select extends Query {
parent::__construct($sql); parent::__construct($sql);
$this->selectValues = (!empty($selectValues) && is_array($selectValues[0])) ? $selectValues[0] : $selectValues; $this->selectValues = (!empty($selectValues) && is_array($selectValues[0])) ? $selectValues[0] : $selectValues;
$this->tables = array(); $this->tables = array();
$this->conditions = array();
$this->havings = array(); $this->havings = array();
$this->joins = array(); $this->joins = array();
$this->orderColumns = array(); $this->orderColumns = array();
@ -53,23 +53,18 @@ class Select extends Query {
return $this; return $this;
} }
public function where(...$conditions): Select {
$this->conditions[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions));
return $this;
}
public function having(...$conditions): Select { public function having(...$conditions): Select {
$this->havings[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions)); $this->havings[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions));
return $this; return $this;
} }
public function innerJoin(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []): Select { public function innerJoin(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []): Select {
$this->joins[] = new Join("INNER", $table, $columnA, $columnB, $tableAlias, $conditions); $this->joins[] = new InnerJoin($table, $columnA, $columnB, $tableAlias, $conditions);
return $this; return $this;
} }
public function leftJoin(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []): Select { public function leftJoin(string $table, string $columnA, string $columnB, ?string $tableAlias = null, array $conditions = []): Select {
$this->joins[] = new Join("LEFT", $table, $columnA, $columnB, $tableAlias, $conditions); $this->joins[] = new LeftJoin($table, $columnA, $columnB, $tableAlias, $conditions);
return $this; return $this;
} }
@ -133,7 +128,6 @@ class Select extends Query {
public function getSelectValues(): array { return $this->selectValues; } public function getSelectValues(): array { return $this->selectValues; }
public function getTables(): array { return $this->tables; } public function getTables(): array { return $this->tables; }
public function getConditions(): array { return $this->conditions; }
public function getJoins(): array { return $this->joins; } public function getJoins(): array { return $this->joins; }
public function isOrderedAscending(): bool { return $this->sortAscending; } public function isOrderedAscending(): bool { return $this->sortAscending; }
public function getOrderBy(): array { return $this->orderColumns; } public function getOrderBy(): array { return $this->orderColumns; }
@ -180,7 +174,7 @@ class Select extends Query {
} }
$tables = $this->sql->tableName($tables); $tables = $this->sql->tableName($tables);
$where = $this->sql->getWhereClause($this->getConditions(), $params); $where = $this->getWhereClause($params);
$havingClause = ""; $havingClause = "";
if (count($this->havings) > 0) { if (count($this->havings) > 0) {
$havingClause = " HAVING " . $this->sql->buildCondition($this->getHavings(), $params); $havingClause = " HAVING " . $this->sql->buildCondition($this->getHavings(), $params);

@ -2,25 +2,17 @@
namespace Core\Driver\SQL\Query; namespace Core\Driver\SQL\Query;
use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\SQL; use Core\Driver\SQL\SQL;
class Update extends Query { class Update extends ConditionalQuery {
private array $values; private array $values;
private string $table; private string $table;
private array $conditions;
public function __construct(SQL $sql, string $table) { public function __construct(SQL $sql, string $table) {
parent::__construct($sql); parent::__construct($sql);
$this->values = array(); $this->values = array();
$this->table = $table; $this->table = $table;
$this->conditions = array();
}
public function where(...$conditions): Update {
$this->conditions[] = (count($conditions) === 1 ? $conditions : new CondOr($conditions));
return $this;
} }
public function set(string $key, $val): Update { public function set(string $key, $val): Update {
@ -29,7 +21,6 @@ class Update extends Query {
} }
public function getTable(): string { return $this->table; } public function getTable(): string { return $this->table; }
public function getConditions(): array { return $this->conditions; }
public function getValues(): array { return $this->values; } public function getValues(): array { return $this->values; }
public function build(array &$params): ?string { public function build(array &$params): ?string {
@ -41,7 +32,7 @@ class Update extends Query {
} }
$valueStr = implode(",", $valueStr); $valueStr = implode(",", $valueStr);
$where = $this->sql->getWhereClause($this->getConditions(), $params); $where = $this->getWhereClause($params);
return "UPDATE $table SET $valueStr$where"; return "UPDATE $table SET $valueStr$where";
} }
} }

548
Core/External/composer.lock generated vendored

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "af894b476b8bab945acf32399608ac5f", "content-hash": "dc183c367dc010feed9b7ddaa7d54559",
"packages": [ "packages": [
{ {
"name": "beberlei/assert", "name": "beberlei/assert",
@ -135,20 +135,20 @@
}, },
{ {
"name": "chillerlan/php-qrcode", "name": "chillerlan/php-qrcode",
"version": "4.3.3", "version": "4.3.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git", "url": "https://github.com/chillerlan/php-qrcode.git",
"reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3" "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/6356b246948ac1025882b3f55e7c68ebd4515ae3", "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3", "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"chillerlan/php-settings-container": "^2.1", "chillerlan/php-settings-container": "^2.1.4",
"ext-mbstring": "*", "ext-mbstring": "*",
"php": "^7.4 || ^8.0" "php": "^7.4 || ^8.0"
}, },
@ -197,7 +197,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues", "issues": "https://github.com/chillerlan/php-qrcode/issues",
"source": "https://github.com/chillerlan/php-qrcode/tree/4.3.3" "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
}, },
"funding": [ "funding": [
{ {
@ -209,20 +209,20 @@
"type": "ko_fi" "type": "ko_fi"
} }
], ],
"time": "2021-11-25T22:38:09+00:00" "time": "2022-07-25T09:12:45+00:00"
}, },
{ {
"name": "chillerlan/php-settings-container", "name": "chillerlan/php-settings-container",
"version": "2.1.3", "version": "2.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git", "url": "https://github.com/chillerlan/php-settings-container.git",
"reference": "125dd573b45ffc7cabecf385986a356ba2c6f602" "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/125dd573b45ffc7cabecf385986a356ba2c6f602", "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
"reference": "125dd573b45ffc7cabecf385986a356ba2c6f602", "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -273,7 +273,7 @@
"type": "ko_fi" "type": "ko_fi"
} }
], ],
"time": "2022-03-09T13:18:58+00:00" "time": "2022-07-05T22:32:14+00:00"
}, },
{ {
"name": "christian-riesen/base32", "name": "christian-riesen/base32",
@ -411,16 +411,16 @@
}, },
{ {
"name": "firebase/php-jwt", "name": "firebase/php-jwt",
"version": "v6.2.0", "version": "v6.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/firebase/php-jwt.git", "url": "https://github.com/firebase/php-jwt.git",
"reference": "d28e6df83830252650da4623c78aaaf98fb385f3" "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/d28e6df83830252650da4623c78aaaf98fb385f3", "url": "https://api.github.com/repos/firebase/php-jwt/zipball/ddfaddcb520488b42bca3a75e17e9dd53c3667da",
"reference": "d28e6df83830252650da4623c78aaaf98fb385f3", "reference": "ddfaddcb520488b42bca3a75e17e9dd53c3667da",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -467,22 +467,63 @@
], ],
"support": { "support": {
"issues": "https://github.com/firebase/php-jwt/issues", "issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/v6.2.0" "source": "https://github.com/firebase/php-jwt/tree/v6.3.1"
}, },
"time": "2022-05-13T20:54:50+00:00" "time": "2022-11-01T21:20:08+00:00"
}, },
{ {
"name": "myclabs/php-enum", "name": "html2text/html2text",
"version": "1.8.3", "version": "4.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/myclabs/php-enum.git", "url": "https://github.com/mtibben/html2text.git",
"reference": "b942d263c641ddb5190929ff840c68f78713e937" "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937", "url": "https://api.github.com/repos/mtibben/html2text/zipball/61ad68e934066a6f8df29a3d23a6460536d0855c",
"reference": "b942d263c641ddb5190929ff840c68f78713e937", "reference": "61ad68e934066a6f8df29a3d23a6460536d0855c",
"shasum": ""
},
"require-dev": {
"phpunit/phpunit": "~4"
},
"suggest": {
"ext-mbstring": "For best performance",
"symfony/polyfill-mbstring": "If you can't install ext-mbstring"
},
"type": "library",
"autoload": {
"psr-4": {
"Html2Text\\": [
"src/",
"test/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"description": "Converts HTML to formatted plain text",
"support": {
"issues": "https://github.com/mtibben/html2text/issues",
"source": "https://github.com/mtibben/html2text/tree/4.3.1"
},
"time": "2020-04-16T23:44:31+00:00"
},
{
"name": "myclabs/php-enum",
"version": "1.8.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/php-enum.git",
"reference": "a867478eae49c9f59ece437ae7f9506bfaa27483"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483",
"reference": "a867478eae49c9f59ece437ae7f9506bfaa27483",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -498,7 +539,10 @@
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"MyCLabs\\Enum\\": "src/" "MyCLabs\\Enum\\": "src/"
} },
"classmap": [
"stubs/Stringable.php"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
@ -517,7 +561,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/myclabs/php-enum/issues", "issues": "https://github.com/myclabs/php-enum/issues",
"source": "https://github.com/myclabs/php-enum/tree/1.8.3" "source": "https://github.com/myclabs/php-enum/tree/1.8.4"
}, },
"funding": [ "funding": [
{ {
@ -529,20 +573,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2021-07-05T08:18:36+00:00" "time": "2022-08-04T09:53:51+00:00"
}, },
{ {
"name": "php-mqtt/client", "name": "php-mqtt/client",
"version": "v1.4.0", "version": "v1.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-mqtt/client.git", "url": "https://github.com/php-mqtt/client.git",
"reference": "d54381306e68baf7c2c089392c0c6d1d06e278c6" "reference": "22a207edef01d5f0ed3a6a79565cc425b678d786"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-mqtt/client/zipball/d54381306e68baf7c2c089392c0c6d1d06e278c6", "url": "https://api.github.com/repos/php-mqtt/client/zipball/22a207edef01d5f0ed3a6a79565cc425b678d786",
"reference": "d54381306e68baf7c2c089392c0c6d1d06e278c6", "reference": "22a207edef01d5f0ed3a6a79565cc425b678d786",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -584,36 +628,36 @@
], ],
"support": { "support": {
"issues": "https://github.com/php-mqtt/client/issues", "issues": "https://github.com/php-mqtt/client/issues",
"source": "https://github.com/php-mqtt/client/tree/v1.4.0" "source": "https://github.com/php-mqtt/client/tree/v1.6.0"
}, },
"time": "2022-06-15T19:19:03+00:00" "time": "2022-11-01T20:00:19+00:00"
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "1.1.4", "version": "3.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11" "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11", "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.0" "php": ">=8.0.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.1.x-dev" "dev-master": "3.x-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Psr\\Log\\": "Psr/Log/" "Psr\\Log\\": "src"
} }
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@ -634,9 +678,9 @@
"psr-3" "psr-3"
], ],
"support": { "support": {
"source": "https://github.com/php-fig/log/tree/1.1.4" "source": "https://github.com/php-fig/log/tree/3.0.0"
}, },
"time": "2021-05-03T11:20:27+00:00" "time": "2021-07-14T16:46:02+00:00"
}, },
{ {
"name": "spomky-labs/cbor-php", "name": "spomky-labs/cbor-php",
@ -720,16 +764,16 @@
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
"version": "v1.26.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git", "url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" "reference": "5bbc823adecdae860bb64756d639ecfec17b050a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a",
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "reference": "5bbc823adecdae860bb64756d639ecfec17b050a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -744,7 +788,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "1.26-dev" "dev-main": "1.27-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/polyfill", "name": "symfony/polyfill",
@ -782,7 +826,7 @@
"portable" "portable"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -798,20 +842,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-05-24T11:49:31+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.26.0", "version": "v1.27.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -826,7 +870,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-main": "1.26-dev" "dev-main": "1.27-dev"
}, },
"thanks": { "thanks": {
"name": "symfony/polyfill", "name": "symfony/polyfill",
@ -865,7 +909,7 @@
"shim" "shim"
], ],
"support": { "support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0"
}, },
"funding": [ "funding": [
{ {
@ -881,20 +925,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-05-24T11:49:31+00:00" "time": "2022-11-03T14:55:06+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v3.4.1", "version": "v3.4.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342" "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/e939eae92386b69b49cfa4599dd9bead6bf4a342", "url": "https://api.github.com/repos/twigphp/Twig/zipball/c38fd6b0b7f370c198db91ffd02e23b517426b58",
"reference": "e939eae92386b69b49cfa4599dd9bead6bf4a342", "reference": "c38fd6b0b7f370c198db91ffd02e23b517426b58",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -945,7 +989,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/twigphp/Twig/issues", "issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.4.1" "source": "https://github.com/twigphp/Twig/tree/v3.4.3"
}, },
"funding": [ "funding": [
{ {
@ -957,7 +1001,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-05-17T05:48:52+00:00" "time": "2022-09-28T08:42:51+00:00"
}, },
{ {
"name": "web-auth/cose-lib", "name": "web-auth/cose-lib",
@ -1155,16 +1199,16 @@
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.14.0", "version": "v4.15.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nikic/PHP-Parser.git", "url": "https://github.com/nikic/PHP-Parser.git",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1205,9 +1249,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nikic/PHP-Parser/issues", "issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2"
}, },
"time": "2022-05-31T20:59:12+00:00" "time": "2022-11-12T15:38:23+00:00"
}, },
{ {
"name": "phar-io/manifest", "name": "phar-io/manifest",
@ -1320,252 +1364,25 @@
}, },
"time": "2022-02-21T01:04:05+00:00" "time": "2022-02-21T01:04:05+00:00"
}, },
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-2.x": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jaap van Otterdijk",
"email": "opensource@ijaap.nl"
}
],
"description": "Common reflection classes used by phpdocumentor to reflect the code structure",
"homepage": "http://www.phpdoc.org",
"keywords": [
"FQSEN",
"phpDocumentor",
"phpdoc",
"reflection",
"static analysis"
],
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
"source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
"time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "5.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.3",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
"mockery/mockery": "~1.3.2",
"psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
},
{
"name": "Jaap van Otterdijk",
"email": "account@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
},
"time": "2021-10-19T17:43:47+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "77a32518733312af16a44300404e945338981de3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
"reference": "77a32518733312af16a44300404e945338981de3",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
"psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
},
"time": "2022-03-15T21:29:03+00:00"
},
{
"name": "phpspec/prophecy",
"version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2",
"php": "^7.2 || ~8.0, <8.2",
"phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0"
},
"require-dev": {
"phpspec/phpspec": "^6.0 || ^7.0",
"phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Prophecy\\": "src/Prophecy"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com",
"homepage": "http://everzet.com"
},
{
"name": "Marcello Duarte",
"email": "marcello.duarte@gmail.com"
}
],
"description": "Highly opinionated mocking framework for PHP 5.3+",
"homepage": "https://github.com/phpspec/prophecy",
"keywords": [
"Double",
"Dummy",
"fake",
"mock",
"spy",
"stub"
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
"source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
},
"time": "2021-12-08T12:19:24+00:00"
},
{ {
"name": "phpunit/php-code-coverage", "name": "phpunit/php-code-coverage",
"version": "9.2.15", "version": "9.2.19",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559",
"reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-dom": "*", "ext-dom": "*",
"ext-libxml": "*", "ext-libxml": "*",
"ext-xmlwriter": "*", "ext-xmlwriter": "*",
"nikic/php-parser": "^4.13.0", "nikic/php-parser": "^4.14",
"php": ">=7.3", "php": ">=7.3",
"phpunit/php-file-iterator": "^3.0.3", "phpunit/php-file-iterator": "^3.0.3",
"phpunit/php-text-template": "^2.0.2", "phpunit/php-text-template": "^2.0.2",
@ -1614,7 +1431,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19"
}, },
"funding": [ "funding": [
{ {
@ -1622,7 +1439,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-03-07T09:28:20+00:00" "time": "2022-11-18T07:47:47+00:00"
}, },
{ {
"name": "phpunit/php-file-iterator", "name": "phpunit/php-file-iterator",
@ -1867,16 +1684,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "9.5.20", "version": "9.5.26",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1891,7 +1708,6 @@
"phar-io/manifest": "^2.0.3", "phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2", "phar-io/version": "^3.0.2",
"php": ">=7.3", "php": ">=7.3",
"phpspec/prophecy": "^1.12.1",
"phpunit/php-code-coverage": "^9.2.13", "phpunit/php-code-coverage": "^9.2.13",
"phpunit/php-file-iterator": "^3.0.5", "phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1", "phpunit/php-invoker": "^3.1.1",
@ -1899,20 +1715,16 @@
"phpunit/php-timer": "^5.0.2", "phpunit/php-timer": "^5.0.2",
"sebastian/cli-parser": "^1.0.1", "sebastian/cli-parser": "^1.0.1",
"sebastian/code-unit": "^1.0.6", "sebastian/code-unit": "^1.0.6",
"sebastian/comparator": "^4.0.5", "sebastian/comparator": "^4.0.8",
"sebastian/diff": "^4.0.3", "sebastian/diff": "^4.0.3",
"sebastian/environment": "^5.1.3", "sebastian/environment": "^5.1.3",
"sebastian/exporter": "^4.0.3", "sebastian/exporter": "^4.0.5",
"sebastian/global-state": "^5.0.1", "sebastian/global-state": "^5.0.1",
"sebastian/object-enumerator": "^4.0.3", "sebastian/object-enumerator": "^4.0.3",
"sebastian/resource-operations": "^3.0.3", "sebastian/resource-operations": "^3.0.3",
"sebastian/type": "^3.0", "sebastian/type": "^3.2",
"sebastian/version": "^3.0.2" "sebastian/version": "^3.0.2"
}, },
"require-dev": {
"ext-pdo": "*",
"phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": { "suggest": {
"ext-soap": "*", "ext-soap": "*",
"ext-xdebug": "*" "ext-xdebug": "*"
@ -1954,7 +1766,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26"
}, },
"funding": [ "funding": [
{ {
@ -1964,9 +1776,13 @@
{ {
"url": "https://github.com/sebastianbergmann", "url": "https://github.com/sebastianbergmann",
"type": "github" "type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
"type": "tidelift"
} }
], ],
"time": "2022-04-01T12:37:26+00:00" "time": "2022-10-28T06:00:21+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@ -2137,16 +1953,16 @@
}, },
{ {
"name": "sebastian/comparator", "name": "sebastian/comparator",
"version": "4.0.6", "version": "4.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git", "url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "55f4261989e546dc112258c7a75935a81a7ce382" "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
"reference": "55f4261989e546dc112258c7a75935a81a7ce382", "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2199,7 +2015,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues", "issues": "https://github.com/sebastianbergmann/comparator/issues",
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
}, },
"funding": [ "funding": [
{ {
@ -2207,7 +2023,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2020-10-26T15:49:45+00:00" "time": "2022-09-14T12:41:17+00:00"
}, },
{ {
"name": "sebastian/complexity", "name": "sebastian/complexity",
@ -2397,16 +2213,16 @@
}, },
{ {
"name": "sebastian/exporter", "name": "sebastian/exporter",
"version": "4.0.4", "version": "4.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git", "url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2462,7 +2278,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues", "issues": "https://github.com/sebastianbergmann/exporter/issues",
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
}, },
"funding": [ "funding": [
{ {
@ -2470,7 +2286,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2021-11-11T14:18:36+00:00" "time": "2022-09-14T06:03:37+00:00"
}, },
{ {
"name": "sebastian/global-state", "name": "sebastian/global-state",
@ -2825,16 +2641,16 @@
}, },
{ {
"name": "sebastian/type", "name": "sebastian/type",
"version": "3.0.0", "version": "3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/type.git", "url": "https://github.com/sebastianbergmann/type.git",
"reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
"reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -2846,7 +2662,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.0-dev" "dev-master": "3.2-dev"
} }
}, },
"autoload": { "autoload": {
@ -2869,7 +2685,7 @@
"homepage": "https://github.com/sebastianbergmann/type", "homepage": "https://github.com/sebastianbergmann/type",
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/type/issues", "issues": "https://github.com/sebastianbergmann/type/issues",
"source": "https://github.com/sebastianbergmann/type/tree/3.0.0" "source": "https://github.com/sebastianbergmann/type/tree/3.2.0"
}, },
"funding": [ "funding": [
{ {
@ -2877,7 +2693,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2022-03-15T09:54:48+00:00" "time": "2022-09-12T14:47:03+00:00"
}, },
{ {
"name": "sebastian/version", "name": "sebastian/version",
@ -2981,64 +2797,6 @@
} }
], ],
"time": "2021-07-28T10:34:58+00:00" "time": "2021-07-28T10:34:58+00:00"
},
{
"name": "webmozart/assert",
"version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"php": "^7.2 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<0.12.20",
"vimeo/psalm": "<4.6.1 || 4.6.2"
},
"require-dev": {
"phpunit/phpunit": "^8.5.13"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
"keywords": [
"assert",
"check",
"validate"
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/1.11.0"
},
"time": "2022-06-03T18:03:27+00:00"
} }
], ],
"aliases": [], "aliases": [],
@ -3048,5 +2806,5 @@
"prefer-lowest": false, "prefer-lowest": false,
"platform": [], "platform": [],
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.2.0" "plugin-api-version": "2.3.0"
} }

@ -7,7 +7,7 @@ use Core\Configuration\Settings;
use Core\Driver\SQL\Condition\Compare; use Core\Driver\SQL\Condition\Compare;
use Core\Driver\SQL\Condition\CondLike; use Core\Driver\SQL\Condition\CondLike;
use Core\Driver\SQL\Condition\CondOr; use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\Join; use Core\Driver\SQL\Join\InnerJoin;
use Core\Driver\SQL\SQL; use Core\Driver\SQL\SQL;
use Firebase\JWT\JWT; use Firebase\JWT\JWT;
use Core\Objects\DatabaseEntity\Language; use Core\Objects\DatabaseEntity\Language;
@ -179,11 +179,11 @@ class Context {
public function loadApiKey(string $apiKey): bool { public function loadApiKey(string $apiKey): bool {
$this->user = User::findBy(User::createBuilder($this->sql, true) $this->user = User::findBy(User::createBuilder($this->sql, true)
->addJoin(new Join("INNER","ApiKey", "ApiKey.user_id", "User.id")) ->addJoin(new InnerJoin("ApiKey", "ApiKey.user_id", "User.id"))
->where(new Compare("ApiKey.api_key", $apiKey)) ->whereEq("ApiKey.api_key", $apiKey)
->where(new Compare("valid_until", $this->sql->currentTimestamp(), ">")) ->whereGt("valid_until", $this->sql->currentTimestamp())
->where(new Compare("ApiKey.active", true)) ->whereTrue("ApiKey.active", true)
->where(new Compare("User.confirmed", true)) ->whereTrue("User.confirmed", true)
->fetchEntities()); ->fetchEntities());
return $this->user !== null; return $this->user !== null;

@ -40,7 +40,7 @@ abstract class DatabaseEntity {
$handler = self::getHandler($sql); $handler = self::getHandler($sql);
if ($fetchEntities) { if ($fetchEntities) {
return DatabaseEntityQuery::fetchOne(self::getHandler($sql)) return DatabaseEntityQuery::fetchOne(self::getHandler($sql))
->where(new Compare($handler->getTableName() . ".id", $id)) ->whereEq($handler->getTableName() . ".id", $id)
->fetchEntities($fetchRecursive) ->fetchEntities($fetchRecursive)
->execute(); ->execute();
} else { } else {
@ -52,7 +52,7 @@ abstract class DatabaseEntity {
$handler = self::getHandler($sql); $handler = self::getHandler($sql);
$res = $sql->select($sql->count()) $res = $sql->select($sql->count())
->from($handler->getTableName()) ->from($handler->getTableName())
->where(new Compare($handler->getTableName() . ".id", $id)) ->whereEq($handler->getTableName() . ".id", $id)
->execute(); ->execute();
return $res !== false && $res[0]["count"] !== 0; return $res !== false && $res[0]["count"] !== 0;

@ -20,7 +20,7 @@ use Core\Driver\SQL\Column\FloatColumn;
use Core\Driver\SQL\Condition\CondNot; use Core\Driver\SQL\Condition\CondNot;
use Core\Driver\SQL\Condition\CondOr; use Core\Driver\SQL\Condition\CondOr;
use Core\Driver\SQL\Constraint\ForeignKey; use Core\Driver\SQL\Constraint\ForeignKey;
use Core\Driver\SQL\Join; use Core\Driver\SQL\Join\InnerJoin;
use Core\Driver\SQL\Query\CreateProcedure; use Core\Driver\SQL\Query\CreateProcedure;
use Core\Driver\SQL\Query\CreateTable; use Core\Driver\SQL\Query\CreateTable;
use Core\Driver\SQL\Query\Insert; use Core\Driver\SQL\Query\Insert;
@ -323,7 +323,7 @@ class DatabaseEntityHandler implements Persistable {
// delete from n:m table if no longer exists // delete from n:m table if no longer exists
$deleteStatement = $this->sql->delete($nmTable) $deleteStatement = $this->sql->delete($nmTable)
->where(new Compare($thisIdColumn, $entity->getId())); ->whereEq($thisIdColumn, $entity->getId());
if (!empty($dataColumns)) { if (!empty($dataColumns)) {
$conditions = []; $conditions = [];
@ -439,9 +439,8 @@ class DatabaseEntityHandler implements Persistable {
$dataColumns = $nmRelation->getDataColumns(); $dataColumns = $nmRelation->getDataColumns();
$relEntityQuery = DatabaseEntityQuery::fetchAll($otherHandler) $relEntityQuery = DatabaseEntityQuery::fetchAll($otherHandler)
->addJoin(new Join("INNER", $nmTable, "$nmTable.$refIdColumn", "$refTableName.id")) ->addJoin(new InnerJoin($nmTable, "$nmTable.$refIdColumn", "$refTableName.id"))
->where(new CondIn(new Column($thisIdColumn), $entityIds)) ->where(new CondIn(new Column($thisIdColumn), $entityIds));
->getQuery();
$relEntityQuery->addColumn($thisIdColumn); $relEntityQuery->addColumn($thisIdColumn);
foreach ($dataColumns as $tableDataColumns) { foreach ($dataColumns as $tableDataColumns) {
@ -498,7 +497,7 @@ class DatabaseEntityHandler implements Persistable {
public function fetchOne(int $id): DatabaseEntity|bool|null { public function fetchOne(int $id): DatabaseEntity|bool|null {
$res = $this->getSelectQuery() $res = $this->getSelectQuery()
->where(new Compare($this->tableName . ".id", $id)) ->whereEq($this->tableName . ".id", $id)
->first() ->first()
->execute(); ->execute();
@ -637,7 +636,7 @@ class DatabaseEntityHandler implements Persistable {
$entity->preInsert($row); $entity->preInsert($row);
$query = $this->sql->update($this->tableName) $query = $this->sql->update($this->tableName)
->where(new Compare($this->tableName . ".id", $entity->getId())); ->whereEq($this->tableName . ".id", $entity->getId());
foreach ($row as $columnName => $value) { foreach ($row as $columnName => $value) {
$query->set($columnName, $value); $query->set($columnName, $value);
@ -693,7 +692,7 @@ class DatabaseEntityHandler implements Persistable {
public function delete(int $id) { public function delete(int $id) {
return $this->sql return $this->sql
->delete($this->tableName) ->delete($this->tableName)
->where(new Compare($this->tableName . ".id", $id)) ->whereEq($this->tableName . ".id", $id)
->execute(); ->execute();
} }

@ -12,7 +12,7 @@ use Core\Driver\SQL\SQL;
* this class is similar to \Driver\SQL\Query\Select but with reduced functionality * this class is similar to \Driver\SQL\Query\Select but with reduced functionality
* and more adapted to entities. * and more adapted to entities.
*/ */
class DatabaseEntityQuery { class DatabaseEntityQuery extends Select {
const FETCH_NONE = 0; const FETCH_NONE = 0;
const FETCH_DIRECT = 1; const FETCH_DIRECT = 1;
@ -20,22 +20,22 @@ class DatabaseEntityQuery {
private Logger $logger; private Logger $logger;
private DatabaseEntityHandler $handler; private DatabaseEntityHandler $handler;
private Select $selectQuery;
private int $resultType; private int $resultType;
private bool $logVerbose; private bool $logVerbose;
private int $fetchSubEntities; private int $fetchSubEntities;
private function __construct(DatabaseEntityHandler $handler, int $resultType) { private function __construct(DatabaseEntityHandler $handler, int $resultType) {
parent::__construct($handler->getSQL(), ...$handler->getColumnNames());
$this->handler = $handler; $this->handler = $handler;
$this->selectQuery = $handler->getSelectQuery();
$this->logger = new Logger("DB-EntityQuery", $handler->getSQL()); $this->logger = new Logger("DB-EntityQuery", $handler->getSQL());
$this->resultType = $resultType; $this->resultType = $resultType;
$this->logVerbose = false; $this->logVerbose = false;
$this->fetchSubEntities = self::FETCH_NONE;
$this->from($handler->getTableName());
$this->fetchSubEntities = self::FETCH_NONE;
if ($this->resultType === SQL::FETCH_ONE) { if ($this->resultType === SQL::FETCH_ONE) {
$this->selectQuery->first(); $this->first();
} }
} }
@ -52,36 +52,6 @@ class DatabaseEntityQuery {
return new DatabaseEntityQuery($handler, SQL::FETCH_ONE); return new DatabaseEntityQuery($handler, SQL::FETCH_ONE);
} }
public function limit(int $limit): DatabaseEntityQuery {
$this->selectQuery->limit($limit);
return $this;
}
public function offset(int $offset): static {
$this->selectQuery->offset($offset);
return $this;
}
public function where(Condition ...$condition): DatabaseEntityQuery {
$this->selectQuery->where(...$condition);
return $this;
}
public function orderBy(string ...$column): DatabaseEntityQuery {
$this->selectQuery->orderBy(...$column);
return $this;
}
public function ascending(): DatabaseEntityQuery {
$this->selectQuery->ascending();
return $this;
}
public function descending(): DatabaseEntityQuery {
$this->selectQuery->descending();
return $this;
}
// TODO: clean this up // TODO: clean this up
public function fetchEntities(bool $recursive = false): DatabaseEntityQuery { public function fetchEntities(bool $recursive = false): DatabaseEntityQuery {
@ -110,9 +80,9 @@ class DatabaseEntityQuery {
if ($isNullable) { if ($isNullable) {
$this->selectQuery->leftJoin($referencedTable, "$tableName.$foreignColumnName", "$alias.id", $alias); $this->leftJoin($referencedTable, "$tableName.$foreignColumnName", "$alias.id", $alias);
} else { } else {
$this->selectQuery->innerJoin($referencedTable, "$tableName.$foreignColumnName", "$alias.id", $alias); $this->innerJoin($referencedTable, "$tableName.$foreignColumnName", "$alias.id", $alias);
} }
$relationColumnPrefix .= DatabaseEntityHandler::getColumnName($propertyName) . "_"; $relationColumnPrefix .= DatabaseEntityHandler::getColumnName($propertyName) . "_";
@ -120,7 +90,7 @@ class DatabaseEntityQuery {
foreach ($relationHandler->getColumns() as $relPropertyName => $relColumn) { foreach ($relationHandler->getColumns() as $relPropertyName => $relColumn) {
$relColumnName = $relColumn->getName(); $relColumnName = $relColumn->getName();
if (!isset($recursiveRelations[$relPropertyName]) || $recursive) { if (!isset($recursiveRelations[$relPropertyName]) || $recursive) {
$this->selectQuery->addValue("$alias.$relColumnName as $relationColumnPrefix$relColumnName"); $this->addValue("$alias.$relColumnName as $relationColumnPrefix$relColumnName");
if (isset($recursiveRelations[$relPropertyName]) && $recursive) { if (isset($recursiveRelations[$relPropertyName]) && $recursive) {
$this->fetchRelation($relPropertyName, $alias, $relationHandler, $recursiveRelations[$relPropertyName], $relIndex, $recursive, $relationColumnPrefix); $this->fetchRelation($relPropertyName, $alias, $relationHandler, $recursiveRelations[$relPropertyName], $relIndex, $recursive, $relationColumnPrefix);
} }
@ -132,11 +102,11 @@ class DatabaseEntityQuery {
if ($this->logVerbose) { if ($this->logVerbose) {
$params = []; $params = [];
$query = $this->selectQuery->build($params); $query = $this->build($params);
$this->logger->debug("QUERY: $query\nARGS: " . print_r($params, true)); $this->logger->debug("QUERY: $query\nARGS: " . print_r($params, true));
} }
$res = $this->selectQuery->execute(); $res = parent::execute();
if ($res === null || $res === false) { if ($res === null || $res === false) {
return null; return null;
} }
@ -167,13 +137,4 @@ class DatabaseEntityQuery {
return null; return null;
} }
} }
public function addJoin(Join $join): DatabaseEntityQuery {
$this->selectQuery->addJoin($join);
return $this;
}
public function getQuery(): Select {
return $this->selectQuery;
}
} }

@ -616,7 +616,7 @@ function onImpersonate($argv) {
if (!is_numeric($userId)) { if (!is_numeric($userId)) {
$res = $sql->select("id") $res = $sql->select("id")
->from("User") ->from("User")
->where(new Compare("name", $userId)) ->whereEq("name", $userId)
->execute(); ->execute();
if ($res === false) { if ($res === false) {
_exit("SQL error: " . $sql->getLastError()); _exit("SQL error: " . $sql->getLastError());