Skip to content

Commit a3ab423

Browse files
authored
Refactoring (#384)
1 parent b847ff3 commit a3ab423

8 files changed

+30
-42
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- New #379: Add parameters `$ifExists` and `$cascade` to `CommandInterface::dropTable()` and
3333
`DDLQueryBuilderInterface::dropTable()` methods (@vjik)
3434
- Chg #382: Remove `yiisoft/json` dependency (@Tigrov)
35+
- Enh #384: Refactor according changes in `db` package (@Tigrov)
3536
- New #383: Add `caseSensitive` option to like condition (@vjik)
3637

3738
## 1.2.0 March 21, 2024

src/Column/ColumnDefinitionBuilder.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected function buildComment(ColumnInterface $column): string
6565
{
6666
$comment = $column->getComment();
6767

68-
return $comment === null ? '' : ' COMMENT ' . $this->queryBuilder->quoter()->quoteValue($comment);
68+
return $comment === null ? '' : ' COMMENT ' . $this->queryBuilder->getQuoter()->quoteValue($comment);
6969
}
7070

7171
protected function getDbType(ColumnInterface $column): string

src/Connection.php

+10-15
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
use Throwable;
99
use Yiisoft\Db\Driver\Pdo\AbstractPdoConnection;
1010
use Yiisoft\Db\Driver\Pdo\PdoCommandInterface;
11+
use Yiisoft\Db\Mysql\Column\ColumnFactory;
1112
use Yiisoft\Db\QueryBuilder\QueryBuilderInterface;
13+
use Yiisoft\Db\Schema\Column\ColumnFactoryInterface;
1214
use Yiisoft\Db\Schema\QuoterInterface;
1315
use Yiisoft\Db\Schema\SchemaInterface;
1416
use Yiisoft\Db\Transaction\TransactionInterface;
@@ -63,30 +65,23 @@ public function createTransaction(): TransactionInterface
6365
return new Transaction($this);
6466
}
6567

68+
public function getColumnFactory(): ColumnFactoryInterface
69+
{
70+
return new ColumnFactory();
71+
}
72+
6673
public function getQueryBuilder(): QueryBuilderInterface
6774
{
68-
return $this->queryBuilder ??= new QueryBuilder(
69-
$this->getQuoter(),
70-
$this->getSchema(),
71-
$this->getServerInfo(),
72-
);
75+
return $this->queryBuilder ??= new QueryBuilder($this);
7376
}
7477

7578
public function getQuoter(): QuoterInterface
7679
{
77-
if ($this->quoter === null) {
78-
$this->quoter = new Quoter('`', '`', $this->getTablePrefix());
79-
}
80-
81-
return $this->quoter;
80+
return $this->quoter ??= new Quoter('`', '`', $this->getTablePrefix());
8281
}
8382

8483
public function getSchema(): SchemaInterface
8584
{
86-
if ($this->schema === null) {
87-
$this->schema = new Schema($this, $this->schemaCache);
88-
}
89-
90-
return $this->schema;
85+
return $this->schema ??= new Schema($this, $this->schemaCache);
9186
}
9287
}

src/QueryBuilder.php

+6-7
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,22 @@
44

55
namespace Yiisoft\Db\Mysql;
66

7-
use Yiisoft\Db\Connection\ServerInfoInterface;
7+
use Yiisoft\Db\Connection\ConnectionInterface;
88
use Yiisoft\Db\Mysql\Column\ColumnDefinitionBuilder;
99
use Yiisoft\Db\QueryBuilder\AbstractQueryBuilder;
10-
use Yiisoft\Db\Schema\QuoterInterface;
11-
use Yiisoft\Db\Schema\SchemaInterface;
1210

