mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-15 04:27:14 +01:00
111 lines
2.4 KiB
PHP
111 lines
2.4 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace Xentral\Components\SchemaCreator\Collection;
|
||
|
|
||
|
use ArrayIterator;
|
||
|
use IteratorAggregate;
|
||
|
use Xentral\Components\SchemaCreator\Exception\SchemaCreatorInvalidArgumentException;
|
||
|
use Xentral\Components\SchemaCreator\Interfaces\ColumnInterface;
|
||
|
|
||
|
final class ColumnCollection implements IteratorAggregate
|
||
|
{
|
||
|
|
||
|
/** @var array|ColumnInterface[] */
|
||
|
private $values = [];
|
||
|
|
||
|
/** @var null|ColumnInterface */
|
||
|
private $autoIncrementColumn;
|
||
|
|
||
|
/**
|
||
|
* @param array $values
|
||
|
*/
|
||
|
public function __construct(array $values = [])
|
||
|
{
|
||
|
foreach ($values as $value) {
|
||
|
$this->add($value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param ColumnInterface $field
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function add(ColumnInterface $field): void
|
||
|
{
|
||
|
if ($this->hasColumn($field->getField()) === true) {
|
||
|
throw new SchemaCreatorInvalidArgumentException(
|
||
|
sprintf('Column name `%s` already added', $field->getField())
|
||
|
);
|
||
|
}
|
||
|
|
||
|
$options = $field->getOptions();
|
||
|
if (array_key_exists('extra', $options) && $options['extra'] !== null) {
|
||
|
|
||
|
if ($options['extra'] === 'AUTO_INCREMENT' || $options['extra'] === 'ai') {
|
||
|
$this->autoIncrementColumn = $field;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->values[] = $field;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $column
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function hasColumn(string $column): bool
|
||
|
{
|
||
|
/** @var ColumnInterface $configuredColumns */
|
||
|
foreach ($this->values as $configuredColumns) {
|
||
|
if ($column === $configuredColumns->getField()) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array|string[]
|
||
|
*/
|
||
|
public function getFields(): array
|
||
|
{
|
||
|
$fields = [];
|
||
|
foreach ($this->values as $column) {
|
||
|
$fields[] = $column->getField();
|
||
|
}
|
||
|
|
||
|
return $fields;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return ArrayIterator|ColumnInterface[]
|
||
|
*/
|
||
|
public function getIterator()
|
||
|
{
|
||
|
return new ArrayIterator($this->values);
|
||
|
}
|
||
|
|
||
|
/***
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function hasAutoIncrement(): bool
|
||
|
{
|
||
|
return null !== $this->autoIncrementColumn;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return ColumnInterface|null
|
||
|
*/
|
||
|
public function getAutoIncrementColumn(): ?ColumnInterface
|
||
|
{
|
||
|
return $this->autoIncrementColumn;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|