From bd4dca6647e02ed43fc179cf3459981f145f4b16 Mon Sep 17 00:00:00 2001 From: Tigrov Date: Sun, 16 Mar 2025 09:51:44 +0700 Subject: [PATCH 1/3] Refactoring --- src/Builder/LikeConditionBuilder.php | 2 +- src/Column/ColumnDefinitionBuilder.php | 2 +- src/Connection.php | 25 ++++++++++--------------- src/QueryBuilder.php | 13 ++++++------- src/Schema.php | 7 +------ tests/ConnectionTest.php | 8 ++++++++ tests/SchemaTest.php | 8 -------- 7 files changed, 27 insertions(+), 38 deletions(-) diff --git a/src/Builder/LikeConditionBuilder.php b/src/Builder/LikeConditionBuilder.php index 8652dbfe..0608ba63 100644 --- a/src/Builder/LikeConditionBuilder.php +++ b/src/Builder/LikeConditionBuilder.php @@ -43,7 +43,7 @@ public function build(LikeConditionInterface $expression, array &$params = []): * Different pdo_oci8 versions may or may not implement `PDO::quote()`, so {@see Quoter::quoteValue()} may or * may not quote `\`. */ - $this->escapingReplacements['\\'] = substr($this->queryBuilder->quoter()->quoteValue('\\'), 1, -1); + $this->escapingReplacements['\\'] = substr($this->queryBuilder->getQuoter()->quoteValue('\\'), 1, -1); } return parent::build($expression, $params); diff --git a/src/Column/ColumnDefinitionBuilder.php b/src/Column/ColumnDefinitionBuilder.php index 54089cb1..68e8e75e 100644 --- a/src/Column/ColumnDefinitionBuilder.php +++ b/src/Column/ColumnDefinitionBuilder.php @@ -62,7 +62,7 @@ protected function buildCheck(ColumnInterface $column): string return match ($column->getType()) { ColumnType::ARRAY, ColumnType::STRUCTURED, ColumnType::JSON => - ' CHECK (' . $this->queryBuilder->quoter()->quoteSimpleColumnName($name) . ' IS JSON)', + ' CHECK (' . $this->queryBuilder->getQuoter()->quoteSimpleColumnName($name) . ' IS JSON)', default => '', }; } diff --git a/src/Connection.php b/src/Connection.php index 5f4d69e4..bac0d0c0 100644 --- a/src/Connection.php +++ b/src/Connection.php @@ -11,7 +11,9 @@ use Yiisoft\Db\Exception\InvalidArgumentException; use Yiisoft\Db\Exception\InvalidCallException; use Yiisoft\Db\Exception\InvalidConfigException; +use Yiisoft\Db\Oracle\Column\ColumnFactory; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; +use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; use Yiisoft\Db\Schema\QuoterInterface; use Yiisoft\Db\Schema\SchemaInterface; use Yiisoft\Db\Transaction\TransactionInterface; @@ -47,6 +49,11 @@ public function createTransaction(): TransactionInterface return new Transaction($this); } + public function getColumnFactory(): ColumnFactoryInterface + { + return new ColumnFactory(); + } + /** * Override base behaviour to support Oracle sequences. * @@ -73,28 +80,16 @@ public function getLastInsertID(?string $sequenceName = null): string public function getQueryBuilder(): QueryBuilderInterface { - return $this->queryBuilder ??= new QueryBuilder( - $this->getQuoter(), - $this->getSchema(), - $this->getServerInfo(), - ); + return $this->queryBuilder ??= new QueryBuilder($this); } public function getQuoter(): QuoterInterface { - if ($this->quoter === null) { - $this->quoter = new Quoter('"', '"', $this->getTablePrefix()); - } - - return $this->quoter; + return $this->quoter ??= new Quoter('"', '"', $this->getTablePrefix()); } public function getSchema(): SchemaInterface { - if ($this->schema === null) { - $this->schema = new Schema($this, $this->schemaCache, strtoupper($this->driver->getUsername())); - } - - return $this->schema; + return $this->schema ??= new Schema($this, $this->schemaCache, strtoupper($this->driver->getUsername())); } } diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 0f5fc43f..04bdb862 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -4,11 +4,9 @@ namespace Yiisoft\Db\Oracle; -use Yiisoft\Db\Connection\ServerInfoInterface; +use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Db\Oracle\Column\ColumnDefinitionBuilder; use Yiisoft\Db\QueryBuilder\AbstractQueryBuilder; -use Yiisoft\Db\Schema\QuoterInterface; -use Yiisoft\Db\Schema\SchemaInterface; use function bin2hex; @@ -17,12 +15,13 @@ */ final class QueryBuilder extends AbstractQueryBuilder { - public function __construct(QuoterInterface $quoter, SchemaInterface $schema, ServerInfoInterface $serverInfo) + public function __construct(ConnectionInterface $db) { + $quoter = $db->getQuoter(); + $schema = $db->getSchema(); + parent::__construct( - $quoter, - $schema, - $serverInfo, + $db, new DDLQueryBuilder($this, $quoter, $schema), new DMLQueryBuilder($this, $quoter, $schema), new DQLQueryBuilder($this, $quoter), diff --git a/src/Schema.php b/src/Schema.php index 3b3f9454..2cccb72b 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -73,11 +73,6 @@ public function __construct(protected ConnectionInterface $db, SchemaCache $sche parent::__construct($db, $schemaCache); } - public function getColumnFactory(): ColumnFactoryInterface - { - return new ColumnFactory(); - } - protected function resolveTableName(string $name): TableSchemaInterface { $resolvedName = new TableSchema(); @@ -459,7 +454,7 @@ private function loadColumn(array $info): ColumnInterface default => null, }; - return $this->getColumnFactory()->fromDbType($dbType, [ + return $this->db->getColumnFactory()->fromDbType($dbType, [ 'autoIncrement' => $info['identity_column'] === 'YES', 'check' => $info['check'], 'comment' => $info['column_comment'], diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index fe853afd..233f1107 100644 --- a/tests/ConnectionTest.php +++ b/tests/ConnectionTest.php @@ -11,6 +11,7 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; +use Yiisoft\Db\Oracle\Column\ColumnFactory; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Tests\Common\CommonConnectionTest; use Yiisoft\Db\Transaction\TransactionInterface; @@ -130,4 +131,11 @@ public function testSerialized(): void $this->assertEquals(123, $unserialized->createCommand('SELECT 123 FROM DUAL')->queryScalar()); $this->assertNotNull($connection->getPDO()); } + + public function testGetColumnFactory(): void + { + $db = $this->getConnection(); + + $this->assertInstanceOf(ColumnFactory::class, $db->getColumnFactory()); + } } diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php index 63f1df6c..1784112c 100644 --- a/tests/SchemaTest.php +++ b/tests/SchemaTest.php @@ -10,7 +10,6 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; -use Yiisoft\Db\Oracle\Column\ColumnFactory; use Yiisoft\Db\Oracle\Schema; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Tests\Common\CommonSchemaTest; @@ -280,11 +279,4 @@ public function testNotConnectionPDO(): void $schema->refresh(); } - - public function testGetColumnFactory(): void - { - $db = $this->getConnection(); - - $this->assertInstanceOf(ColumnFactory::class, $db->getSchema()->getColumnFactory()); - } } From 54b55f5692a17479c44b2905dbfd1e6d104c70af Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Sun, 16 Mar 2025 02:52:00 +0000 Subject: [PATCH 2/3] Apply fixes from StyleCI --- src/Schema.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Schema.php b/src/Schema.php index 2cccb72b..f3c84b3e 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -17,8 +17,6 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Helper\DbArrayHelper; -use Yiisoft\Db\Oracle\Column\ColumnFactory; -use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Schema\TableSchemaInterface; From f619ca2da4b47d98352995feb3b5aa5de1c42597 Mon Sep 17 00:00:00 2001 From: Tigrov Date: Sun, 16 Mar 2025 10:39:42 +0700 Subject: [PATCH 3/3] Add line to CHANGELOG.md [skip ci] --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed07da7d..eede74a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,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) ## 1.3.0 March 21, 2024