diff --git a/libraries/classes/ConfigStorage/RelationCleanup.php b/libraries/classes/ConfigStorage/RelationCleanup.php
index a986548ceb..efb32585a2 100644
--- a/libraries/classes/ConfigStorage/RelationCleanup.php
+++ b/libraries/classes/ConfigStorage/RelationCleanup.php
@@ -188,100 +188,130 @@ class RelationCleanup
*
* @param string $db database name
*/
- public function database($db): void
+ public function database(string $db): void
{
$relationParameters = $this->relation->getRelationParameters();
if ($relationParameters->db === null) {
return;
}
- if ($relationParameters->columnCommentsFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->columnCommentsFeature->database)
- . '.' . Util::backquote($relationParameters->columnCommentsFeature->columnInfo)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ $columnCommentsFeature = $relationParameters->columnCommentsFeature;
+ $bookmarkFeature = $relationParameters->bookmarkFeature;
+ $displayFeature = $relationParameters->displayFeature;
+ $pdfFeature = $relationParameters->pdfFeature;
+ $relationFeature = $relationParameters->relationFeature;
+ $uiPreferencesFeature = $relationParameters->uiPreferencesFeature;
+ $navigationItemsHidingFeature = $relationParameters->navigationItemsHidingFeature;
+ $savedQueryByExampleSearchesFeature = $relationParameters->savedQueryByExampleSearchesFeature;
+ $centralColumnsFeature = $relationParameters->centralColumnsFeature;
+
+ if ($columnCommentsFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($columnCommentsFeature->database),
+ Util::backquote($columnCommentsFeature->columnInfo),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->bookmarkFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->bookmarkFeature->database)
- . '.' . Util::backquote($relationParameters->bookmarkFeature->bookmark)
- . ' WHERE dbase = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($bookmarkFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE dbase = %s',
+ Util::backquote($bookmarkFeature->database),
+ Util::backquote($bookmarkFeature->bookmark),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->displayFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->displayFeature->database)
- . '.' . Util::backquote($relationParameters->displayFeature->tableInfo)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($displayFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($displayFeature->database),
+ Util::backquote($displayFeature->tableInfo),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->pdfFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->pdfFeature->database)
- . '.' . Util::backquote($relationParameters->pdfFeature->pdfPages)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($pdfFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($pdfFeature->database),
+ Util::backquote($pdfFeature->pdfPages),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->pdfFeature->database)
- . '.' . Util::backquote($relationParameters->pdfFeature->tableCoords)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($pdfFeature->database),
+ Util::backquote($pdfFeature->tableCoords),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->relationFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->relationFeature->database)
- . '.' . Util::backquote($relationParameters->relationFeature->relation)
- . ' WHERE master_db = \''
- . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($relationFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE master_db = %s',
+ Util::backquote($relationFeature->database),
+ Util::backquote($relationFeature->relation),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->relationFeature->database)
- . '.' . Util::backquote($relationParameters->relationFeature->relation)
- . ' WHERE foreign_db = \'' . $this->dbi->escapeString($db)
- . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE foreign_db = %s',
+ Util::backquote($relationFeature->database),
+ Util::backquote($relationFeature->relation),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->uiPreferencesFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->uiPreferencesFeature->database)
- . '.' . Util::backquote($relationParameters->uiPreferencesFeature->tableUiPrefs)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($uiPreferencesFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($uiPreferencesFeature->database),
+ Util::backquote($uiPreferencesFeature->tableUiPrefs),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->navigationItemsHidingFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->navigationItemsHidingFeature->database)
- . '.' . Util::backquote($relationParameters->navigationItemsHidingFeature->navigationHiding)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($navigationItemsHidingFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($navigationItemsHidingFeature->database),
+ Util::backquote($navigationItemsHidingFeature->navigationHiding),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->savedQueryByExampleSearchesFeature !== null) {
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->savedQueryByExampleSearchesFeature->database)
- . '.' . Util::backquote($relationParameters->savedQueryByExampleSearchesFeature->savedSearches)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ if ($savedQueryByExampleSearchesFeature !== null) {
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($savedQueryByExampleSearchesFeature->database),
+ Util::backquote($savedQueryByExampleSearchesFeature->savedSearches),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
- if ($relationParameters->centralColumnsFeature === null) {
+ if ($centralColumnsFeature === null) {
return;
}
- $remove_query = 'DELETE FROM '
- . Util::backquote($relationParameters->centralColumnsFeature->database)
- . '.' . Util::backquote($relationParameters->centralColumnsFeature->centralColumns)
- . ' WHERE db_name = \'' . $this->dbi->escapeString($db) . '\'';
- $this->dbi->queryAsControlUser($remove_query);
+ $statement = sprintf(
+ 'DELETE FROM %s.%s WHERE db_name = %s',
+ Util::backquote($centralColumnsFeature->database),
+ Util::backquote($centralColumnsFeature->centralColumns),
+ $this->dbi->quoteString($db),
+ );
+ $this->dbi->queryAsControlUser($statement);
}
/**
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 63198ad902..9f775e9454 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -1390,17 +1390,6 @@
escapeString
escapeString
escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
- escapeString
@@ -3268,8 +3257,6 @@
$database
- $database
- $database
@@ -16220,7 +16207,6 @@
withConsecutive
- withConsecutive
diff --git a/test/classes/ConfigStorage/RelationCleanupTest.php b/test/classes/ConfigStorage/RelationCleanupTest.php
index e96b119d6f..47d8a3047d 100644
--- a/test/classes/ConfigStorage/RelationCleanupTest.php
+++ b/test/classes/ConfigStorage/RelationCleanupTest.php
@@ -128,8 +128,8 @@ class RelationCleanupTest extends AbstractTestCase
public function testDatabaseWithRelations(): void
{
- $_SESSION['relation'] = [];
- $_SESSION['relation'][$GLOBALS['server']] = RelationParameters::fromArray([
+ $relation = $this->createStub(Relation::class);
+ $relation->method('getRelationParameters')->willReturn(RelationParameters::fromArray([
'user' => 'user',
'db' => 'pmadb',
'commwork' => true,
@@ -151,26 +151,27 @@ class RelationCleanupTest extends AbstractTestCase
'navigationhiding' => 'navigationhiding',
'savedsearches' => 'savedsearches',
'central_columns' => 'central_columns',
- ])->toArray();
+ ]));
- $dbi = $this->createPartialMock(DatabaseInterface::class, ['queryAsControlUser']);
- $dbi->expects($this->exactly(11))
- ->method('queryAsControlUser')
- ->withConsecutive(
- [$this->equalTo("DELETE FROM `pmadb`.`column_info` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`bookmark` WHERE dbase = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`table_info` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`pdf_pages` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`table_coords` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`relation` WHERE master_db = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`relation` WHERE foreign_db = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`table_uiprefs` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`navigationhiding` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`savedsearches` WHERE db_name = 'database'")],
- [$this->equalTo("DELETE FROM `pmadb`.`central_columns` WHERE db_name = 'database'")]
- );
+ $dbi = $this->createMock(DatabaseInterface::class);
+ $dbi->expects($this->any())->method('quoteString')
+ ->will($this->returnCallback(static fn (string $string): string => "'" . $string . "'"));
+ $result = $this->createStub(ResultInterface::class);
+ $dbi->expects($this->exactly(11))->method('queryAsControlUser')->willReturnMap([
+ ["DELETE FROM `pmadb`.`column_info` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`bookmark` WHERE dbase = 'database'", $result],
+ ["DELETE FROM `pmadb`.`table_info` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`pdf_pages` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`table_coords` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`relation` WHERE master_db = 'database'", $result],
+ ["DELETE FROM `pmadb`.`relation` WHERE foreign_db = 'database'", $result],
+ ["DELETE FROM `pmadb`.`table_uiprefs` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`navigationhiding` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`savedsearches` WHERE db_name = 'database'", $result],
+ ["DELETE FROM `pmadb`.`central_columns` WHERE db_name = 'database'", $result],
+ ]);
- (new RelationCleanup($dbi, new Relation($dbi)))->database('database');
+ (new RelationCleanup($dbi, $relation))->database('database');
}
public function testUserWithoutRelations(): void