diff --git a/CHANGELOG.md b/CHANGELOG.md index a7db0c24..b837db8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ - New #345: Add parameters `$ifExists` and `$cascade` to `CommandInterface::dropTable()` and `DDLQueryBuilderInterface::dropTable()` methods (@vjik) - Chg #348: Remove usage of `hasLimit()` and `hasOffset()` methods of `DQLQueryBuilder` class (@Tigrov) +- Enh #350: Refactor according changes in `db` package (@Tigrov) - New #349: Add `caseSensitive` option to like condition (@vjik) ## 1.2.0 March 21, 2024 diff --git a/src/Builder/InConditionBuilder.php b/src/Builder/InConditionBuilder.php index 330095e7..a7bb4168 100644 --- a/src/Builder/InConditionBuilder.php +++ b/src/Builder/InConditionBuilder.php @@ -65,7 +65,7 @@ protected function buildCompositeInCondition( } $quotedColumns[$i] = !str_contains($column, '(') - ? $this->queryBuilder->quoter()->quoteColumnName($column) : $column; + ? $this->queryBuilder->getQuoter()->quoteColumnName($column) : $column; } $vss = []; diff --git a/src/Column/ColumnDefinitionBuilder.php b/src/Column/ColumnDefinitionBuilder.php index 9b32ae02..0b9655a7 100644 --- a/src/Column/ColumnDefinitionBuilder.php +++ b/src/Column/ColumnDefinitionBuilder.php @@ -69,7 +69,7 @@ protected function buildCheck(ColumnInterface $column): string return match ($column->getType()) { ColumnType::ARRAY, ColumnType::STRUCTURED, ColumnType::JSON => - ' CHECK (isjson(' . $this->queryBuilder->quoter()->quoteSimpleColumnName($name) . ') > 0)', + ' CHECK (isjson(' . $this->queryBuilder->getQuoter()->quoteSimpleColumnName($name) . ') > 0)', default => '', }; } diff --git a/src/Connection.php b/src/Connection.php index c0c44545..6be55791 100644 --- a/src/Connection.php +++ b/src/Connection.php @@ -6,9 +6,11 @@ use Yiisoft\Db\Driver\Pdo\AbstractPdoConnection; use Yiisoft\Db\Driver\Pdo\PdoCommandInterface; +use Yiisoft\Db\Mssql\Column\ColumnFactory; use Yiisoft\Db\Query\BatchQueryResultInterface; use Yiisoft\Db\Query\QueryInterface; 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; @@ -49,31 +51,24 @@ public function createTransaction(): TransactionInterface return new Transaction($this); } + public function getColumnFactory(): ColumnFactoryInterface + { + return new ColumnFactory(); + } + 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 208703cc..cdca6748 100644 --- a/src/DDLQueryBuilder.php +++ b/src/DDLQueryBuilder.php @@ -59,7 +59,7 @@ public function alterColumn(string $table, string $column, ColumnInterface|strin $constraintBase = preg_replace('/\W/', '', $table . '_' . $column); if (is_string($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 30e068eb..17c92a24 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -4,11 +4,9 @@ namespace Yiisoft\Db\Mssql; -use Yiisoft\Db\Connection\ServerInfoInterface; +use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Db\Mssql\Column\ColumnDefinitionBuilder; use Yiisoft\Db\QueryBuilder\AbstractQueryBuilder; -use Yiisoft\Db\Schema\QuoterInterface; -use Yiisoft\Db\Schema\SchemaInterface; /** * Implements the MSSQL Server specific query builder. @@ -19,12 +17,13 @@ final class QueryBuilder extends AbstractQueryBuilder protected const TRUE_VALUE = '1'; - 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 f9b7b6e5..7c2df0b0 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -14,8 +14,6 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Helper\DbArrayHelper; -use Yiisoft\Db\Mssql\Column\ColumnFactory; -use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Schema\TableSchemaInterface; @@ -69,11 +67,6 @@ final class Schema extends AbstractPdoSchema */ protected string|null $defaultSchema = 'dbo'; - public function getColumnFactory(): ColumnFactoryInterface - { - return new ColumnFactory(); - } - /** * Resolves the table name and schema name (if any). * @@ -358,7 +351,7 @@ protected function loadTableDefaultValues(string $tableName): array */ private function loadColumn(array $info): ColumnInterface { - return $this->getColumnFactory()->fromDbType($info['data_type'], [ + return $this->db->getColumnFactory()->fromDbType($info['data_type'], [ 'autoIncrement' => $info['is_identity'] === '1', 'check' => $info['check'], 'comment' => $info['comment'], diff --git a/tests/ConnectionTest.php b/tests/ConnectionTest.php index f35853b4..f92ffbef 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\Mssql\Column\ColumnFactory; use Yiisoft\Db\Mssql\Tests\Support\TestTrait; use Yiisoft\Db\Tests\Common\CommonConnectionTest; use Yiisoft\Db\Transaction\TransactionInterface; @@ -87,4 +88,11 @@ public function testSettingDefaultAttributes(): void $this->assertSame(PDO::ERRMODE_EXCEPTION, $db->getActivePDO()?->getAttribute(PDO::ATTR_ERRMODE)); } + + public function testGetColumnFactory(): void + { + $db = $this->getConnection(); + + $this->assertInstanceOf(ColumnFactory::class, $db->getColumnFactory()); + } } diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php index 91ad3e3c..dd30490f 100644 --- a/tests/SchemaTest.php +++ b/tests/SchemaTest.php @@ -11,7 +11,6 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\InvalidConfigException; use Yiisoft\Db\Exception\NotSupportedException; -use Yiisoft\Db\Mssql\Column\ColumnFactory; use Yiisoft\Db\Mssql\Schema; use Yiisoft\Db\Mssql\Tests\Support\TestTrait; use Yiisoft\Db\Schema\SchemaInterface; @@ -186,11 +185,4 @@ public function testNegativeDefaultValues(): void $db->close(); } - - public function testGetColumnFactory(): void - { - $db = $this->getConnection(); - - $this->assertInstanceOf(ColumnFactory::class, $db->getSchema()->getColumnFactory()); - } }