diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d85efb7..30b03a08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ - Chg #294: Update `QueryBuilder` constructor (@Tigrov) - Enh #293: Use `ColumnDefinitionBuilder` to generate table column SQL representation (@Tigrov) - Enh #296: Remove `ColumnInterface` (@Tigrov) +- Enh #298: Rename `ColumnSchemaInterface` to `ColumnInterface` (@Tigrov) +- Enh #298: Refactor `DMLQueryBuilder::prepareInsertValues()` method (@Tigrov) ## 1.3.0 March 21, 2024 diff --git a/src/Column/BinaryColumnSchema.php b/src/Column/BinaryColumn.php similarity index 83% rename from src/Column/BinaryColumnSchema.php rename to src/Column/BinaryColumn.php index 3ca984cf..9adc51f1 100644 --- a/src/Column/BinaryColumnSchema.php +++ b/src/Column/BinaryColumn.php @@ -6,11 +6,11 @@ use Yiisoft\Db\Command\ParamInterface; use Yiisoft\Db\Expression\Expression; -use Yiisoft\Db\Schema\Column\BinaryColumnSchema as BaseBinaryColumnSchema; +use Yiisoft\Db\Schema\Column\BinaryColumn as BaseBinaryColumn; use function is_string; -final class BinaryColumnSchema extends BaseBinaryColumnSchema +final class BinaryColumn extends BaseBinaryColumn { public function dbTypecast(mixed $value): mixed { diff --git a/src/Column/ColumnBuilder.php b/src/Column/ColumnBuilder.php index 0e5f26b0..7f94b25c 100644 --- a/src/Column/ColumnBuilder.php +++ b/src/Column/ColumnBuilder.php @@ -5,12 +5,12 @@ namespace Yiisoft\Db\Oracle\Column; use Yiisoft\Db\Constant\ColumnType; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; final class ColumnBuilder extends \Yiisoft\Db\Schema\Column\ColumnBuilder { - public static function binary(int|null $size = null): ColumnSchemaInterface + public static function binary(int|null $size = null): ColumnInterface { - return new BinaryColumnSchema(ColumnType::BINARY, size: $size); + return new BinaryColumn(ColumnType::BINARY, size: $size); } } diff --git a/src/Column/ColumnDefinitionBuilder.php b/src/Column/ColumnDefinitionBuilder.php index 82ba9885..43acc399 100644 --- a/src/Column/ColumnDefinitionBuilder.php +++ b/src/Column/ColumnDefinitionBuilder.php @@ -6,7 +6,7 @@ use Yiisoft\Db\Constant\ColumnType; use Yiisoft\Db\QueryBuilder\AbstractColumnDefinitionBuilder; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; use function ceil; use function log10; @@ -35,7 +35,7 @@ final class ColumnDefinitionBuilder extends AbstractColumnDefinitionBuilder 'number', ]; - public function build(ColumnSchemaInterface $column): string + public function build(ColumnInterface $column): string { return $this->buildType($column) . $this->buildAutoIncrement($column) @@ -62,7 +62,7 @@ protected function buildOnUpdate(string $onUpdate): string return ''; } - protected function getDbType(ColumnSchemaInterface $column): string + protected function getDbType(ColumnInterface $column): string { $size = $column->getSize(); diff --git a/src/Column/ColumnFactory.php b/src/Column/ColumnFactory.php index 1411493e..b2fa346e 100644 --- a/src/Column/ColumnFactory.php +++ b/src/Column/ColumnFactory.php @@ -6,7 +6,7 @@ use Yiisoft\Db\Constant\ColumnType; use Yiisoft\Db\Schema\Column\AbstractColumnFactory; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; use function preg_replace; use function rtrim; @@ -73,13 +73,13 @@ protected function getType(string $dbType, array $info = []): string protected function getColumnClass(string $type, array $info = []): string { if ($type === ColumnType::BINARY) { - return BinaryColumnSchema::class; + return BinaryColumn::class; } return parent::getColumnClass($type, $info); } - protected function normalizeNotNullDefaultValue(string $defaultValue, ColumnSchemaInterface $column): mixed + protected function normalizeNotNullDefaultValue(string $defaultValue, ColumnInterface $column): mixed { return parent::normalizeNotNullDefaultValue(rtrim($defaultValue), $column); } diff --git a/src/Command.php b/src/Command.php index c167667b..8a28cca7 100644 --- a/src/Command.php +++ b/src/Command.php @@ -37,7 +37,7 @@ public function insertWithReturningPks(string $table, array $columns): bool|arra $params = []; $sql = $this->getQueryBuilder()->insert($table, $columns, $params); - $columnSchemas = $tableSchema?->getColumns() ?? []; + $tableColumns = $tableSchema?->getColumns() ?? []; $returnParams = []; $returning = []; @@ -49,13 +49,13 @@ public function insertWithReturningPks(string $table, array $columns): bool|arra 'value' => '', ]; - if (!isset($columnSchemas[$name]) || $columnSchemas[$name]->getPhpType() !== PhpType::INT) { + if (!isset($tableColumns[$name]) || $tableColumns[$name]->getPhpType() !== PhpType::INT) { $returnParams[$phName]['dataType'] = PDO::PARAM_STR; } else { $returnParams[$phName]['dataType'] = PDO::PARAM_INT; } - $returnParams[$phName]['size'] = ($columnSchemas[$name]?->getSize() ?? 3998) + 2; + $returnParams[$phName]['size'] = ($tableColumns[$name]?->getSize() ?? 3998) + 2; $returning[] = $this->db->getQuoter()->quoteColumnName($name); } diff --git a/src/DDLQueryBuilder.php b/src/DDLQueryBuilder.php index 1277b7bc..e5d70e6d 100644 --- a/src/DDLQueryBuilder.php +++ b/src/DDLQueryBuilder.php @@ -7,7 +7,7 @@ use Yiisoft\Db\Exception\Exception; use Yiisoft\Db\Exception\NotSupportedException; use Yiisoft\Db\QueryBuilder\AbstractDDLQueryBuilder; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; /** * Implements a (Data Definition Language) SQL statements for Oracle Server. @@ -45,7 +45,7 @@ public function addForeignKey( return $sql; } - public function alterColumn(string $table, string $column, ColumnSchemaInterface|string $type): string + public function alterColumn(string $table, string $column, ColumnInterface|string $type): string { return 'ALTER TABLE ' . $this->quoter->quoteTableName($table) diff --git a/src/DMLQueryBuilder.php b/src/DMLQueryBuilder.php index 81ca3dd7..94beb057 100644 --- a/src/DMLQueryBuilder.php +++ b/src/DMLQueryBuilder.php @@ -10,6 +10,7 @@ use Yiisoft\Db\Query\QueryInterface; use Yiisoft\Db\QueryBuilder\AbstractDMLQueryBuilder; +use function array_fill; use function array_key_first; use function array_map; use function implode; @@ -142,16 +143,13 @@ protected function prepareInsertValues(string $table, array|QueryInterface $colu if ($tableSchema !== null) { if (!empty($tableSchema->getPrimaryKey())) { - $columns = $tableSchema->getPrimaryKey(); + $names = array_map($this->quoter->quoteColumnName(...), $tableSchema->getPrimaryKey()); } else { - /** @var list $columns */ - $columns = [array_key_first($tableSchema->getColumns())]; + /** @psalm-suppress PossiblyNullArgument */ + $names = [$this->quoter->quoteColumnName(array_key_first($tableSchema->getColumns()))]; } - foreach ($columns as $name) { - $names[] = $this->quoter->quoteColumnName($name); - $placeholders[] = 'DEFAULT'; - } + $placeholders = array_fill(0, count($names), 'DEFAULT'); } return [$names, $placeholders, '', $params]; diff --git a/src/Schema.php b/src/Schema.php index b3cecfc4..490a62b7 100644 --- a/src/Schema.php +++ b/src/Schema.php @@ -18,7 +18,7 @@ use Yiisoft\Db\Helper\DbArrayHelper; use Yiisoft\Db\Oracle\Column\ColumnFactory; use Yiisoft\Db\Schema\Column\ColumnFactoryInterface; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Schema\TableSchemaInterface; use function array_change_key_case; @@ -389,7 +389,7 @@ protected function findColumns(TableSchemaInterface $table): bool $info['table'] = $tableName; /** @psalm-var ColumnArray $info */ - $column = $this->loadColumnSchema($info); + $column = $this->loadColumn($info); $table->column($info['column_name'], $column); } @@ -427,15 +427,15 @@ protected function getTableSequenceName(string $tableName): string|null } /** - * Loads the column information into a {@see ColumnSchemaInterface} object. + * Loads the column information into a {@see ColumnInterface} object. * * @param array $info The column information. * - * @return ColumnSchemaInterface The column schema object. + * @return ColumnInterface The column object. * * @psalm-param ColumnArray $info The column information. */ - private function loadColumnSchema(array $info): ColumnSchemaInterface + private function loadColumn(array $info): ColumnInterface { return $this->getColumnFactory()->fromDbType($info['data_type'], [ 'autoIncrement' => $info['identity_column'] === 'YES', diff --git a/tests/ColumnSchemaTest.php b/tests/ColumnTest.php similarity index 77% rename from tests/ColumnSchemaTest.php rename to tests/ColumnTest.php index ebfb9ca5..b0e0231b 100644 --- a/tests/ColumnSchemaTest.php +++ b/tests/ColumnTest.php @@ -7,20 +7,20 @@ use PDO; use Yiisoft\Db\Command\Param; use Yiisoft\Db\Expression\Expression; -use Yiisoft\Db\Oracle\Column\BinaryColumnSchema; +use Yiisoft\Db\Oracle\Column\BinaryColumn; use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; -use Yiisoft\Db\Schema\Column\DoubleColumnSchema; -use Yiisoft\Db\Schema\Column\IntegerColumnSchema; -use Yiisoft\Db\Schema\Column\StringColumnSchema; -use Yiisoft\Db\Tests\Common\CommonColumnSchemaTest; +use Yiisoft\Db\Schema\Column\DoubleColumn; +use Yiisoft\Db\Schema\Column\IntegerColumn; +use Yiisoft\Db\Schema\Column\StringColumn; +use Yiisoft\Db\Tests\Common\CommonColumnTest; use function str_repeat; /** * @group oracle */ -final class ColumnSchemaTest extends CommonColumnSchemaTest +final class ColumnTest extends CommonColumnTest { use TestTrait; @@ -69,33 +69,33 @@ public function testPhpTypeCast(): void $db->close(); } - public function testColumnSchemaInstance(): void + public function testColumnInstance(): void { $db = $this->getConnection(true); $schema = $db->getSchema(); $tableSchema = $schema->getTableSchema('type'); - $this->assertInstanceOf(IntegerColumnSchema::class, $tableSchema->getColumn('int_col')); - $this->assertInstanceOf(StringColumnSchema::class, $tableSchema->getColumn('char_col')); - $this->assertInstanceOf(DoubleColumnSchema::class, $tableSchema->getColumn('float_col')); - $this->assertInstanceOf(BinaryColumnSchema::class, $tableSchema->getColumn('blob_col')); + $this->assertInstanceOf(IntegerColumn::class, $tableSchema->getColumn('int_col')); + $this->assertInstanceOf(StringColumn::class, $tableSchema->getColumn('char_col')); + $this->assertInstanceOf(DoubleColumn::class, $tableSchema->getColumn('float_col')); + $this->assertInstanceOf(BinaryColumn::class, $tableSchema->getColumn('blob_col')); } - /** @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\ColumnSchemaProvider::predefinedTypes */ + /** @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\ColumnProvider::predefinedTypes */ public function testPredefinedType(string $className, string $type, string $phpType): void { parent::testPredefinedType($className, $type, $phpType); } - /** @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\ColumnSchemaProvider::dbTypecastColumns */ + /** @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\ColumnProvider::dbTypecastColumns */ public function testDbTypecastColumns(string $className, array $values): void { parent::testDbTypecastColumns($className, $values); } - public function testBinaryColumnSchema(): void + public function testBinaryColumn(): void { - $binaryCol = new BinaryColumnSchema(); + $binaryCol = new BinaryColumn(); $binaryCol->dbType('BLOB'); $this->assertInstanceOf(Expression::class, $binaryCol->dbTypecast("\x10\x11\x12")); diff --git a/tests/Provider/ColumnBuilderProvider.php b/tests/Provider/ColumnBuilderProvider.php index a846cdec..5d325324 100644 --- a/tests/Provider/ColumnBuilderProvider.php +++ b/tests/Provider/ColumnBuilderProvider.php @@ -4,7 +4,7 @@ namespace Yiisoft\Db\Oracle\Tests\Provider; -use Yiisoft\Db\Oracle\Column\BinaryColumnSchema; +use Yiisoft\Db\Oracle\Column\BinaryColumn; class ColumnBuilderProvider extends \Yiisoft\Db\Tests\Provider\ColumnBuilderProvider { @@ -12,8 +12,8 @@ public static function buildingMethods(): array { $values = parent::buildingMethods(); - $values['binary()'][2] = BinaryColumnSchema::class; - $values['binary(8)'][2] = BinaryColumnSchema::class; + $values['binary()'][2] = BinaryColumn::class; + $values['binary(8)'][2] = BinaryColumn::class; return $values; } diff --git a/tests/Provider/ColumnFactoryProvider.php b/tests/Provider/ColumnFactoryProvider.php index f087085b..913dc0ac 100644 --- a/tests/Provider/ColumnFactoryProvider.php +++ b/tests/Provider/ColumnFactoryProvider.php @@ -6,9 +6,9 @@ use Yiisoft\Db\Constant\ColumnType; use Yiisoft\Db\Expression\Expression; -use Yiisoft\Db\Oracle\Column\BinaryColumnSchema; -use Yiisoft\Db\Schema\Column\DoubleColumnSchema; -use Yiisoft\Db\Schema\Column\StringColumnSchema; +use Yiisoft\Db\Oracle\Column\BinaryColumn; +use Yiisoft\Db\Schema\Column\DoubleColumn; +use Yiisoft\Db\Schema\Column\StringColumn; final class ColumnFactoryProvider extends \Yiisoft\Db\Tests\Provider\ColumnFactoryProvider { @@ -16,26 +16,26 @@ public static function dbTypes(): array { return [ // db type, expected abstract type, expected instance of - ['char', ColumnType::CHAR, StringColumnSchema::class], - ['nchar', ColumnType::CHAR, StringColumnSchema::class], - ['varchar2', ColumnType::STRING, StringColumnSchema::class], - ['nvarchar2', ColumnType::STRING, StringColumnSchema::class], - ['clob', ColumnType::TEXT, StringColumnSchema::class], - ['nclob', ColumnType::TEXT, StringColumnSchema::class], - ['long', ColumnType::TEXT, StringColumnSchema::class], - ['blob', ColumnType::BINARY, BinaryColumnSchema::class], - ['bfile', ColumnType::BINARY, BinaryColumnSchema::class], - ['long raw', ColumnType::BINARY, BinaryColumnSchema::class], - ['raw', ColumnType::BINARY, BinaryColumnSchema::class], - ['number', ColumnType::DOUBLE, DoubleColumnSchema::class], - ['binary_float', ColumnType::FLOAT, DoubleColumnSchema::class], - ['binary_double', ColumnType::DOUBLE, DoubleColumnSchema::class], - ['float', ColumnType::DOUBLE, DoubleColumnSchema::class], - ['date', ColumnType::DATE, StringColumnSchema::class], - ['interval day(0) to second', ColumnType::TIME, StringColumnSchema::class], - ['timestamp', ColumnType::TIMESTAMP, StringColumnSchema::class], - ['timestamp with time zone', ColumnType::TIMESTAMP, StringColumnSchema::class], - ['timestamp with local time zone', ColumnType::TIMESTAMP, StringColumnSchema::class], + ['char', ColumnType::CHAR, StringColumn::class], + ['nchar', ColumnType::CHAR, StringColumn::class], + ['varchar2', ColumnType::STRING, StringColumn::class], + ['nvarchar2', ColumnType::STRING, StringColumn::class], + ['clob', ColumnType::TEXT, StringColumn::class], + ['nclob', ColumnType::TEXT, StringColumn::class], + ['long', ColumnType::TEXT, StringColumn::class], + ['blob', ColumnType::BINARY, BinaryColumn::class], + ['bfile', ColumnType::BINARY, BinaryColumn::class], + ['long raw', ColumnType::BINARY, BinaryColumn::class], + ['raw', ColumnType::BINARY, BinaryColumn::class], + ['number', ColumnType::DOUBLE, DoubleColumn::class], + ['binary_float', ColumnType::FLOAT, DoubleColumn::class], + ['binary_double', ColumnType::DOUBLE, DoubleColumn::class], + ['float', ColumnType::DOUBLE, DoubleColumn::class], + ['date', ColumnType::DATE, StringColumn::class], + ['interval day(0) to second', ColumnType::TIME, StringColumn::class], + ['timestamp', ColumnType::TIMESTAMP, StringColumn::class], + ['timestamp with time zone', ColumnType::TIMESTAMP, StringColumn::class], + ['timestamp with local time zone', ColumnType::TIMESTAMP, StringColumn::class], ]; } diff --git a/tests/Provider/ColumnSchemaProvider.php b/tests/Provider/ColumnProvider.php similarity index 58% rename from tests/Provider/ColumnSchemaProvider.php rename to tests/Provider/ColumnProvider.php index 02545ec2..a0751325 100644 --- a/tests/Provider/ColumnSchemaProvider.php +++ b/tests/Provider/ColumnProvider.php @@ -4,14 +4,14 @@ namespace Yiisoft\Db\Oracle\Tests\Provider; -use Yiisoft\Db\Oracle\Column\BinaryColumnSchema; +use Yiisoft\Db\Oracle\Column\BinaryColumn; -class ColumnSchemaProvider extends \Yiisoft\Db\Tests\Provider\ColumnSchemaProvider +class ColumnProvider extends \Yiisoft\Db\Tests\Provider\ColumnProvider { public static function predefinedTypes(): array { $values = parent::predefinedTypes(); - $values['binary'][0] = BinaryColumnSchema::class; + $values['binary'][0] = BinaryColumn::class; return $values; } @@ -19,7 +19,7 @@ public static function predefinedTypes(): array public static function dbTypecastColumns(): array { $values = parent::dbTypecastColumns(); - $values['binary'][0] = BinaryColumnSchema::class; + $values['binary'][0] = BinaryColumn::class; return $values; } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index 10859887..81593445 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -15,7 +15,7 @@ use Yiisoft\Db\Oracle\Tests\Support\TestTrait; use Yiisoft\Db\Query\Query; use Yiisoft\Db\Query\QueryInterface; -use Yiisoft\Db\Schema\Column\ColumnSchemaInterface; +use Yiisoft\Db\Schema\Column\ColumnInterface; use Yiisoft\Db\Tests\Common\CommonQueryBuilderTest; /** @@ -104,7 +104,7 @@ public function testAddUnique(string $name, string $table, array|string $columns } #[DataProviderExternal(QueryBuilderProvider::class, 'alterColumn')] - public function testAlterColumn(string|ColumnSchemaInterface $type, string $expected): void + public function testAlterColumn(string|ColumnInterface $type, string $expected): void { parent::testAlterColumn($type, $expected); } @@ -665,7 +665,7 @@ public function testSelectScalar(array|bool|float|int|string $columns, string $e } #[DataProviderExternal(QueryBuilderProvider::class, 'buildColumnDefinition')] - public function testBuildColumnDefinition(string $expected, ColumnSchemaInterface|string $column): void + public function testBuildColumnDefinition(string $expected, ColumnInterface|string $column): void { parent::testBuildColumnDefinition($expected, $column); } diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php index 8a28a7e9..0ec0268a 100644 --- a/tests/SchemaTest.php +++ b/tests/SchemaTest.php @@ -30,9 +30,9 @@ final class SchemaTest extends CommonSchemaTest /** * @dataProvider \Yiisoft\Db\Oracle\Tests\Provider\SchemaProvider::columns */ - public function testColumnSchema(array $columns, string $tableName = 'type'): void + public function testColumns(array $columns, string $tableName = 'type'): void { - parent::testColumnSchema($columns, $tableName); + parent::testColumns($columns, $tableName); } /**