You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
9.6 KiB
361 lines
9.6 KiB
<?php |
|
|
|
namespace Doctrine\DBAL\Schema; |
|
|
|
use Doctrine\DBAL\Platforms\AbstractPlatform; |
|
use Doctrine\Deprecations\Deprecation; |
|
|
|
use function array_filter; |
|
use function array_values; |
|
use function count; |
|
|
|
/** |
|
* Table Diff. |
|
*/ |
|
class TableDiff |
|
{ |
|
/** |
|
* @deprecated Use {@see getOldTable()} instead. |
|
* |
|
* @var string |
|
*/ |
|
public $name; |
|
|
|
/** |
|
* @deprecated Rename tables via {@link AbstractSchemaManager::renameTable()} instead. |
|
* |
|
* @var string|false |
|
*/ |
|
public $newName = false; |
|
|
|
/** |
|
* All added columns |
|
* |
|
* @internal Use {@see getAddedColumns()} instead. |
|
* |
|
* @var Column[] |
|
*/ |
|
public $addedColumns; |
|
|
|
/** |
|
* All modified columns |
|
* |
|
* @internal Use {@see getModifiedColumns()} instead. |
|
* |
|
* @var ColumnDiff[] |
|
*/ |
|
public $changedColumns = []; |
|
|
|
/** |
|
* All dropped columns |
|
* |
|
* @internal Use {@see getDroppedColumns()} instead. |
|
* |
|
* @var Column[] |
|
*/ |
|
public $removedColumns = []; |
|
|
|
/** |
|
* Columns that are only renamed from key to column instance name. |
|
* |
|
* @internal Use {@see getRenamedColumns()} instead. |
|
* |
|
* @var Column[] |
|
*/ |
|
public $renamedColumns = []; |
|
|
|
/** |
|
* All added indexes. |
|
* |
|
* @internal Use {@see getAddedIndexes()} instead. |
|
* |
|
* @var Index[] |
|
*/ |
|
public $addedIndexes = []; |
|
|
|
/** |
|
* All changed indexes. |
|
* |
|
* @internal Use {@see getModifiedIndexes()} instead. |
|
* |
|
* @var Index[] |
|
*/ |
|
public $changedIndexes = []; |
|
|
|
/** |
|
* All removed indexes |
|
* |
|
* @internal Use {@see getDroppedIndexes()} instead. |
|
* |
|
* @var Index[] |
|
*/ |
|
public $removedIndexes = []; |
|
|
|
/** |
|
* Indexes that are only renamed but are identical otherwise. |
|
* |
|
* @internal Use {@see getRenamedIndexes()} instead. |
|
* |
|
* @var Index[] |
|
*/ |
|
public $renamedIndexes = []; |
|
|
|
/** |
|
* All added foreign key definitions |
|
* |
|
* @internal Use {@see getAddedForeignKeys()} instead. |
|
* |
|
* @var ForeignKeyConstraint[] |
|
*/ |
|
public $addedForeignKeys = []; |
|
|
|
/** |
|
* All changed foreign keys |
|
* |
|
* @internal Use {@see getModifiedForeignKeys()} instead. |
|
* |
|
* @var ForeignKeyConstraint[] |
|
*/ |
|
public $changedForeignKeys = []; |
|
|
|
/** |
|
* All removed foreign keys |
|
* |
|
* @internal Use {@see getDroppedForeignKeys()} instead. |
|
* |
|
* @var (ForeignKeyConstraint|string)[] |
|
*/ |
|
public $removedForeignKeys = []; |
|
|
|
/** |
|
* @internal Use {@see getOldTable()} instead. |
|
* |
|
* @var Table|null |
|
*/ |
|
public $fromTable; |
|
|
|
/** |
|
* Constructs a TableDiff object. |
|
* |
|
* @internal The diff can be only instantiated by a {@see Comparator}. |
|
* |
|
* @param string $tableName |
|
* @param array<Column> $addedColumns |
|
* @param array<ColumnDiff> $modifiedColumns |
|
* @param array<Column> $droppedColumns |
|
* @param array<Index> $addedIndexes |
|
* @param array<Index> $changedIndexes |
|
* @param array<Index> $removedIndexes |
|
* @param list<ForeignKeyConstraint> $addedForeignKeys |
|
* @param list<ForeignKeyConstraint> $changedForeignKeys |
|
* @param list<ForeignKeyConstraint|string> $removedForeignKeys |
|
* @param array<string,Column> $renamedColumns |
|
* @param array<string,Index> $renamedIndexes |
|
*/ |
|
public function __construct( |
|
$tableName, |
|
$addedColumns = [], |
|
$modifiedColumns = [], |
|
$droppedColumns = [], |
|
$addedIndexes = [], |
|
$changedIndexes = [], |
|
$removedIndexes = [], |
|
?Table $fromTable = null, |
|
$addedForeignKeys = [], |
|
$changedForeignKeys = [], |
|
$removedForeignKeys = [], |
|
$renamedColumns = [], |
|
$renamedIndexes = [] |
|
) { |
|
$this->name = $tableName; |
|
$this->addedColumns = $addedColumns; |
|
$this->changedColumns = $modifiedColumns; |
|
$this->renamedColumns = $renamedColumns; |
|
$this->removedColumns = $droppedColumns; |
|
$this->addedIndexes = $addedIndexes; |
|
$this->changedIndexes = $changedIndexes; |
|
$this->renamedIndexes = $renamedIndexes; |
|
$this->removedIndexes = $removedIndexes; |
|
$this->addedForeignKeys = $addedForeignKeys; |
|
$this->changedForeignKeys = $changedForeignKeys; |
|
$this->removedForeignKeys = $removedForeignKeys; |
|
|
|
if ($fromTable === null) { |
|
Deprecation::trigger( |
|
'doctrine/dbal', |
|
'https://github.com/doctrine/dbal/pull/5678', |
|
'Not passing the $fromTable to %s is deprecated.', |
|
__METHOD__, |
|
); |
|
} |
|
|
|
$this->fromTable = $fromTable; |
|
} |
|
|
|
/** |
|
* @deprecated Use {@see getOldTable()} instead. |
|
* |
|
* @param AbstractPlatform $platform The platform to use for retrieving this table diff's name. |
|
* |
|
* @return Identifier |
|
*/ |
|
public function getName(AbstractPlatform $platform) |
|
{ |
|
return new Identifier( |
|
$this->fromTable instanceof Table ? $this->fromTable->getQuotedName($platform) : $this->name, |
|
); |
|
} |
|
|
|
/** |
|
* @deprecated Rename tables via {@link AbstractSchemaManager::renameTable()} instead. |
|
* |
|
* @return Identifier|false |
|
*/ |
|
public function getNewName() |
|
{ |
|
Deprecation::triggerIfCalledFromOutside( |
|
'doctrine/dbal', |
|
'https://github.com/doctrine/dbal/pull/5663', |
|
'%s is deprecated. Rename tables via AbstractSchemaManager::renameTable() instead.', |
|
__METHOD__, |
|
); |
|
|
|
if ($this->newName === false) { |
|
return false; |
|
} |
|
|
|
return new Identifier($this->newName); |
|
} |
|
|
|
public function getOldTable(): ?Table |
|
{ |
|
return $this->fromTable; |
|
} |
|
|
|
/** @return list<Column> */ |
|
public function getAddedColumns(): array |
|
{ |
|
return array_values($this->addedColumns); |
|
} |
|
|
|
/** @return list<ColumnDiff> */ |
|
public function getModifiedColumns(): array |
|
{ |
|
return array_values($this->changedColumns); |
|
} |
|
|
|
/** @return list<Column> */ |
|
public function getDroppedColumns(): array |
|
{ |
|
return array_values($this->removedColumns); |
|
} |
|
|
|
/** @return array<string,Column> */ |
|
public function getRenamedColumns(): array |
|
{ |
|
return $this->renamedColumns; |
|
} |
|
|
|
/** @return list<Index> */ |
|
public function getAddedIndexes(): array |
|
{ |
|
return array_values($this->addedIndexes); |
|
} |
|
|
|
/** |
|
* @internal This method exists only for compatibility with the current implementation of schema managers |
|
* that modify the diff while processing it. |
|
*/ |
|
public function unsetAddedIndex(Index $index): void |
|
{ |
|
$this->addedIndexes = array_filter( |
|
$this->addedIndexes, |
|
static function (Index $addedIndex) use ($index): bool { |
|
return $addedIndex !== $index; |
|
}, |
|
); |
|
} |
|
|
|
/** @return array<Index> */ |
|
public function getModifiedIndexes(): array |
|
{ |
|
return array_values($this->changedIndexes); |
|
} |
|
|
|
/** @return list<Index> */ |
|
public function getDroppedIndexes(): array |
|
{ |
|
return array_values($this->removedIndexes); |
|
} |
|
|
|
/** |
|
* @internal This method exists only for compatibility with the current implementation of schema managers |
|
* that modify the diff while processing it. |
|
*/ |
|
public function unsetDroppedIndex(Index $index): void |
|
{ |
|
$this->removedIndexes = array_filter( |
|
$this->removedIndexes, |
|
static function (Index $removedIndex) use ($index): bool { |
|
return $removedIndex !== $index; |
|
}, |
|
); |
|
} |
|
|
|
/** @return array<string,Index> */ |
|
public function getRenamedIndexes(): array |
|
{ |
|
return $this->renamedIndexes; |
|
} |
|
|
|
/** @return list<ForeignKeyConstraint> */ |
|
public function getAddedForeignKeys(): array |
|
{ |
|
return $this->addedForeignKeys; |
|
} |
|
|
|
/** @return list<ForeignKeyConstraint> */ |
|
public function getModifiedForeignKeys(): array |
|
{ |
|
return $this->changedForeignKeys; |
|
} |
|
|
|
/** @return list<ForeignKeyConstraint|string> */ |
|
public function getDroppedForeignKeys(): array |
|
{ |
|
return $this->removedForeignKeys; |
|
} |
|
|
|
/** |
|
* @internal This method exists only for compatibility with the current implementation of the schema comparator. |
|
* |
|
* @param ForeignKeyConstraint|string $foreignKey |
|
*/ |
|
public function unsetDroppedForeignKey($foreignKey): void |
|
{ |
|
$this->removedForeignKeys = array_filter( |
|
$this->removedForeignKeys, |
|
static function ($removedForeignKey) use ($foreignKey): bool { |
|
return $removedForeignKey !== $foreignKey; |
|
}, |
|
); |
|
} |
|
|
|
/** |
|
* Returns whether the diff is empty (contains no changes). |
|
*/ |
|
public function isEmpty(): bool |
|
{ |
|
return count($this->addedColumns) === 0 |
|
&& count($this->changedColumns) === 0 |
|
&& count($this->removedColumns) === 0 |
|
&& count($this->renamedColumns) === 0 |
|
&& count($this->addedIndexes) === 0 |
|
&& count($this->changedIndexes) === 0 |
|
&& count($this->removedIndexes) === 0 |
|
&& count($this->renamedIndexes) === 0 |
|
&& count($this->addedForeignKeys) === 0 |
|
&& count($this->changedForeignKeys) === 0 |
|
&& count($this->removedForeignKeys) === 0; |
|
} |
|
}
|
|
|