diff --git a/CHANGELOG.md b/CHANGELOG.md index 6694d9077..982fb4413 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,7 +35,7 @@ - Chg #388: Change supported PHP versions to `8.1 - 8.4` (@Tigrov) - Enh #388: Minor refactoring (@Tigrov) - Chg #390: Remove `yiisoft/json` dependency (@Tigrov) -- Enh #393: Refactor according changes in `db` package (@Tigrov) +- Enh #393, #430: Refactor according changes in `db` package (@Tigrov) - New #391: Add `caseSensitive` option to like condition (@vjik) - Enh #396: Remove `getCacheKey()` and `getCacheTag()` methods from `Schema` class (@Tigrov) - Enh #403, #404: Use `DbArrayHelper::arrange()` instead of `DbArrayHelper::index()` method (@Tigrov) diff --git a/src/Schema.php b/src/Schema.php index 585dcf23a..6e079917c 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -90,13 +90,13 @@ protected function resolveTableName(string $name): TableSchemaInterface { $resolvedName = new TableSchema(); - $parts = array_reverse($this->db->getQuoter()->getTableNameParts($name)); - $resolvedName->name($parts[0] ?? ''); - $resolvedName->schemaName($parts[1] ?? $this->defaultSchema); + $parts = $this->db->getQuoter()->getTableNameParts($name); + $resolvedName->name($parts['name']); + $resolvedName->schemaName($parts['schemaName'] ?? $this->defaultSchema); $resolvedName->fullName( $resolvedName->getSchemaName() !== $this->defaultSchema ? - implode('.', array_reverse($parts)) : $resolvedName->getName() + implode('.', $parts) : $resolvedName->getName() ); return $resolvedName; @@ -202,10 +202,10 @@ protected function loadTableIndexes(string $tableName): array ORDER BY "i"."indkey", "ia"."attnum" ASC SQL; - $resolvedName = $this->resolveTableName($tableName); + $nameParts = $this->db->getQuoter()->getTableNameParts($tableName); $indexes = $this->db->createCommand($sql, [ - ':schemaName' => $resolvedName->getSchemaName(), - ':tableName' => $resolvedName->getName(), + ':schemaName' => $nameParts['schemaName'] ?? $this->defaultSchema, + ':tableName' => $nameParts['name'], ])->queryAll(); $indexes = array_map(array_change_key_case(...), $indexes); @@ -765,10 +765,10 @@ private function loadTableConstraints(string $tableName, string $returnType): ar 'd' => ReferentialAction::SET_DEFAULT, ]; - $resolvedName = $this->resolveTableName($tableName); + $nameParts = $this->db->getQuoter()->getTableNameParts($tableName); $constraints = $this->db->createCommand($sql, [ - ':schemaName' => $resolvedName->getSchemaName(), - ':tableName' => $resolvedName->getName(), + ':schemaName' => $nameParts['schemaName'] ?? $this->defaultSchema, + ':tableName' => $nameParts['name'], ])->queryAll(); $constraints = array_map(array_change_key_case(...), $constraints); diff --git a/tests/Provider/QuoterProvider.php b/tests/Provider/QuoterProvider.php index 389020ff1..9f94835d2 100644 --- a/tests/Provider/QuoterProvider.php +++ b/tests/Provider/QuoterProvider.php @@ -9,14 +9,14 @@ final class QuoterProvider extends \Yiisoft\Db\Tests\Provider\QuoterProvider public static function tableNameParts(): array { return [ - ['', ''], - ['[]', '[]'], - ['animal', 'animal'], - ['dbo.animal', 'animal', 'dbo'], - ['[dbo].[animal]', '[animal]', '[dbo]'], - ['[other].[animal2]', '[animal2]', '[other]'], - ['other.[animal2]', '[animal2]', 'other'], - ['other.animal2', 'animal2', 'other'], + ['', ['name' => '']], + ['""', ['name' => '']], + ['animal', ['name' => 'animal']], + ['"animal"', ['name' => 'animal']], + ['dbo.animal', ['schemaName' => 'dbo', 'name' => 'animal']], + ['"dbo"."animal"', ['schemaName' => 'dbo', 'name' => 'animal']], + ['"dbo".animal', ['schemaName' => 'dbo', 'name' => 'animal']], + ['dbo."animal"', ['schemaName' => 'dbo', 'name' => 'animal']], ]; } } diff --git a/tests/QuoterTest.php b/tests/QuoterTest.php index 2cba7aad1..4dcd448d5 100644 --- a/tests/QuoterTest.php +++ b/tests/QuoterTest.php @@ -4,23 +4,21 @@ namespace Yiisoft\Db\Pgsql\Tests; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use Yiisoft\Db\Pgsql\Tests\Provider\QuoterProvider; use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Tests\AbstractQuoterTest; /** * @group pgsql - * - * @psalm-suppress PropertyNotSetInConstructor */ final class QuoterTest extends AbstractQuoterTest { use TestTrait; - /** - * @dataProvider \Yiisoft\Db\Pgsql\Tests\Provider\QuoterProvider::tableNameParts - */ - public function testGetTableNameParts(string $tableName, string ...$expected): void + #[DataProviderExternal(QuoterProvider::class, 'tableNameParts')] + public function testGetTableNameParts(string $tableName, array $expected): void { - parent::testGetTableNameParts($tableName, ...$expected); + parent::testGetTableNameParts($tableName, $expected); } }