diff --git a/CHANGELOG.md b/CHANGELOG.md index 9146629..7713bf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,7 +39,7 @@ - New #307: Add parameters `$ifExists` and `$cascade` to `CommandInterface::dropTable()` and `DDLQueryBuilderInterface::dropTable()` methods (@vjik) - Chg #310: Remove usage of `hasLimit()` and `hasOffset()` methods of `DQLQueryBuilder` class (@Tigrov) -- Enh #313: Refactor according changes in `db` package (@Tigrov) +- Enh #313, #347: Refactor according changes in `db` package (@Tigrov) - New #311: Add `caseSensitive` option to like condition (@vjik) - Enh #315: Remove `getCacheKey()` and `getCacheTag()` methods from `Schema` class (@Tigrov) - Enh #319: Support `boolean` type (@Tigrov) diff --git a/src/Schema.php b/src/Schema.php index 755d391..eae8879 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -20,7 +20,6 @@ use function array_change_key_case; use function array_column; use function array_map; -use function array_reverse; use function implode; use function in_array; use function preg_replace; @@ -70,16 +69,14 @@ protected function resolveTableName(string $name): TableSchemaInterface { $resolvedName = new TableSchema(); - $parts = array_reverse( - $this->db->getQuoter()->getTableNameParts($name) - ); + $parts = $this->db->getQuoter()->getTableNameParts($name); - $resolvedName->name($parts[0] ?? ''); - $resolvedName->schemaName($parts[1] ?? $this->defaultSchema); + $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; @@ -257,10 +254,10 @@ protected function loadTableIndexes(string $tableName): array ORDER BY "uicol"."COLUMN_POSITION" 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); @@ -623,10 +620,10 @@ private function loadTableConstraints(string $tableName, string $returnType): ar ORDER BY "uccol"."POSITION" ASC SQL; - $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 8b0144d..c8d71bc 100644 --- a/tests/Provider/QuoterProvider.php +++ b/tests/Provider/QuoterProvider.php @@ -51,14 +51,14 @@ public static function simpleTableNames(): array 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 5f665e6..4125aee 100644 --- a/tests/QuoterTest.php +++ b/tests/QuoterTest.php @@ -4,37 +4,31 @@ namespace Yiisoft\Db\Oracle\Tests; +use PHPUnit\Framework\Attributes\DataProviderExternal; +use Yiisoft\Db\Oracle\Tests\Provider\QuoterProvider; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Tests\AbstractQuoterTest; /** * @group oracle - * - * @psalm-suppress PropertyNotSetInConstructor */ final class QuoterTest extends AbstractQuoterTest { use TestTrait; - /** - * @dataProvider \Yiisoft\Db\Oracle\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); } - /** - * @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\QuoterProvider::columnNames - */ + #[DataProviderExternal(QuoterProvider::class, 'columnNames')] public function testQuoteColumnName(string $columnName, string $expected): void { parent::testQuoteColumnName($columnName, $expected); } - /** - * @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\QuoterProvider::simpleColumnNames - */ + #[DataProviderExternal(QuoterProvider::class, 'simpleColumnNames')] public function testQuoteSimpleColumnName( string $columnName, string $expectedQuotedColumnName, @@ -43,9 +37,7 @@ public function testQuoteSimpleColumnName( parent::testQuoteSimpleColumnName($columnName, $expectedQuotedColumnName, $expectedUnQuotedColumnName); } - /** - * @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\QuoterProvider::simpleTableNames - */ + #[DataProviderExternal(QuoterProvider::class, 'simpleTableNames')] public function testQuoteTableName(string $tableName, string $expected): void { parent::testQuoteTableName($tableName, $expected);