Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@
- Enh #929: Implement lazy arrays for array, structured and JSON column types (@Tigrov)
- Bug #933: Explicitly mark nullable parameters (@vjik)
- Chg #911: Change supported PHP versions to `8.1 - 8.4` (@Tigrov)
- Enh #911: Minor refactoring (@Tigrov)
- Enh #911, #940: Minor refactoring (@Tigrov)
- Chg #938, #936, #937: Remove `ext-json`, `ext-ctype`, `ext-mbstring` from `require` section of `composer.json` (@Tigrov)
- Chg #936: Remove `hasLimit()` and `hasOffset()` methods from `AbstractDQLQueryBuilder` class (@Tigrov)
- Chg #937: Remove `baseName()` and `pascalCaseToId()` methods from `DbStringHelper` (@Tigrov)
- Enh #940: Rename `quoter()` method to `getQuoter()` in `QueryBuilderInterface` and `AbstractQueryBuilder` class (@Tigrov)
- Enh #940: Change constructor parameters in `AbstractQueryBuilder` class (@Tigrov)
- New #939: Add `caseSensitive` option to like condition (@vjik)

## 1.3.0 March 21, 2024
Expand Down
7 changes: 5 additions & 2 deletions UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,13 @@ Each table column has its own class in the `Yiisoft\Db\Schema\Column` namespace
### New methods

- `QuoterInterface::getRawTableName()` - returns the raw table name without quotes;
- `SchemaInterface::getColumnFactory()` - returns the column factory object for concrete DBMS;
- `ConnectionInterface::getColumnFactory()` - returns the column factory object for concrete DBMS;
- `ConnectionInterface::getServerInfo()` - returns `ServerInfoInterface` instance which provides server information;
- `QueryBuilderInterface::buildColumnDefinition()` - builds column definition for `CREATE TABLE` statement;
- `QueryBuilderInterface::prepareParam()` - converts a `ParamInterface` object to its SQL representation;
- `QueryBuilderInterface::prepareValue()` - converts a value to its SQL representation;
- `QueryBuilderInterface::getColumnFactory()` - returns the column factory object for concrete DBMS;
- `QueryBuilderInterface::getServerInfo()` - returns `ServerInfoInterface` instance which provides server information;
- `ConnectionInterface::getServerInfo()` - returns `ServerInfoInterface` instance which provides server information;
- `LikeConditionInterface::getCaseSensitive()` - returns whether the comparison is case-sensitive.

### Remove methods
Expand Down Expand Up @@ -179,3 +180,5 @@ Each table column has its own class in the `Yiisoft\Db\Schema\Column` namespace
- Change `DbArrayHelper::index()` parameter names and allow to accept `Closure` for `$indexBy` parameter;
- Change return type of `CommandInterface::insertWithReturningPks()` method to `array|false`;
- Change return type of `AbstractCommand::insertWithReturningPks()` method to `array|false`;
- Rename `QueryBuilderInterface::quoter()` method to `QueryBuilderInterface::getQuoter()`;
- Change constructor parameters in `AbstractQueryBuilder` class;
4 changes: 2 additions & 2 deletions src/Command/AbstractCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ public function batchInsert(string $table, array $columns, iterable $rows): stat

