Refactor ConfigStorage\RelationCleanup::database()

- Replaces escapeString() with quoteString()

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
This commit is contained in:
Maurício Meneghini Fauth 2023-02-21 17:54:20 -03:00
parent bddaa399af
commit b4f9063ceb
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
3 changed files with 118 additions and 101 deletions

View File

@ -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);
}
/**

View File

@ -1390,17 +1390,6 @@
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
<code>escapeString</code>
</DeprecatedMethod>
</file>
<file src="libraries/classes/ConfigStorage/UserGroups.php">
@ -3268,8 +3257,6 @@
</InvalidArrayOffset>
<MixedArgument>
<code>$database</code>
<code>$database</code>
<code>$database</code>
</MixedArgument>
<MixedAssignment>
<code><![CDATA[$GLOBALS['errorUrl']]]></code>
@ -16220,7 +16207,6 @@
<file src="test/classes/ConfigStorage/RelationCleanupTest.php">
<DeprecatedMethod>
<code>withConsecutive</code>
<code>withConsecutive</code>
</DeprecatedMethod>
</file>
<file src="test/classes/ConfigStorage/RelationTest.php">

View File

@ -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