Skip to content

Commit e6f5433

Browse files
committed
🐛 Oracle: fix comment retrieval on table with reserved keyword name
1 parent 2b09bad commit e6f5433

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/Schema/OracleSchemaManager.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -512,13 +512,13 @@ protected function fetchTableOptionsByTable(string $databaseName, ?string $table
512512

513513
$sql .= ' FROM ALL_TAB_COMMENTS WHERE ' . implode(' AND ', $conditions);
514514

515-
/** @var array<string,array<string,mixed>> $metadata */
516-
$metadata = $this->_conn->executeQuery($sql, $params)
517-
->fetchAllAssociativeIndexed();
515+
/** @var array<array{TABLE_NAME: string, COMMENTS: string|null}> $metadata */
516+
$metadata = $this->_conn->executeQuery($sql, $params)->fetchAllAssociative();
518517

519518
$tableOptions = [];
520-
foreach ($metadata as $table => $data) {
521-
$data = array_change_key_case($data, CASE_LOWER);
519+
foreach ($metadata as $data) {
520+
$data = array_change_key_case($data, CASE_LOWER);
521+
$table = $this->_getPortableTableDefinition($data);
522522

523523
$tableOptions[$table] = [
524524
'comment' => $data['comments'],

tests/Functional/Schema/SchemaManagerFunctionalTestCase.php

+18-2
Original file line numberDiff line numberDiff line change
@@ -1677,9 +1677,16 @@ public function testIntrospectReservedKeywordTableViaListTableDetails(): void
16771677
$this->createReservedKeywordTables();
16781678

16791679
$user = $this->schemaManager->introspectTable('"user"');
1680-
self::assertCount(2, $user->getColumns());
1680+
self::assertCount(3, $user->getColumns());
16811681
self::assertCount(2, $user->getIndexes());
16821682
self::assertCount(1, $user->getForeignKeys());
1683+
1684+
if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
1685+
return; // SQLite does not support table / column comment
1686+
}
1687+
1688+
self::assertSame('table comment', $user->getComment());
1689+
self::assertSame('column comment', $user->getColumn('user')->getComment());
16831690
}
16841691

16851692
public function testIntrospectReservedKeywordTableViaListTables(): void
@@ -1690,9 +1697,16 @@ public function testIntrospectReservedKeywordTableViaListTables(): void
16901697

16911698
$user = $this->findTableByName($tables, 'user');
16921699
self::assertNotNull($user);
1693-
self::assertCount(2, $user->getColumns());
1700+
self::assertCount(3, $user->getColumns());
16941701
self::assertCount(2, $user->getIndexes());
16951702
self::assertCount(1, $user->getForeignKeys());
1703+
1704+
if ($this->connection->getDatabasePlatform() instanceof SqlitePlatform) {
1705+
return; // SQLite does not support table / column comment
1706+
}
1707+
1708+
self::assertSame('table comment', $user->getComment());
1709+
self::assertSame('column comment', $user->getColumn('user')->getComment());
16961710
}
16971711

16981712
private function createReservedKeywordTables(): void
@@ -1705,7 +1719,9 @@ private function createReservedKeywordTables(): void
17051719
$schema = new Schema();
17061720

17071721
$user = $schema->createTable('user');
1722+
$user->setComment('table comment');
17081723
$user->addColumn('id', Types::INTEGER);
1724+
$user->addColumn('user', Types::INTEGER)->setComment('column comment');
17091725
$user->addColumn('group_id', Types::INTEGER);
17101726
$user->setPrimaryKey(['id']);
17111727
$user->addForeignKeyConstraint('group', ['group_id'], ['id']);

0 commit comments

Comments
 (0)