Remove method Core::previewSQL()

Inlines it to remove the ResponseRenderer dependency.

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2026-02-12 18:05:24 -03:00
parent ef2477bae2
commit ce3db158d7
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
17 changed files with 88 additions and 77 deletions

View File

@ -842,6 +842,7 @@ return [
ColumnsDefinition::class,
DbTableExists::class,
UserPrivilegesFactory::class,
Template::class,
],
],
Table\ChangeController::class => [
@ -873,6 +874,7 @@ return [
DatabaseInterface::class,
ColumnsDefinition::class,
UserPrivilegesFactory::class,
Template::class,
],
],
Table\DeleteConfirmController::class => [
@ -1050,6 +1052,7 @@ return [
Database\SqlController::class,
Table\ChangeController::class,
Table\SqlController::class,
Template::class,
],
],
Table\SearchController::class => [
@ -1139,6 +1142,7 @@ return [
Table\StructureController::class,
UserPrivilegesFactory::class,
Config::class,
Template::class,
],
],
Table\Structure\SpatialController::class => [

View File

@ -0,0 +1,11 @@
<div class="preview_sql">
{% if query_data is empty %}
{{ t('No change') }}
{% elseif query_data is iterable %}
{% for query in query_data %}
{{ format_sql(query) }}
{% endfor %}
{% else %}
{{ format_sql(query_data) }}
{% endif %}
</div>

View File

@ -1,11 +0,0 @@
<div class="preview_sql">
{% if query_data is empty %}
{{ t('No change') }}
{% elseif query_data is iterable %}
{% for query in query_data %}
{{ format_sql(query) }}
{% endfor %}
{% else %}
{{ format_sql(query_data) }}
{% endif %}
</div>

View File

@ -6,7 +6,6 @@ namespace PhpMyAdmin\Controllers\Table;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\CreateAddField;
use PhpMyAdmin\Current;
use PhpMyAdmin\Dbal\DatabaseInterface;
@ -21,6 +20,7 @@ use PhpMyAdmin\MessageType;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Route;
use PhpMyAdmin\Table\ColumnsDefinition;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
@ -35,16 +35,17 @@ use function strlen;
* Displays add field form and handles it.
*/
#[Route('/table/add-field', ['GET', 'POST'])]
final class AddFieldController implements InvocableController
final readonly class AddFieldController implements InvocableController
{
public function __construct(
private readonly ResponseRenderer $response,
private readonly Transformations $transformations,
private readonly Config $config,
private readonly DatabaseInterface $dbi,
private readonly ColumnsDefinition $columnsDefinition,
private readonly DbTableExists $dbTableExists,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private ResponseRenderer $response,
private Transformations $transformations,
private Config $config,
private DatabaseInterface $dbi,
private ColumnsDefinition $columnsDefinition,
private DbTableExists $dbTableExists,
private UserPrivilegesFactory $userPrivilegesFactory,
private Template $template,
) {
}
@ -92,7 +93,10 @@ final class AddFieldController implements InvocableController
// If there is a request for SQL previewing.
if (isset($_POST['preview_sql'])) {
Core::previewSQL(Current::$sqlQuery);
$this->response->addJSON(
'sql_data',
$this->template->render('components/_preview_sql', ['query_data' => Current::$sqlQuery]),
);
return $this->response->response();
}

View File

@ -6,7 +6,6 @@ namespace PhpMyAdmin\Controllers\Table;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\CreateAddField;
use PhpMyAdmin\Current;
use PhpMyAdmin\Dbal\DatabaseInterface;
@ -16,6 +15,7 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Route;
use PhpMyAdmin\Table\ColumnsDefinition;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivilegesFactory;
@ -32,15 +32,16 @@ use function strlen;
* Displays table create form and handles it.
*/
#[Route('/table/create', ['GET', 'POST'])]
final class CreateController implements InvocableController
final readonly class CreateController implements InvocableController
{
public function __construct(
private readonly ResponseRenderer $response,
private readonly Transformations $transformations,
private readonly Config $config,
private readonly DatabaseInterface $dbi,
private readonly ColumnsDefinition $columnsDefinition,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private ResponseRenderer $response,
private Transformations $transformations,
private Config $config,
private DatabaseInterface $dbi,
private ColumnsDefinition $columnsDefinition,
private UserPrivilegesFactory $userPrivilegesFactory,
private Template $template,
) {
}
@ -93,7 +94,10 @@ final class CreateController implements InvocableController
// If there is a request for SQL previewing.
if (isset($_POST['preview_sql'])) {
Core::previewSQL(Current::$sqlQuery);
$this->response->addJSON(
'sql_data',
$this->template->render('components/_preview_sql', ['query_data' => Current::$sqlQuery]),
);
return $this->response->response();
}

View File

@ -104,7 +104,7 @@ final class IndexRenameController implements InvocableController
if ($previewSql) {
$this->response->addJSON(
'sql_data',
$this->template->render('preview_sql', ['query_data' => $sqlQuery]),
$this->template->render('components/_preview_sql', ['query_data' => $sqlQuery]),
);
return $this->response->response();

View File

@ -118,7 +118,7 @@ final readonly class IndexesController implements InvocableController
if ($previewSql) {
$this->response->addJSON(
'sql_data',
$this->template->render('preview_sql', ['query_data' => $sqlQuery]),
$this->template->render('components/_preview_sql', ['query_data' => $sqlQuery]),
);
return $this->response->response();

View File

@ -9,7 +9,6 @@ use PhpMyAdmin\ConfigStorage\Features\DisplayFeature;
use PhpMyAdmin\ConfigStorage\Features\RelationFeature;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\Dbal\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
@ -133,7 +132,10 @@ final readonly class RelationController implements InvocableController
// If there is a request for SQL previewing.
if (isset($_POST['preview_sql'])) {
Core::previewSQL($previewSqlData);
$this->response->addJSON(
'sql_data',
$this->template->render('components/_preview_sql', ['query_data' => $previewSqlData]),
);
return $this->response->response();
}

View File

@ -25,6 +25,7 @@ use PhpMyAdmin\Query\Generator as QueryGenerator;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Route;
use PhpMyAdmin\Table\Table;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\UrlParams;
use PhpMyAdmin\Util;
@ -43,18 +44,19 @@ use function sprintf;
* Manipulation of table data like inserting, replacing and updating.
*/
#[Route('/table/replace', ['GET', 'POST'])]
final class ReplaceController implements InvocableController
final readonly class ReplaceController implements InvocableController
{
public function __construct(
private readonly ResponseRenderer $response,
private readonly InsertEdit $insertEdit,
private readonly Transformations $transformations,
private readonly Relation $relation,
private readonly DatabaseInterface $dbi,
private readonly SqlController $sqlController,
private readonly DatabaseSqlController $databaseSqlController,
private readonly ChangeController $changeController,
private readonly TableSqlController $tableSqlController,
private ResponseRenderer $response,
private InsertEdit $insertEdit,
private Transformations $transformations,
private Relation $relation,
private DatabaseInterface $dbi,
private SqlController $sqlController,
private DatabaseSqlController $databaseSqlController,
private ChangeController $changeController,
private TableSqlController $tableSqlController,
private Template $template,
) {
}
@ -297,7 +299,10 @@ final class ReplaceController implements InvocableController
// If there is a request for SQL previewing.
if ($request->hasBodyParam('preview_sql')) {
Core::previewSQL($query);
$this->response->addJSON(
'sql_data',
$this->template->render('components/_preview_sql', ['query_data' => $query]),
);
return $this->response->response();
}

View File

@ -63,7 +63,7 @@ final class MoveColumnsController implements InvocableController
if ($previewSql) {
$this->response->addJSON(
'sql_data',
$this->template->render('preview_sql', ['query_data' => $sqlQuery]),
$this->template->render('components/_preview_sql', ['query_data' => $sqlQuery]),
);
return $this->response->response();

View File

@ -8,7 +8,6 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Controllers\InvocableController;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Core;
use PhpMyAdmin\Current;
use PhpMyAdmin\Dbal\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
@ -21,6 +20,7 @@ use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Route;
use PhpMyAdmin\Table\Table;
use PhpMyAdmin\Table\UiProperty;
use PhpMyAdmin\Template;
use PhpMyAdmin\Transformations;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPrivileges;
@ -49,6 +49,7 @@ final class SaveController implements InvocableController
private readonly StructureController $structureController,
private readonly UserPrivilegesFactory $userPrivilegesFactory,
private readonly Config $config,
private readonly Template $template,
) {
$this->tableObj = $this->dbi->getTable(Current::$database, Current::$table);
}
@ -154,7 +155,12 @@ final class SaveController implements InvocableController
// If there is a request for SQL previewing.
if (isset($_POST['preview_sql'])) {
Core::previewSQL($changes !== [] ? $sqlQuery : '');
$this->response->addJSON(
'sql_data',
$this->template->render('components/_preview_sql', [
'query_data' => $changes !== [] ? $sqlQuery : '',
]),
);
$this->response->callExit();
}

View File

@ -497,29 +497,6 @@ class Core
return (string) preg_replace("@((\015\012)|(\015)|(\012))@", '<br>' . "\n", $buffer);
}
/**
* Displays SQL query before executing.
*
* @param string[]|string $queryData Array containing queries or query itself
*/
public static function previewSQL(array|string $queryData): void
{
$retval = '<div class="preview_sql">';
if ($queryData === '' || $queryData === []) {
$retval .= __('No change');
} elseif (is_array($queryData)) {
foreach ($queryData as $query) {
$retval .= Html\Generator::formatSql($query);
}
} else {
$retval .= Html\Generator::formatSql($queryData);
}
$retval .= '</div>';
$response = ResponseRenderer::getInstance();
$response->addJSON('sql_data', $retval);
}
/**
* recursively check if variable is empty
*

View File

@ -266,6 +266,7 @@ class AddFieldControllerTest extends AbstractTestCase
new ColumnsDefinition($dbi, $relation, $transformations),
new DbTableExists($dbi),
new UserPrivilegesFactory($dbi),
$template,
))($request);
self::assertSame($expected, $response->getHTMLResult());

View File

@ -280,6 +280,7 @@ class CreateControllerTest extends AbstractTestCase
$dbi,
new ColumnsDefinition($dbi, $relation, $transformations),
new UserPrivilegesFactory($dbi),
$template,
))($request);
self::assertSame($expected, $response->getHTMLResult());

View File

@ -91,8 +91,8 @@ class IndexRenameControllerTest extends AbstractTestCase
// phpcs:disable Generic.Files.LineLength.TooLong
$expected = <<<'HTML'
<div class="preview_sql">
<pre><code class="sql" dir="ltr">ALTER TABLE `test_db`.`test_table_index_rename` DROP INDEX `old_name`, ADD INDEX `new_name` (`name`) USING BTREE;</code></pre>
</div>
<pre><code class="sql" dir="ltr">ALTER TABLE `test_db`.`test_table_index_rename` DROP INDEX `old_name`, ADD INDEX `new_name` (`name`) USING BTREE;</code></pre>
</div>
HTML;
// phpcs:enable

View File

@ -129,6 +129,7 @@ class ReplaceControllerTest extends AbstractTestCase
self::createStub(DatabaseSqlController::class),
self::createStub(ChangeController::class),
self::createStub(TableSqlController::class),
$template,
);
UrlParams::$goto = 'index.php?route=/sql';
@ -171,6 +172,7 @@ class ReplaceControllerTest extends AbstractTestCase
self::createStub(DatabaseSqlController::class),
self::createStub(ChangeController::class),
self::createStub(TableSqlController::class),
new Template(new Config()),
);
/** @var array $result */

View File

@ -12,6 +12,7 @@ use PhpMyAdmin\Current;
use PhpMyAdmin\Dbal\DatabaseInterface;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PhpMyAdmin\Transformations;
@ -94,7 +95,8 @@ class SaveControllerTest extends AbstractTestCase
$mock->expects(self::once())->method('__invoke')->with($request)
->willReturn(ResponseFactory::create()->createResponse());
$relation = new Relation($dbi);
$config = new Config();
$relation = new Relation($dbi, $config);
(new SaveController(
new ResponseRenderer(),
$relation,
@ -102,7 +104,8 @@ class SaveControllerTest extends AbstractTestCase
$dbi,
$mock,
new UserPrivilegesFactory($dbi),
new Config(),
$config,
new Template($config),
))($request);
self::assertArrayNotHasKey('selected', $_POST);
@ -118,7 +121,8 @@ class SaveControllerTest extends AbstractTestCase
$class = new ReflectionClass(SaveController::class);
$method = $class->getMethod('adjustColumnPrivileges');
$relation = new Relation($dbi);
$config = new Config();
$relation = new Relation($dbi, $config);
$ctrl = new SaveController(
new ResponseRenderer(),
$relation,
@ -126,7 +130,8 @@ class SaveControllerTest extends AbstractTestCase
$dbi,
self::createStub(StructureController::class),
new UserPrivilegesFactory($dbi),
new Config(),
$config,
new Template($config),
);
self::assertFalse(