Skip to content

Commit

Permalink
New columns for v2
Browse files Browse the repository at this point in the history
  • Loading branch information
Tigrov committed Feb 7, 2024
1 parent 89e1003 commit 37249b9
Show file tree
Hide file tree
Showing 37 changed files with 1,889 additions and 549 deletions.
9 changes: 6 additions & 3 deletions src/Driver/Pdo/AbstractPdoConnection.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
use Yiisoft\Db\Profiler\ProfilerAwareInterface;
use Yiisoft\Db\Profiler\ProfilerAwareTrait;
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;
Expand Down Expand Up @@ -46,10 +47,12 @@ abstract class AbstractPdoConnection extends AbstractConnection implements PdoCo
protected bool|null $emulatePrepare = null;
protected QueryBuilderInterface|null $queryBuilder = null;
protected QuoterInterface|null $quoter = null;
protected SchemaInterface|null $schema = null;

public function __construct(protected PdoDriverInterface $driver, protected SchemaCache $schemaCache)
{
public function __construct(
protected PdoDriverInterface $driver,
protected SchemaCache $schemaCache,
protected ColumnFactoryInterface|null $columnFactory = null,
) {
}

/**
Expand Down
14 changes: 7 additions & 7 deletions src/QueryBuilder/AbstractDDLQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Query\QueryInterface;
use Yiisoft\Db\Schema\Builder\ColumnInterface;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Schema\QuoterInterface;
use Yiisoft\Db\Schema\SchemaInterface;

Expand Down Expand Up @@ -39,14 +39,14 @@ public function addCheck(string $table, string $name, string $expression): strin
. ' CHECK (' . $this->quoter->quoteSql($expression) . ')';
}

public function addColumn(string $table, string $column, string $type): string
public function addColumn(string $table, string $column, ColumnInterface|string $type): string
{
return 'ALTER TABLE '
. $this->quoter->quoteTableName($table)
. ' ADD '
. $this->quoter->quoteColumnName($column)
. ' '
. $this->queryBuilder->getColumnType($type);
. $this->queryBuilder->buildColumnDefinition($type);

Check failure on line 49 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.1-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:49:58: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)

Check failure on line 49 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.2-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:49:58: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)

Check failure on line 49 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.3-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:49:58: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)
}

public function addCommentOnColumn(string $table, string $column, string $comment): string
Expand Down Expand Up @@ -144,7 +144,7 @@ public function alterColumn(
. $this->quoter->quoteColumnName($column)
. ' '
. $this->quoter->quoteColumnName($column) . ' '
. $this->queryBuilder->getColumnType($type);
. $this->queryBuilder->buildColumnDefinition($type);

Check failure on line 147 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.1-ubuntu-latest

PossiblyInvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:147:58: PossiblyInvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but possibly different type Yiisoft\Db\Schema\Column\ColumnInterface|string provided (see https://psalm.dev/092)

Check failure on line 147 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.2-ubuntu-latest

PossiblyInvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:147:58: PossiblyInvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but possibly different type Yiisoft\Db\Schema\Column\ColumnInterface|string provided (see https://psalm.dev/092)

Check failure on line 147 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.3-ubuntu-latest

PossiblyInvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:147:58: PossiblyInvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but possibly different type Yiisoft\Db\Schema\Column\ColumnInterface|string provided (see https://psalm.dev/092)
}

public function checkIntegrity(string $schema = '', string $table = '', bool $check = true): string
Expand All @@ -170,14 +170,14 @@ public function createTable(string $table, array $columns, string $options = nul
$cols = [];

/** @psalm-var string[] $columns */
foreach ($columns as $name => $type) {
foreach ($columns as $name => $column) {
if (is_string($name)) {
$cols[] = "\t"
. $this->quoter->quoteColumnName($name)
. ' '
. $this->queryBuilder->getColumnType($type);
. $this->queryBuilder->buildColumnDefinition($column);

Check failure on line 178 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.1-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:178:66: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)

Check failure on line 178 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.2-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:178:66: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)

Check failure on line 178 in src/QueryBuilder/AbstractDDLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.3-ubuntu-latest

InvalidArgument

src/QueryBuilder/AbstractDDLQueryBuilder.php:178:66: InvalidArgument: Argument 1 of Yiisoft\Db\QueryBuilder\QueryBuilderInterface::buildColumnDefinition expects Yiisoft\Db\Schema\Column\ColumnInterface, but string provided (see https://psalm.dev/004)
} else {
$cols[] = "\t" . $type;
$cols[] = "\t" . $column;
}
}

Expand Down
7 changes: 5 additions & 2 deletions src/QueryBuilder/AbstractDMLQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\Query\QueryInterface;
use Yiisoft\Db\Schema\ColumnSchemaInterface;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Schema\QuoterInterface;
use Yiisoft\Db\Schema\SchemaInterface;

Expand Down Expand Up @@ -331,6 +331,9 @@ protected function prepareUpdateSets(string $table, array $columns, array $param
return [$sets, $params];
}

return [$uniqueNames, $insertNames, null];

Check failure on line 334 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.1-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:334:9: ParseError: Syntax error, unexpected T_RETURN on line 334 (see https://psalm.dev/173)

Check failure on line 334 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.2-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:334:9: ParseError: Syntax error, unexpected T_RETURN on line 334 (see https://psalm.dev/173)

Check failure on line 334 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.3-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:334:9: ParseError: Syntax error, unexpected T_RETURN on line 334 (see https://psalm.dev/173)
}

/**
* Prepare column names and constraints for "upsert" operation.
*
Expand Down Expand Up @@ -460,7 +463,7 @@ static function (Constraint $constraint) use ($quoter, $columns, &$columnNames):
*
* @deprecated will be removed in version 2.0.0
*/
protected function getTypecastValue(mixed $value, ColumnSchemaInterface $columnSchema = null): mixed
protected function getTypecastValue(mixed $value, ColumnInterface $columnSchema = null): mixed

Check failure on line 466 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.1-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:466:5: ParseError: Syntax error, unexpected T_PROTECTED on line 466 (see https://psalm.dev/173)

Check failure on line 466 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.2-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:466:5: ParseError: Syntax error, unexpected T_PROTECTED on line 466 (see https://psalm.dev/173)

Check failure on line 466 in src/QueryBuilder/AbstractDMLQueryBuilder.php

View workflow job for this annotation

GitHub Actions / psalm / PHP 8.3-ubuntu-latest

ParseError

src/QueryBuilder/AbstractDMLQueryBuilder.php:466:5: ParseError: Syntax error, unexpected T_PROTECTED on line 466 (see https://psalm.dev/173)
{
if ($columnSchema) {
return $columnSchema->dbTypecast($value);
Expand Down
39 changes: 14 additions & 25 deletions src/QueryBuilder/AbstractQueryBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Yiisoft\Db\Expression\ExpressionInterface;
use Yiisoft\Db\Query\QueryInterface;
use Yiisoft\Db\QueryBuilder\Condition\Interface\ConditionInterface;
use Yiisoft\Db\Schema\Builder\ColumnInterface;
use Yiisoft\Db\Schema\Column\ColumnInterface;
use Yiisoft\Db\Schema\QuoterInterface;
use Yiisoft\Db\Schema\SchemaInterface;

Expand Down Expand Up @@ -44,7 +44,8 @@ public function __construct(
private SchemaInterface $schema,
private AbstractDDLQueryBuilder $ddlBuilder,
private AbstractDMLQueryBuilder $dmlBuilder,
private AbstractDQLQueryBuilder $dqlBuilder
private AbstractDQLQueryBuilder $dqlBuilder,
private ColumnDefinitionBuilder $columnDefinitionBuilder,
) {
}

Expand Down Expand Up @@ -305,31 +306,10 @@ public function dropView(string $viewName): string
return $this->ddlBuilder->dropView($viewName);
}

/** @deprecated Use {@see buildColumnDefinition()}. Will be removed in version 3.0.0. */
public function getColumnType(ColumnInterface|string $type): string
{
if ($type instanceof ColumnInterface) {
$type = $type->asString();
}

if (isset($this->typeMap[$type])) {
return $this->typeMap[$type];
}

if (preg_match('/^(\w+)\((.+?)\)(.*)$/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace(
'/\(.+\)/',
'(' . $matches[2] . ')',
$this->typeMap[$matches[1]]
) . $matches[3];
}
} elseif (preg_match('/^(\w+)\s+/', $type, $matches)) {
if (isset($this->typeMap[$matches[1]])) {
return preg_replace('/^\w+/', $this->typeMap[$matches[1]], $type);
}
}

return $type;
return $this->buildColumnDefinition($type);
}

public function getExpressionBuilder(ExpressionInterface $expression): object
Expand Down Expand Up @@ -405,4 +385,13 @@ public function upsert(
): string {
return $this->dmlBuilder->upsert($table, $insertColumns, $updateColumns, $params);
}

public function buildColumnDefinition(ColumnInterface|string $column): string
{
if (!$column instanceof ColumnInterface) {
$column = $this->schema->getColumnFactory()->fromDefinition($column);
}

return $this->columnDefinitionBuilder->build($column);
}
}
Loading

0 comments on commit 37249b9

Please sign in to comment.