public function testCompareSort() { $c1 = new Column('Foo'); $c2 = new Column('Bar'); $c3 = new Column('Baz'); $c4 = new Column('Faz'); $fk1 = new ForeignKey(); $fk1->addReference($c1, $c3); $fk1->addReference($c2, $c4); $t1 = new Table('Baz'); $t1->addForeignKey($fk1); $fk2 = new ForeignKey(); $fk2->addReference($c2, $c4); $fk2->addReference($c1, $c3); $t2 = new Table('Baz'); $t2->addForeignKey($fk2); $this->assertFalse(PropelForeignKeyComparator::computeDiff($fk1, $fk2)); }
/** * Compare the foreign keys of the fromTable and the toTable, * and modifies the inner tableDiff if necessary. * Returns the number of differences. * * @param boolean $caseInsensitive Whether the comparison is case insensitive. * False by default. * * @return integer The number of foreign key differences */ public function compareForeignKeys($caseInsensitive = false) { $fkDifferences = 0; $fromTableFks = $this->getFromTable()->getForeignKeys(); $toTableFks = $this->getToTable()->getForeignKeys(); foreach ($fromTableFks as $fromTableFkPos => $fromTableFk) { foreach ($toTableFks as $toTableFkPos => $toTableFk) { if (PropelForeignKeyComparator::computeDiff($fromTableFk, $toTableFk, $caseInsensitive) === false) { unset($fromTableFks[$fromTableFkPos]); unset($toTableFks[$toTableFkPos]); } else { $test = $caseInsensitive ? strtolower($fromTableFk->getName()) == strtolower($toTableFk->getName()) : $fromTableFk->getName() == $toTableFk->getName(); if ($test) { // same name, but different columns $this->tableDiff->addModifiedFk($fromTableFk->getName(), $fromTableFk, $toTableFk); unset($fromTableFks[$fromTableFkPos]); unset($toTableFks[$toTableFkPos]); $fkDifferences++; } } } } foreach ($fromTableFks as $fromTableFkPos => $fromTableFk) { if (!$fromTableFk->isSkipSql() && !in_array($fromTableFk, $toTableFks)) { $this->tableDiff->addRemovedFk($fromTableFk->getName(), $fromTableFk); $fkDifferences++; } } foreach ($toTableFks as $toTableFkPos => $toTableFk) { if (!$toTableFk->isSkipSql() && !in_array($toTableFk, $fromTableFks)) { $this->tableDiff->addAddedFk($toTableFk->getName(), $toTableFk); $fkDifferences++; } } return $fkDifferences; }
public function testCompareOnDelete() { $c1 = new Column('Foo'); $c2 = new Column('Bar'); $fk1 = new ForeignKey(); $fk1->addReference($c1, $c2); $fk1->setOnDelete(ForeignKey::SETNULL); $t1 = new Table('Baz'); $t1->addForeignKey($fk1); $c3 = new Column('Foo'); $c4 = new Column('Bar'); $fk2 = new ForeignKey(); $fk2->addReference($c3, $c4); $fk2->setOnDelete(ForeignKey::RESTRICT); $t2 = new Table('Baz'); $t2->addForeignKey($fk2); $this->assertTrue(PropelForeignKeyComparator::computeDiff($fk1, $fk2)); }