public function insertBatch(string $table, iterable $rows, array $columns = []): static
{
$table = $this->getQueryBuilder()->quoter()->getRawTableName($table);
$table = $this->getQueryBuilder()->getQuoter()->getRawTableName($table);

$params = [];
$sql = $this->getQueryBuilder()->insertBatch($table, $rows, $columns, $params);
Expand Down Expand Up @@ -489,7 +489,7 @@ public function setSql(string $sql): static
{
$this->cancel();
$this->reset();
$this->sql = $this->getQueryBuilder()->quoter()->quoteSql($sql);
$this->sql = $this->getQueryBuilder()->getQuoter()->quoteSql($sql);
return $this;
}

Expand Down
6 changes: 6 additions & 0 deletions src/Connection/ConnectionInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
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\Schema\TableSchemaInterface;
Expand Down Expand Up @@ -85,6 +86,11 @@ public function createTransaction(): TransactionInterface;
*/
public function close(): void;

/**
* Returns the column factory for creating column instances.
*/
public function getColumnFactory(): ColumnFactoryInterface;

/**
* Returns the name of the DB driver for the current `dsn`.
*
Expand Down
6 changes: 6 additions & 0 deletions src/Debug/ConnectionInterfaceProxy.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
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\Schema\TableSchemaInterface;
Expand Down Expand Up @@ -63,6 +64,11 @@ public function close(): void
$this->connection->close();
}

public function getColumnFactory(): ColumnFactoryInterface
{
return $this->connection->getColumnFactory();
}

public function getLastInsertID(?string $sequenceName = null): string
{
return $this->connection->getLastInsertID($sequenceName);
Expand Down
2 changes: 1 addition & 1 deletion src/QueryBuilder/AbstractColumnDefinitionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ protected function buildReferenceDefinition(ColumnInterface $column): string|nul
return null;
}

$quoter = $this->queryBuilder->quoter();
$quoter = $this->queryBuilder->getQuoter();
$schema = $reference?->getForeignSchemaName();

$sql = $quoter->quoteTableName($table);
Expand Down
28 changes: 14 additions & 14 deletions src/QueryBuilder/AbstractQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\Query\QueryInterface;
use Yiisoft\Db\QueryBuilder\Condition\Interface\ConditionInterface;
use Yiisoft\Db\Schema\Column\ColumnFactoryInterface;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Schema\QuoterInterface;
use Yiisoft\Db\Schema\SchemaInterface;

use function bin2hex;
use function count;
Expand Down Expand Up @@ -63,9 +63,7 @@
protected array $typeMap = [];

public function __construct(
private QuoterInterface $quoter,
private SchemaInterface $schema,
private ServerInfoInterface $serverInfo,
private ConnectionInterface $db,
private AbstractDDLQueryBuilder $ddlBuilder,
private AbstractDMLQueryBuilder $dmlBuilder,
private AbstractDQLQueryBuilder $dqlBuilder,
Expand Down Expand Up @@ -175,7 +173,7 @@
public function buildColumnDefinition(ColumnInterface|string $column): string
{
if (is_string($column)) {
$column = $this->schema->getColumnFactory()->fromDefinition($column);
$column = $this->db->getColumnFactory()->fromDefinition($column);
}

return $this->columnDefinitionBuilder->build($column);
Expand Down Expand Up @@ -357,19 +355,19 @@
return $this->columnDefinitionBuilder;
}

public function getExpressionBuilder(ExpressionInterface $expression): object
public function getColumnFactory(): ColumnFactoryInterface

Check warning on line 358 in src/QueryBuilder/AbstractQueryBuilder.php

View check run for this annotation

Codecov / codecov/patch

src/QueryBuilder/AbstractQueryBuilder.php#L358

Added line #L358 was not covered by tests
{
return $this->dqlBuilder->getExpressionBuilder($expression);
return $this->db->getColumnFactory();

Check warning on line 360 in src/QueryBuilder/AbstractQueryBuilder.php

View check run for this annotation

Codecov / codecov/patch

src/QueryBuilder/AbstractQueryBuilder.php#L360

Added line #L360 was not covered by tests
}

public function getSchema(): SchemaInterface
public function getExpressionBuilder(ExpressionInterface $expression): object
{
return $this->schema;
return $this->dqlBuilder->getExpressionBuilder($expression);
}

public function getServerInfo(): ServerInfoInterface
{
return $this->serverInfo;
return $this->db->getServerInfo();
}

public function insert(string $table, QueryInterface|array $columns, array &$params = []): string
Expand All @@ -382,9 +380,9 @@
return $this->dmlBuilder->insertWithReturningPks($table, $columns, $params);
}

public function quoter(): QuoterInterface
public function getQuoter(): QuoterInterface
{
return $this->quoter;
return $this->db->getQuoter();
}

public function prepareParam(ParamInterface $param): string
Expand All @@ -400,6 +398,8 @@

public function prepareValue(mixed $value): string
{
$quoter = $this->db->getQuoter();

/** @psalm-suppress MixedArgument */
return match (gettype($value)) {
GettypeResult::BOOLEAN => $value ? static::TRUE_VALUE : static::FALSE_VALUE,
Expand All @@ -409,11 +409,11 @@
GettypeResult::OBJECT => match (true) {
$value instanceof Expression => (string) $value,
$value instanceof ParamInterface => $this->prepareParam($value),
default => $this->quoter->quoteValue((string) $value),
default => $quoter->quoteValue((string) $value),
},
GettypeResult::RESOURCE => $this->prepareResource($value),
GettypeResult::RESOURCE_CLOSED => throw new InvalidArgumentException('Resource is closed.'),
default => $this->quoter->quoteValue((string) $value),
default => $quoter->quoteValue((string) $value),
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ protected function prepareColumn(ExpressionInterface|string $column): string
return $this->queryBuilder->buildExpression($column);
}

return $this->queryBuilder->quoter()->quoteColumnName($column);
return $this->queryBuilder->getQuoter()->quoteColumnName($column);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ protected function escapeColumnName(
}

if (!str_contains($columnName, '(')) {
return $this->queryBuilder->quoter()->quoteColumnName($columnName);
return $this->queryBuilder->getQuoter()->quoteColumnName($columnName);
}

return $columnName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public function build(BetweenConditionInterface $expression, array &$params = []
$column = $column instanceof ExpressionInterface ? $this->queryBuilder->buildExpression($column) : $column;

if (!str_contains($column, '(')) {
$column = $this->queryBuilder->quoter()->quoteColumnName($column);
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

$phName1 = $this->createPlaceholder($expression->getIntervalStart(), $params);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public function build(HashConditionInterface $expression, array &$params = []):
$parts[] = $this->queryBuilder->buildCondition(new InCondition($column, 'IN', $value), $params);
} else {
if (!str_contains($column, '(')) {
$column = $this->queryBuilder->quoter()->quoteColumnName($column);
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

if ($value === null) {
Expand Down
10 changes: 5 additions & 5 deletions src/QueryBuilder/Condition/Builder/InConditionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public function build(InConditionInterface $expression, array &$params = []): st
}

if (is_string($column) && !str_contains($column, '(')) {
$column = $this->queryBuilder->quoter()->quoteColumnName($column);
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

if (count($sqlValues) > 1) {
Expand Down Expand Up @@ -205,15 +205,15 @@ protected function buildSubqueryInCondition(
}

if (!str_contains($col, '(')) {
$columns[$i] = $this->queryBuilder->quoter()->quoteColumnName($col);
$columns[$i] = $this->queryBuilder->getQuoter()->quoteColumnName($col);
}
}

$query = '(' . implode(', ', $columns) . ") $operator $sql";
}

if (is_string($columns) && !str_contains($columns, '(')) {
$columns = $this->queryBuilder->quoter()->quoteColumnName($columns);
$columns = $this->queryBuilder->getQuoter()->quoteColumnName($columns);
$query = "$columns $operator $sql";
}

Expand Down Expand Up @@ -268,7 +268,7 @@ protected function buildCompositeInCondition(
}

$sqlColumns[] = !str_contains($column, '(')
? $this->queryBuilder->quoter()->quoteColumnName($column) : $column;
? $this->queryBuilder->getQuoter()->quoteColumnName($column) : $column;
}

return '(' . implode(', ', $sqlColumns) . ") $operator (" . implode(', ', $vss) . ')';
Expand All @@ -279,7 +279,7 @@ protected function buildCompositeInCondition(
*/
protected function getNullCondition(string $operator, string $column): string
{
$column = $this->queryBuilder->quoter()->quoteColumnName($column);
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);

if ($operator === 'IN') {
return sprintf('%s IS NULL', $column);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ protected function prepareColumn(LikeConditionInterface $expression, array &$par
}

if (!str_contains($column, '(')) {
return $this->queryBuilder->quoter()->quoteColumnName($column);
return $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

return $column;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function build(SimpleConditionInterface $expression, array &$params = [])
if ($column instanceof ExpressionInterface) {
$column = $this->queryBuilder->buildExpression($column, $params);
} elseif (!str_contains($column, '(')) {
$column = $this->queryBuilder->quoter()->quoteColumnName($column);
$column = $this->queryBuilder->getQuoter()->quoteColumnName($column);
}

if ($value === null) {
Expand Down
14 changes: 7 additions & 7 deletions src/QueryBuilder/QueryBuilderInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
use Yiisoft\Db\Exception\InvalidArgumentException;
use Yiisoft\Db\Expression\ExpressionBuilderInterface;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\Schema\Column\ColumnFactoryInterface;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Schema\QuoterInterface;
use Yiisoft\Db\Schema\SchemaInterface;

/**
* Defines the common interface to be implemented by query builder classes.
Expand Down Expand Up @@ -54,6 +54,11 @@ public function buildColumnDefinition(ColumnInterface|string $column): string;
*/
public function getColumnDefinitionBuilder(): ColumnDefinitionBuilderInterface;

/**
* Returns the column factory for creating column instances.
*/
public function getColumnFactory(): ColumnFactoryInterface;

/**
* Gets an object of {@see ExpressionBuilderInterface} that's suitable for $expression.
*
Expand All @@ -65,11 +70,6 @@ public function getColumnDefinitionBuilder(): ColumnDefinitionBuilderInterface;
*/
public function getExpressionBuilder(ExpressionInterface $expression): object;

/**
* Returns {@see SchemaInterface} instance that provides information about the database schema.
*/
public function getSchema(): SchemaInterface;

/**
* Returns {@see ServerInfoInterface} instance that provides information about the database server.
*/
Expand All @@ -78,7 +78,7 @@ public function getServerInfo(): ServerInfoInterface;
/**
* @return QuoterInterface The quoter instance.
*/
public function quoter(): QuoterInterface;
public function getQuoter(): QuoterInterface;

/**
* Converts a {@see ParamInterface} object to its SQL representation and quotes it if necessary.
Expand Down
6 changes: 0 additions & 6 deletions src/Schema/SchemaInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
use Yiisoft\Db\Exception\Exception;
use Yiisoft\Db\Exception\InvalidConfigException;
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Schema\Column\ColumnFactoryInterface;

/**
* Represents the schema for a database table.
Expand Down Expand Up @@ -299,11 +298,6 @@ interface SchemaInterface extends ConstraintSchemaInterface
*/
public const TYPE_JSON = 'json';

/**
* Returns the column factory for creating column instances.
*/
public function getColumnFactory(): ColumnFactoryInterface;

/**
* @return string|null The default schema name.
*/
Expand Down
Loading