Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
c239495
chore(deps): Bump doctrine/dbal from 3.8.3 to 4.0.4
nickvergessen Jun 28, 2024
015a3e8
fix(db)!: Fix casing of doctrine's SQLitePlatform
nickvergessen Jun 28, 2024
a5432e3
fix(db): Adjust Connection signature to updated doctrine one
nickvergessen Jun 28, 2024
de0141d
fix(db)!: Empty and adjust query-part related methods
nickvergessen Jun 28, 2024
72886c0
fix(db): Make sure setComment() is only called with strings
nickvergessen Jun 28, 2024
6d0e8e4
fix(db): Use new function name to get the schema
nickvergessen Jun 28, 2024
76ef7dd
fix(db): Remove usage of dropped doctrine event manager
nickvergessen Jun 28, 2024
648b20c
fix(db)!: Manually track the query type and whether WHERE is empty
nickvergessen Jun 28, 2024
e6e1bd8
fix(db): Fix internal calls to doctrine's fetch functions
nickvergessen Jun 28, 2024
f6f53a8
fix(db)!: Doctrine\DBAL\Types\Type::getName() was removed
nickvergessen Jul 1, 2024
27c49e7
fix(db)!: Table::changeColumn() was renamed to Table::modifyColumn()
nickvergessen Jul 1, 2024
466f455
fix(db)!: `Doctrine\DBAL\Schema\Table::hasPrimaryKey() was removed, u…
nickvergessen Jul 1, 2024
287d527
fix(db)!: `Doctrine\DBAL\Connection::getSchemaManager` was removed, u…
nickvergessen Jul 1, 2024
3c5acbc
fix(db): `Doctrine\DBAL\Connection::executeUpdate()` was removed
nickvergessen Jul 1, 2024
f45ac5b
fix(db): `Doctrine\DBAL\Query\Expression\ExpressionBuilder::andX()` a…
nickvergessen Jul 1, 2024
72151b5
fix(db): `Table::getPrimaryKeyColumns()` was removed
nickvergessen Jul 1, 2024
a20110b
fix(db): UndefinedConstant: Constant Doctrine\DBAL\Connection::PARAM_…
nickvergessen Jul 1, 2024
c0d2f7e
fix(CI): Operand of type Doctrine\DBAL\Schema\Column is always truthy
nickvergessen Jul 1, 2024
fb3d4d5
fix(db): Don't use removed/deprecated methods in setup
nickvergessen Jul 1, 2024
2d27a32
fix(db): InaccessibleMethod: Cannot access private method Doctrine\DB…
nickvergessen Jul 1, 2024
d9e69e1
fix(db)!: Table alias for DELETE and UPDATE no longer supported
nickvergessen Jul 1, 2024
f6ac69a
fix(db)!: `Doctrine\DBAL\Platforms\PostgreSQL94Platform` was removed
nickvergessen Jul 1, 2024
c6cd20e
fix(db)!: `Doctrine\DBAL\FetchMode` was removed
nickvergessen Jul 1, 2024
1654430
fix(db): Interface `Doctrine\DBAL\Exception` cannot be instantiated
nickvergessen Jul 1, 2024
4c10031
fix(db): `Doctrine\DBAL\Schema\Schema::getTableNames()` was removed
nickvergessen Jul 1, 2024
ec1a3d6
fix(db): `Doctrine\DBAL\Query\QueryBuilder::getState` does not exist
nickvergessen Jul 1, 2024
6e90ddf
fix(db): `Doctrine\DBAL\Query\Expression\CompositeExpression::add*` d…
nickvergessen Jul 1, 2024
4bbaae5
fix(db): `ExpressionBuilder::like` expects string, but `OCP\DB\QueryB…
nickvergessen Jul 1, 2024
2b83016
fix(db): TooManyArguments: Too many arguments for method `Doctrine\DB…
nickvergessen Jul 1, 2024
55a8f33
fix(db): Doctrine Event Manager is removed
nickvergessen Jul 1, 2024
5823d58
fix(db)!: `Doctrine\DBAL\Platforms\MySQL80Platform` requires the leng…
nickvergessen Jul 2, 2024
e8ef23d
fix(db): Too few arguments for `Doctrine\DBAL\Driver::getDatabasePlat…
nickvergessen Jul 2, 2024
df7d088
fix(db)!: Deprecate getDatabasePlatform which leaks 3rdparty
nickvergessen Jul 2, 2024
60217aa
fix(db): No longer return result of `Connection::connect()`
nickvergessen Jul 2, 2024
926f2ab
fix(db): Too many arguments for method `\Doctrine\DBAL\Connection::qu…
nickvergessen Jul 2, 2024
bae31bf
fix(db): Method `\Doctrine\DBAL\Platforms\AbstractPlatform::getIdenti…
nickvergessen Jul 2, 2024
7156569
fix(db): Argument 2 of `\Doctrine\DBAL\Platforms\AbstractPlatform::ge…
nickvergessen Jul 2, 2024
66aac18
fix(db)!: `OCP\DB\IPreparedStatement::bindParam()` is deprecated and …
nickvergessen Jul 2, 2024
98b6c7c
fix(db): Add a hint that we return PHP_INT_MAX
nickvergessen Jul 2, 2024
6b2f136
fix(db): Map parameter types to doctrine's enums
nickvergessen Jul 2, 2024
1370693
fix(db): Remove usage of Platforms
nickvergessen Jul 2, 2024
de5a7c3
fix(db)!: Reimplement the query logger with a doctrine middleware
nickvergessen Jul 3, 2024
8153c38
fix(db): Don't set null as type
nickvergessen Jul 3, 2024
fc383a3
fix(tests): Adjust the migrator test
nickvergessen Jul 3, 2024
4c80fdd
fix(db): Adjust unit tests of query builder
nickvergessen Jul 3, 2024
5718e8f
fix(tests): Fix changes in doctrine's Exception handling
nickvergessen Jul 3, 2024
f0348be
fix(db): Replace more Platform usages
nickvergessen Jul 4, 2024
b2cf45c
fix(tests): Add length to test columns that bypass the migration service
nickvergessen Jul 4, 2024
72c8c3a
fix(tests): Adjust postgres schema diffing
nickvergessen Jul 4, 2024
8b7f8e1
fix(tests): Also handle the case where the schema is cached and the D…
nickvergessen Jul 4, 2024
5fdc5d5
fix(db)!: Too few arguments to function `Doctrine\DBAL\Query\Expressi…
nickvergessen Jul 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix(db)!: Empty and adjust query-part related methods
Signed-off-by: Joas Schilling <[email protected]>
  • Loading branch information
