/** * Compute and return the difference between two table objects * * @param Column $fromTable * @param Column $toTable * @param boolean $caseInsensitive Whether the comparison is case insensitive. * False by default. * * @return PropelTableDiff|boolean return false if the two tables are similar */ public static function computeDiff(Table $fromTable, Table $toTable, $caseInsensitive = false) { $tc = new self(); $tc->setFromTable($fromTable); $tc->setToTable($toTable); $differences = 0; $differences += $tc->compareColumns($caseInsensitive); $differences += $tc->comparePrimaryKeys($caseInsensitive); $differences += $tc->compareIndices($caseInsensitive); $differences += $tc->compareForeignKeys($caseInsensitive); return $differences > 0 ? $tc->getTableDiff() : false; }
/** * Returns the reverse diff for this diff. * * @return TableDiff */ public function getReverseDiff() { $diff = new self(); // tables $diff->setFromTable($this->toTable); $diff->setToTable($this->fromTable); // columns if ($this->hasAddedColumns()) { $diff->setRemovedColumns($this->addedColumns); } if ($this->hasRemovedColumns()) { $diff->setAddedColumns($this->removedColumns); } if ($this->hasRenamedColumns()) { $renamedColumns = []; foreach ($this->renamedColumns as $columnRenaming) { $renamedColumns[] = array_reverse($columnRenaming); } $diff->setRenamedColumns($renamedColumns); } if ($this->hasModifiedColumns()) { $columnDiffs = []; foreach ($this->modifiedColumns as $name => $columnDiff) { $columnDiffs[$name] = $columnDiff->getReverseDiff(); } $diff->setModifiedColumns($columnDiffs); } // pks if ($this->hasRemovedPkColumns()) { $diff->setAddedPkColumns($this->removedPkColumns); } if ($this->hasAddedPkColumns()) { $diff->setRemovedPkColumns($this->addedPkColumns); } if ($this->hasRenamedPkColumns()) { $renamedPkColumns = []; foreach ($this->renamedPkColumns as $columnRenaming) { $renamedPkColumns[] = array_reverse($columnRenaming); } $diff->setRenamedPkColumns($renamedPkColumns); } // indices if ($this->hasRemovedIndices()) { $diff->setAddedIndices($this->removedIndices); } if ($this->hasAddedIndices()) { $diff->setRemovedIndices($this->addedIndices); } if ($this->hasModifiedIndices()) { $indexDiffs = []; foreach ($this->modifiedIndices as $name => $indexDiff) { $indexDiffs[$name] = array_reverse($indexDiff); } $diff->setModifiedIndices($indexDiffs); } // fks if ($this->hasAddedFks()) { $diff->setRemovedFks($this->addedFks); } if ($this->hasRemovedFks()) { $diff->setAddedFks($this->removedFks); } if ($this->hasModifiedFks()) { $fkDiffs = []; foreach ($this->modifiedFks as $name => $fkDiff) { $fkDiffs[$name] = array_reverse($fkDiff); } $diff->setModifiedFks($fkDiffs); } return $diff; }
/** * Get the reverse diff for this diff * * @return TableDiff */ public function getReverseDiff() { $diff = new self(); // tables $diff->setFromTable($this->getToTable()); $diff->setToTable($this->getFromTable()); // columns $diff->setAddedColumns($this->getRemovedColumns()); $diff->setRemovedColumns($this->getAddedColumns()); $renamedColumns = array(); foreach ($this->getRenamedColumns() as $columnRenaming) { $renamedColumns[] = array_reverse($columnRenaming); } $diff->setRenamedColumns($renamedColumns); $columnDiffs = array(); foreach ($this->getModifiedColumns() as $name => $columnDiff) { $columnDiffs[$name] = $columnDiff->getReverseDiff(); } $diff->setModifiedColumns($columnDiffs); // pks $diff->setAddedPkColumns($this->getRemovedPkColumns()); $diff->setRemovedPkColumns($this->getAddedPkColumns()); $renamedPkColumns = array(); foreach ($this->getRenamedPkColumns() as $columnRenaming) { $renamedPkColumns[] = array_reverse($columnRenaming); } $diff->setRenamedPkColumns($renamedPkColumns); // indices $diff->setAddedIndices($this->getRemovedIndices()); $diff->setRemovedIndices($this->getAddedIndices()); $indexDiffs = array(); foreach ($this->getModifiedIndices() as $name => $indexDiff) { $indexDiffs[$name] = array_reverse($indexDiff); } $diff->setModifiedIndices($indexDiffs); // fks $diff->setAddedFks($this->getRemovedFks()); $diff->setRemovedFks($this->getAddedFks()); $fkDiffs = array(); foreach ($this->getModifiedFks() as $name => $fkDiff) { $fkDiffs[$name] = array_reverse($fkDiff); } $diff->setModifiedFks($fkDiffs); return $diff; }
/** * Returns the computed difference between two table objects. * * @param Table $fromTable * @param Table $toTable * @param boolean $caseInsensitive * @return TableDiff|Boolean */ public static function computeDiff(Table $fromTable, Table $toTable, $caseInsensitive = false) { $tc = new self(); $tc->setFromTable(clone $fromTable); $tc->setToTable(clone $toTable); if ($toTable->getDatabase() || $fromTable->getDatabase()) { $platform = $toTable->getDatabase()->getPlatform() ?: $fromTable->getDatabase()->getPlatform(); if ($platform) { $platform->normalizeTable($tc->getFromTable()); $platform->normalizeTable($tc->getToTable()); } } $differences = 0; $differences += $tc->compareColumns($caseInsensitive); $differences += $tc->comparePrimaryKeys($caseInsensitive); $differences += $tc->compareIndices($caseInsensitive); $differences += $tc->compareForeignKeys($caseInsensitive); return $differences > 0 ? $tc->getTableDiff() : false; }