diff --git a/CHANGELOG.md b/CHANGELOG.md index cd4437cc0..35dad03ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,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) - New #391: Add `caseSensitive` option to like condition (@vjik) ## 1.3.0 March 21, 2024 diff --git a/src/Builder/ArrayExpressionBuilder.php b/src/Builder/ArrayExpressionBuilder.php index 1db2f1c83..85f62b991 100644 --- a/src/Builder/ArrayExpressionBuilder.php +++ b/src/Builder/ArrayExpressionBuilder.php @@ -128,7 +128,6 @@ private function getColumn(ArrayExpression $expression): AbstractArrayColumn|nul } elseif ($type !== ColumnType::ARRAY) { $column = $this ->queryBuilder - ->getSchema() ->getColumnFactory() ->fromDefinition($type); @@ -142,7 +141,6 @@ private function getColumn(ArrayExpression $expression): AbstractArrayColumn|nul /** @var AbstractArrayColumn */ return $this ->queryBuilder - ->getSchema() ->getColumnFactory() ->fromType(ColumnType::ARRAY, $info); } diff --git a/src/Connection.php b/src/Connection.php index cb384e9c5..c04e7d56d 100644 --- a/src/Connection.php +++ b/src/Connection.php @@ -7,7 +7,9 @@ use Yiisoft\Db\Driver\Pdo\AbstractPdoConnection; use Yiisoft\Db\Driver\Pdo\PdoCommandInterface; use Yiisoft\Db\Exception\InvalidArgumentException; +use Yiisoft\Db\Pgsql\Column\ColumnFactory; use Yiisoft\Db\QueryBuilder\QueryBuilderInterface; +use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; use Yiisoft\Db\Schema\Quoter; use Yiisoft\Db\Schema\QuoterInterface; use Yiisoft\Db\Schema\SchemaInterface; @@ -44,6 +46,11 @@ public function createTransaction(): TransactionInterface return new Transaction($this); } + public function getColumnFactory(): ColumnFactoryInterface + { + return new ColumnFactory(); + } + public function getLastInsertID(?string $sequenceName = null): string { if ($sequenceName === null) { @@ -55,28 +62,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); - } - - return $this->schema; + return $this->schema ??= new Schema($this, $this->schemaCache); } } diff --git a/src/DDLQueryBuilder.php b/src/DDLQueryBuilder.php index 05a733e0f..ceead8cef 100644 --- a/src/DDLQueryBuilder.php +++ b/src/DDLQueryBuilder.php @@ -41,7 +41,7 @@ public function alterColumn(string $table, string $column, ColumnInterface|strin return "ALTER TABLE $tableName ALTER COLUMN $columnName $type"; } - $type = $this->schema->getColumnFactory()->fromDefinition($type); + $type = $this->queryBuilder->getColumnFactory()->fromDefinition($type); } $columnDefinitionBuilder = $this->queryBuilder->getColumnDefinitionBuilder(); diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 17a88e239..71d4f950a 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -4,11 +4,9 @@ namespace Yiisoft\Db\Pgsql; -use Yiisoft\Db\Connection\ServerInfoInterface; +use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Db\Pgsql\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 4db29f581..d5b256c76 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -18,9 +18,7 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Helper\DbArrayHelper; -use Yiisoft\Db\Pgsql\Column\ColumnFactory; use Yiisoft\Db\Pgsql\Column\SequenceColumnInterface; -use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Schema\TableSchemaInterface; @@ -94,11 +92,6 @@ final class Schema extends AbstractPdoSchema */ protected string|null $defaultSchema = 'public'; - public function getColumnFactory(): ColumnFactoryInterface - { - return new ColumnFactory(); - } - /** * Resolves the table name and schema name (if any). * @@ -715,7 +708,7 @@ protected function findColumns(TableSchemaInterface $table): bool */ private function loadColumn(array $info): ColumnInterface { - $columnFactory = $this->getColumnFactory(); + $columnFactory = $this->db->getColumnFactory(); $dbType = $info['data_type']; if (!in_array($info['type_scheme'], [$this->defaultSchema, 'pg_catalog'], true)) { diff --git a/tests/ColumnFactoryTest.php b/tests/ColumnFactoryTest.php index 70fe65de3..5fbebd4e4 100644 --- a/tests/ColumnFactoryTest.php +++ b/tests/ColumnFactoryTest.php @@ -25,7 +25,7 @@ public function testFromDbType(string $dbType, string $expectedType, string $exp parent::testFromDbType($dbType, $expectedType, $expectedInstanceOf); $db = $this->getConnection(); - $columnFactory = $db->getSchema()->getColumnFactory(); + $columnFactory = $db->getColumnFactory(); // For array type $column = $columnFactory->fromType(ColumnType::ARRAY, ['dbType' => $dbType]); @@ -56,7 +56,7 @@ public function testFromType(string $type, string $expectedType, string $expecte parent::testFromType($type, $expectedType, $expectedInstanceOf); $db = $this->getConnection(); - $columnFactory = $db->getSchema()->getColumnFactory(); + $columnFactory = $db->getColumnFactory(); // For array type $column = $columnFactory->fromType(ColumnType::ARRAY, ['column' => $columnFactory->fromType($type)]); diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index cb8290a3e..b37d0546f 100644 --- a/tests/ConnectionTest.php +++ b/tests/ConnectionTest.php @@ -10,6 +10,7 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; +use Yiisoft\Db\Pgsql\Column\ColumnFactory; use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Tests\Common\CommonConnectionTest; use Yiisoft\Db\Transaction\TransactionInterface; @@ -133,4 +134,13 @@ static function (ConnectionInterface $db) { $db->close(); } + + public function testGetColumnFactory(): void + { + $db = $this->getConnection(); + + $this->assertInstanceOf(ColumnFactory::class, $db->getColumnFactory()); + + $db->close(); + } } diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php index 6d5663362..f790ed904 100644 --- a/tests/SchemaTest.php +++ b/tests/SchemaTest.php @@ -15,7 +15,6 @@ use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\Expression\Expression; -use Yiisoft\Db\Pgsql\Column\ColumnFactory; use Yiisoft\Db\Pgsql\Schema; use Yiisoft\Db\Pgsql\Tests\Support\TestTrait; use Yiisoft\Db\Schema\SchemaInterface; @@ -637,13 +636,4 @@ public function testTableIndexes(): void $db->close(); } - - public function testGetColumnFactory(): void - { - $db = $this->getConnection(); - - $this->assertInstanceOf(ColumnFactory::class, $db->getSchema()->getColumnFactory()); - - $db->close(); - } }