nickvergessen committed Jul 4, 2024
commit de0141d83cb883d23d163f641b87729efdb9cf1a
64 changes: 42 additions & 22 deletions lib/private/DB/QueryBuilder/QueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,24 +207,24 @@ public function execute() {
}
}

if (!empty($this->getQueryPart('select'))) {
$select = $this->getQueryPart('select');
$hasSelectAll = array_filter($select, static function ($s) {
return $s === '*';
});
$hasSelectSpecific = array_filter($select, static function ($s) {
return $s !== '*';
});

if (empty($hasSelectAll) === empty($hasSelectSpecific)) {
$exception = new QueryException('Query is selecting * and specific values in the same query. This is not supported in Oracle.');
$this->logger->error($exception->getMessage(), [
'query' => $this->getSQL(),
'app' => 'core',
'exception' => $exception,
]);
}
}
//if (!empty($this->getQueryPart('select'))) {
// $select = $this->getQueryPart('select');
// $hasSelectAll = array_filter($select, static function ($s) {
// return $s === '*';
// });
// $hasSelectSpecific = array_filter($select, static function ($s) {
// return $s !== '*';
// });

// if (empty($hasSelectAll) === empty($hasSelectSpecific)) {
// $exception = new QueryException('Query is selecting * and specific values in the same query. This is not supported in Oracle.');
// $this->logger->error($exception->getMessage(), [
// 'query' => $this->getSQL(),
// 'app' => 'core',
// 'exception' => $exception,
// ]);
// }
//}