1311
/**
1412
* Implements MySQL, MariaDB specific query builder.
1513
*/
1614
final class QueryBuilder extends AbstractQueryBuilder
1715
{
18-
public function __construct(QuoterInterface $quoter, SchemaInterface $schema, ServerInfoInterface $serverInfo)
16+
public function __construct(ConnectionInterface $db)
1917
{
18+
$quoter = $db->getQuoter();
19+
$schema = $db->getSchema();
20+
2021
parent::__construct(
21-
$quoter,
22-
$schema,
23-
$serverInfo,
22+
$db,
2423
new DDLQueryBuilder($this, $quoter, $schema),
2524
new DMLQueryBuilder($this, $quoter, $schema),
2625
new DQLQueryBuilder($this, $quoter),

src/Schema.php

+1-8
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
use Yiisoft\Db\Exception\InvalidConfigException;
1616
use Yiisoft\Db\Exception\NotSupportedException;
1717
use Yiisoft\Db\Helper\DbArrayHelper;
18-
use Yiisoft\Db\Mysql\Column\ColumnFactory;
19-
use Yiisoft\Db\Schema\Column\ColumnFactoryInterface;
2018
use Yiisoft\Db\Schema\Column\ColumnInterface;
2119
use Yiisoft\Db\Schema\TableSchemaInterface;
2220

@@ -73,11 +71,6 @@
7371
*/
7472
final class Schema extends AbstractPdoSchema
7573
{
76-
public function getColumnFactory(): ColumnFactoryInterface
77-
{
78-
return new ColumnFactory();
79-
}
80-
8174
/**
8275
* Returns all unique indexes for the given table.
8376
*
@@ -405,7 +398,7 @@ private function loadColumn(array $info): ColumnInterface
405398
{
406399
$extra = trim(str_ireplace('auto_increment', '', $info['extra'], $autoIncrement));
407400

408-
$column = $this->getColumnFactory()->fromDefinition($info['column_type'], [
401+
$column = $this->db->getColumnFactory()->fromDefinition($info['column_type'], [
409402
'autoIncrement' => $autoIncrement > 0,
410403
'comment' => $info['column_comment'],
411404
'defaultValueRaw' => $info['column_default'],

tests/ColumnFactoryTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function testFromTypeDefaultValueRaw(string $type, string|null $defaultVa
5252
public function testExpressionDefaultValueRaw(): void
5353
{
5454
$db = $this->getConnection();
55-
$columnFactory = $db->getSchema()->getColumnFactory();
55+
$columnFactory = $db->getColumnFactory();
5656

5757
$column = $columnFactory->fromType(ColumnType::DATETIME, ['defaultValueRaw' => 'now()', 'extra' => 'DEFAULT_GENERATED']);
5858

tests/ConnectionTest.php

+10
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Yiisoft\Db\Exception\IntegrityException;
1212
use Yiisoft\Db\Exception\InvalidConfigException;
1313
use Yiisoft\Db\Exception\NotSupportedException;
14+
use Yiisoft\Db\Mysql\Column\ColumnFactory;
1415
use Yiisoft\Db\Mysql\Tests\Support\TestTrait;
1516
use Yiisoft\Db\Tests\Common\CommonConnectionTest;
1617
use Yiisoft\Db\Transaction\TransactionInterface;
@@ -158,4 +159,13 @@ public function testNotRestartConnectionOnTimeoutInTransaction(): void
158159

159160
$db->close();
160161
}
162+
163+
public function testGetColumnFactory(): void
164+
{
165+
$db = $this->getConnection();
166+
167+
$this->assertInstanceOf(ColumnFactory::class, $db->getColumnFactory());
168+
169+
$db->close();
170+
}
161171
}

tests/SchemaTest.php

-10
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
use Yiisoft\Db\Exception\NotSupportedException;
1515
use Yiisoft\Db\Expression\Expression;
1616
use Yiisoft\Db\Mysql\Column\ColumnBuilder;
17-
use Yiisoft\Db\Mysql\Column\ColumnFactory;
1817
use Yiisoft\Db\Mysql\Schema;
1918
use Yiisoft\Db\Mysql\Tests\Support\TestTrait;
2019
use Yiisoft\Db\Query\Query;
@@ -493,13 +492,4 @@ public function testInsertDefaultValues()
493492

494493
$db->close();
495494
}
496-
497-
public function testGetColumnFactory(): void
498-
{
499-
$db = $this->getConnection();
500-
501-
$this->assertInstanceOf(ColumnFactory::class, $db->getSchema()->getColumnFactory());
502-
503-
$db->close();
504-
}
505495
}

0 commit comments

Comments
 (0)