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));
 }