Skip to content

Commit 7c0346b

Browse files
committed
Fix DB name passing in SqliteSchemaManager::listTableForeignKeys()
1 parent e5db00e commit 7c0346b

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/Schema/SqliteSchemaManager.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public function listTableForeignKeys($table, $database = null)
202202
{
203203
$table = $this->normalizeName($table);
204204

205-
$columns = $this->selectForeignKeyColumns('', $table)
205+
$columns = $this->selectForeignKeyColumns($database ?? 'main', $table)
206206
->fetchAllAssociative();
207207

208208
if (count($columns) > 0) {

tests/Schema/SqliteSchemaManagerTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Doctrine\DBAL\Connection;
66
use Doctrine\DBAL\Platforms\SqlitePlatform;
7+
use Doctrine\DBAL\Result;
78
use Doctrine\DBAL\Schema\SqliteSchemaManager;
89
use PHPUnit\Framework\TestCase;
910
use ReflectionMethod;
@@ -340,4 +341,33 @@ public static function getDataColumnComment(): iterable
340341
],
341342
];
342343
}
344+
345+
/**
346+
* TODO move to functional test once SqliteSchemaManager::selectForeignKeyColumns can honor database/schema name
347+
* https://github.com/doctrine/dbal/blob/3.8.3/src/Schema/SqliteSchemaManager.php#L740
348+
*/
349+
public function testListTableForeignKeysDefaultDatabasePassing(): void
350+
{
351+
$conn = $this->createMock(Connection::class);
352+
353+
$manager = new class ($conn, new SqlitePlatform()) extends SqliteSchemaManager {
354+
public static string $passedDatabaseName;
355+
356+
protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result
357+
{
358+
self::$passedDatabaseName = $databaseName;
359+
360+
return parent::selectForeignKeyColumns($databaseName, $tableName);
361+
}
362+
};
363+
364+
$manager->listTableForeignKeys('t');
365+
self::assertSame('main', $manager::$passedDatabaseName);
366+
367+
$manager->listTableForeignKeys('t', 'd');
368+
self::assertSame('d', $manager::$passedDatabaseName);
369+
370+
$manager->listTableForeignKeys('t');
371+
self::assertSame('main', $manager::$passedDatabaseName);
372+
}
343373
}

0 commit comments

Comments
 (0)