/**
  * 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;
 }
Example #3
0
 /**
  * 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;
 }