$numberOfParameters = 0;
$hasTooLargeArrayParameter = false;
Expand Down Expand Up @@ -1096,18 +1096,20 @@ public function addOrderBy($sort, $order = null) {
* @param string $queryPartName
*
* @return mixed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* @return mixed
* @return never

* @deprecated 30.0.0 The function always throws an exception
*/
public function getQueryPart($queryPartName) {
return $this->queryBuilder->getQueryPart($queryPartName);
throw new \Exception('Getting query parts is no longer supported as they are implementation details.');
}

/**
* Gets all query parts.
*
* @return array
* @deprecated 30.0.0 The function always throws an exception
*/
public function getQueryParts() {
return $this->queryBuilder->getQueryParts();
throw new \Exception('Getting query parts is no longer supported as they are implementation details.');
}

/**
Expand All @@ -1116,9 +1118,20 @@ public function getQueryParts() {
* @param array|null $queryPartNames
*
* @return $this This QueryBuilder instance.
* @since 30.0.0 Only null and a list of 'where'|'having'|'groupBy'|'orderBy' is supported. Everything else will throw.
*/
public function resetQueryParts($queryPartNames = null) {
$this->queryBuilder->resetQueryParts($queryPartNames);
if ($queryPartNames === null) {
$this->queryBuilder->resetWhere();
$this->queryBuilder->resetHaving();
$this->queryBuilder->resetGroupBy();
$this->queryBuilder->resetOrderBy();
return $this;
}

foreach ($queryPartNames as $queryPartName) {
$this->resetQueryPart($queryPartName);
}

return $this;
}
Expand All @@ -1129,9 +1142,16 @@ public function resetQueryParts($queryPartNames = null) {
* @param string $queryPartName
*
* @return $this This QueryBuilder instance.
* @since 30.0.0 Only 'where'|'having'|'groupBy'|'orderBy' are supported. Everything else will throw.
*/
public function resetQueryPart($queryPartName) {
$this->queryBuilder->resetQueryPart($queryPartName);
match ($queryPartName) {
'where' => $this->queryBuilder->resetWhere(),
'having' => $this->queryBuilder->resetHaving(),
'groupBy' => $this->queryBuilder->resetGroupBy(),
'orderBy' => $this->queryBuilder->resetOrderBy(),
default => throw new \Exception('Resetting query part "' . $queryPartName. '" is no longer supported. Please create a new QueryBuilder instead.'),
};

return $this;
}
Expand Down
4 changes: 4 additions & 0 deletions lib/public/DB/QueryBuilder/IQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -833,6 +833,7 @@ public function addOrderBy($sort, $order = null);
*
* @return mixed
* @since 8.2.0
* @deprecated 30.0.0 The function always throws an exception
*/
public function getQueryPart($queryPartName);

Expand All @@ -841,6 +842,7 @@ public function getQueryPart($queryPartName);
*
* @return array
* @since 8.2.0
* @deprecated 30.0.0 The function always throws an exception
*/
public function getQueryParts();

Expand All @@ -851,6 +853,7 @@ public function getQueryParts();
*
* @return $this This QueryBuilder instance.
* @since 8.2.0
* @since 30.0.0 Only null and a list of 'where'|'having'|'groupBy'|'orderBy' is supported. Everything else will throw.
*/
public function resetQueryParts($queryPartNames = null);

Expand All @@ -861,6 +864,7 @@ public function resetQueryParts($queryPartNames = null);
*
* @return $this This QueryBuilder instance.
* @since 8.2.0
* @since 30.0.0 Only 'where'|'having'|'groupBy'|'orderBy' are supported. Everything else will throw.
*/
public function resetQueryPart($queryPartName);

Expand Down