diff --git a/psalm.xml.dist b/psalm.xml.dist
index 31e4a8b6638..d685b545c1a 100644
--- a/psalm.xml.dist
+++ b/psalm.xml.dist
@@ -519,6 +519,9 @@
+
+
+
diff --git a/src/Platforms/SqlitePlatform.php b/src/Platforms/SqlitePlatform.php
index bbca4234db5..a6d5b38f911 100644
--- a/src/Platforms/SqlitePlatform.php
+++ b/src/Platforms/SqlitePlatform.php
@@ -908,7 +908,7 @@ public function getTemporaryTableName($tableName)
*/
public function canEmulateSchemas()
{
- Deprecation::trigger(
+ Deprecation::triggerIfCalledFromOutside(
'doctrine/dbal',
'https://github.com/doctrine/dbal/pull/4805',
'SqlitePlatform::canEmulateSchemas() is deprecated.',
diff --git a/src/Schema/SqliteSchemaManager.php b/src/Schema/SqliteSchemaManager.php
index 84361ae8286..2693758d77a 100644
--- a/src/Schema/SqliteSchemaManager.php
+++ b/src/Schema/SqliteSchemaManager.php
@@ -704,7 +704,9 @@ protected function selectTableColumns(string $databaseName, ?string $tableName =
if ($tableName !== null) {
$conditions[] = 't.name = ?';
- $params[] = str_replace('.', '__', $tableName);
+ $params[] = $this->_platform->canEmulateSchemas()
+ ? str_replace('.', '__', $tableName)
+ : $tableName;
}
$sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, c.cid';
@@ -729,7 +731,9 @@ protected function selectIndexColumns(string $databaseName, ?string $tableName =
if ($tableName !== null) {
$conditions[] = 't.name = ?';
- $params[] = str_replace('.', '__', $tableName);
+ $params[] = $this->_platform->canEmulateSchemas()
+ ? str_replace('.', '__', $tableName)
+ : $tableName;
}
$sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, i.seq';
@@ -755,7 +759,9 @@ protected function selectForeignKeyColumns(string $databaseName, ?string $tableN
if ($tableName !== null) {
$conditions[] = 't.name = ?';
- $params[] = str_replace('.', '__', $tableName);
+ $params[] = $this->_platform->canEmulateSchemas()
+ ? str_replace('.', '__', $tableName)
+ : $tableName;
}
$sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, p.id DESC, p.seq';
diff --git a/tests/Functional/Schema/SqliteSchemaManagerTest.php b/tests/Functional/Schema/SqliteSchemaManagerTest.php
index 3bba8022f76..4fbb000b934 100644
--- a/tests/Functional/Schema/SqliteSchemaManagerTest.php
+++ b/tests/Functional/Schema/SqliteSchemaManagerTest.php
@@ -12,8 +12,10 @@
use Doctrine\DBAL\Types\BlobType;
use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Types\Types;
+use ReflectionMethod;
use function array_keys;
+use function array_map;
use function array_shift;
use function assert;
use function dirname;
@@ -397,4 +399,55 @@ public function testShorthandInForeignKeyReferenceWithMultipleColumns(): void
$createTableTrackSql,
);
}
+
+ public function testListTableNoSchemaEmulation(): void
+ {
+ $databasePlatform = $this->connection->getDatabasePlatform();
+ assert($databasePlatform instanceof SqlitePlatform);
+ $databasePlatform->disableSchemaEmulation();
+
+ $this->dropTableIfExists('`list_table_no_schema_emulation.test`');
+
+ $this->connection->executeStatement(<<<'DDL'
+ CREATE TABLE `list_table_no_schema_emulation.test` (
+ id INTEGER,
+ parent_id INTEGER,
+ PRIMARY KEY (id),
+ FOREIGN KEY (parent_id) REFERENCES `list_table_no_schema_emulation.test` (id)
+ );
+ DDL);
+
+ $this->connection->executeStatement(<<<'DDL'
+ CREATE INDEX i ON `list_table_no_schema_emulation.test` (parent_id);
+ DDL);
+
+ $schemaManager = $this->schemaManager;
+ $refl = new ReflectionMethod($schemaManager, 'selectTableColumns');
+ $refl->setAccessible(true);
+ $res = $refl->invoke($schemaManager, 'main', 'list_table_no_schema_emulation.test')
+ ->fetchAllAssociative();
+
+ self::assertSame([
+ ['list_table_no_schema_emulation.test', 'id'],
+ ['list_table_no_schema_emulation.test', 'parent_id'],
+ ], array_map(static fn (array $row) => [$row['table_name'], $row['name']], $res));
+
+ $refl = new ReflectionMethod($schemaManager, 'selectIndexColumns');
+ $refl->setAccessible(true);
+ $res = $refl->invoke($schemaManager, 'main', 'list_table_no_schema_emulation.test')
+ ->fetchAllAssociative();
+
+ self::assertSame([
+ ['list_table_no_schema_emulation.test', 'i'],
+ ], array_map(static fn (array $row) => [$row['table_name'], $row['name']], $res));
+
+ $refl = new ReflectionMethod($schemaManager, 'selectForeignKeyColumns');
+ $refl->setAccessible(true);
+ $res = $refl->invoke($schemaManager, 'main', 'list_table_no_schema_emulation.test')
+ ->fetchAllAssociative();
+
+ self::assertSame([
+ ['list_table_no_schema_emulation.test', 'parent_id', 'id'],
+ ], array_map(static fn (array $row) => [$row['table_name'], $row['from'], $row['to']], $res));
+ }
}