Skip to content

Commit 8823701

Browse files
Merge pull request #19486 from kamil-tekiela/DatabaseInterface-constructor
Database interface constructor
2 parents bde143d + def8e35 commit 8823701

9 files changed

Lines changed: 29 additions & 23 deletions

File tree

app/services.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,11 @@
8585
Config\PageSettings::class => ['class' => Config\PageSettings::class, 'arguments' => ['@user_preferences']],
8686
'central_columns' => ['class' => CentralColumns::class, 'arguments' => ['@dbi']],
8787
'create_add_field' => ['class' => CreateAddField::class, 'arguments' => ['@dbi']],
88-
'dbi' => ['class' => DatabaseInterface::class, 'factory' => [DatabaseInterface::class, 'getInstance']],
88+
'dbi' => [
89+
'class' => DatabaseInterface::class,
90+
'factory' => [DatabaseInterface::class, 'getInstance'],
91+
'arguments' => ['$config' => '@config'],
92+
],
8993
DbTableExists::class => ['class' => DbTableExists::class, 'arguments' => ['@dbi']],
9094
'designer' => [
9195
'class' => Designer::class,

bin/console

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ $cfg['environment'] = 'production';
3030
$config = new Config();
3131
$config->loadAndCheck(CONFIG_FILE);
3232
$config->set('environment', $cfg['environment']);
33-
$dbi = new DatabaseInterface(new DbiDummy());
33+
$dbi = DatabaseInterface::getInstanceForTest(new DbiDummy());
3434

3535
$application = new Application('phpMyAdmin Console Tool');
3636

psalm-baseline.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4137,6 +4137,7 @@
41374137
<file src="src/Dbal/DatabaseInterface.php">
41384138
<DeprecatedMethod>
41394139
<code><![CDATA[Config::getInstance()]]></code>
4140+
<code><![CDATA[Config::getInstance()]]></code>
41404141
</DeprecatedMethod>
41414142
<DeprecatedProperty>
41424143
<code><![CDATA[Routing::$route]]></code>

src/Command/CacheWarmupCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private function warmUpTwigCache(
122122
$config->loadAndCheck(CONFIG_FILE);
123123
$config->settings['environment'] = $environment;
124124
$config->set('environment', $config->settings['environment']);
125-
DatabaseInterface::$instance = new DatabaseInterface(new DbiDummy());
125+
DatabaseInterface::$instance = DatabaseInterface::getInstanceForTest(new DbiDummy(), $config);
126126
$tmpDir = ROOT_PATH . 'twig-templates';
127127
$twig = Template::getTwigEnvironment($tmpDir, $config->config->environment === 'development');
128128

src/Dbal/DatabaseInterface.php

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
use function array_slice;
4444
use function basename;
4545
use function closelog;
46-
use function defined;
4746
use function explode;
4847
use function implode;
4948
use function is_array;
@@ -139,34 +138,36 @@ class DatabaseInterface
139138
public float $lastQueryExecutionTime = 0;
140139

141140
private ListDatabase|null $databaseList = null;
142-
private readonly Config $config;
143141

144142
/** @var int|numeric-string */
145143
private static int|string $cachedAffectedRows = -1;
146144

147145
/** @param DbiExtension $extension Object to be used for database queries */
148-
public function __construct(private DbiExtension $extension)
146+
private function __construct(private DbiExtension $extension, private readonly Config $config)
149147
{
150-
if (defined('TESTSUITE')) {
151-
$this->connections[ConnectionType::User->value] = new Connection(new stdClass());
152-
$this->connections[ConnectionType::ControlUser->value] = new Connection(new stdClass());
153-
}
154-
155148
$this->cache = new Cache();
156149
$this->types = new Types($this);
157-
$this->config = Config::getInstance();
158150
}
159151

160152
/** @deprecated Use dependency injection instead. */
161-
public static function getInstance(): self
153+
public static function getInstance(Config|null $config = null): self
162154
{
163155
if (self::$instance === null) {
164-
self::$instance = new self(new DbiMysqli());
156+
self::$instance = new self(new DbiMysqli(), $config ?? Config::getInstance());
165157
}
166158

167159
return self::$instance;
168160
}
169161

162+
public static function getInstanceForTest(DbiExtension $extension, Config|null $config = null): self
163+
{
164+
$instance = new self($extension, $config ?? Config::getInstance());
165+
$instance->connections[ConnectionType::User->value] = new Connection(new stdClass());
166+
$instance->connections[ConnectionType::ControlUser->value] = new Connection(new stdClass());
167+
168+
return $instance;
169+
}
170+
170171
public function query(
171172
string $query,
172173
ConnectionType $connectionType = ConnectionType::User,

tests/unit/AbstractTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ protected function setUp(): void
9191

9292
protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface
9393
{
94-
return new DatabaseInterface($extension ?? $this->createDbiDummy());
94+
return DatabaseInterface::getInstanceForTest($extension ?? $this->createDbiDummy());
9595
}
9696

9797
protected function createDbiDummy(): DbiDummy

tests/unit/Http/Middleware/TokenRequestParamCheckingTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function testCheckTokenRequestParamWithTokenMismatch(): void
4949
{
5050
$middleware = new TokenRequestParamChecking();
5151

52-
$dbi = new DatabaseInterface(new DbiDummy());
52+
$dbi = DatabaseInterface::getInstanceForTest(new DbiDummy());
5353
DatabaseInterface::$instance = $dbi;
5454

5555
$responseRenderer = ResponseRenderer::getInstance();

tests/unit/Stubs/ResponseRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function __construct()
5454
$template = new Template($config);
5555
$dummyDbi = new DbiDummy();
5656
$dummyDbi->addSelectDb('phpmyadmin');
57-
$dbi = new DatabaseInterface($dummyDbi);
57+
$dbi = DatabaseInterface::getInstanceForTest($dummyDbi, $config);
5858
$relation = new Relation($dbi);
5959
$console = new Console($relation, $template, new BookmarkRepository($dbi, $relation));
6060

tests/unit/Table/TableTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,7 +1443,7 @@ public function testGetStorageEngine(): void
14431443
$targetTable = 'table1';
14441444
$targetDb = 'pma_test';
14451445
$extension = new DbiDummy();
1446-
$dbi = new DatabaseInterface($extension);
1446+
$dbi = DatabaseInterface::getInstanceForTest($extension);
14471447
$tblObject = new Table($targetTable, $targetDb, $dbi);
14481448
$tblObject->getStatusInfo(null);
14491449
$expect = 'DBIDUMMY';
@@ -1459,7 +1459,7 @@ public function testGetComment(): void
14591459
$targetTable = 'table1';
14601460
$targetDb = 'pma_test';
14611461
$extension = new DbiDummy();
1462-
$dbi = new DatabaseInterface($extension);
1462+
$dbi = DatabaseInterface::getInstanceForTest($extension);
14631463
$tblObject = new Table($targetTable, $targetDb, $dbi);
14641464
$tblObject->getStatusInfo(null);
14651465
$expect = 'Test comment for "table1" in \'pma_test\'';
@@ -1475,7 +1475,7 @@ public function testGetCollation(): void
14751475
$targetTable = 'table1';
14761476
$targetDb = 'pma_test';
14771477
$extension = new DbiDummy();
1478-
$dbi = new DatabaseInterface($extension);
1478+
$dbi = DatabaseInterface::getInstanceForTest($extension);
14791479
$tblObject = new Table($targetTable, $targetDb, $dbi);
14801480
$tblObject->getStatusInfo(null);
14811481
$expect = 'utf8mb4_general_ci';
@@ -1491,7 +1491,7 @@ public function testGetRowFormat(): void
14911491
$targetTable = 'table1';
14921492
$targetDb = 'pma_test';
14931493
$extension = new DbiDummy();
1494-
$dbi = new DatabaseInterface($extension);
1494+
$dbi = DatabaseInterface::getInstanceForTest($extension);
14951495
$tblObject = new Table($targetTable, $targetDb, $dbi);
14961496
$tblObject->getStatusInfo(null);
14971497
$expect = 'Redundant';
@@ -1507,7 +1507,7 @@ public function testGetAutoIncrement(): void
15071507
$targetTable = 'table1';
15081508
$targetDb = 'pma_test';
15091509
$extension = new DbiDummy();
1510-
$dbi = new DatabaseInterface($extension);
1510+
$dbi = DatabaseInterface::getInstanceForTest($extension);
15111511
$tblObject = new Table($targetTable, $targetDb, $dbi);
15121512
$tblObject->getStatusInfo(null);
15131513
$expect = '5';
@@ -1523,7 +1523,7 @@ public function testGetCreateOptions(): void
15231523
$targetTable = 'table1';
15241524
$targetDb = 'pma_test';
15251525
$extension = new DbiDummy();
1526-
$dbi = new DatabaseInterface($extension);
1526+
$dbi = DatabaseInterface::getInstanceForTest($extension);
15271527
$tblObject = new Table($targetTable, $targetDb, $dbi);
15281528
$tblObject->getStatusInfo(null);
15291529
$expect = ['pack_keys' => 'DEFAULT', 'row_format' => 'REDUNDANT'];

0 commit comments

Comments
 (0)