Example #1
0
 public function testFieldGetters()
 {
     $table = new Table($this->readInputFile('table.sql'));
     $fieldNames = $table->getFieldNames();
     foreach ($fieldNames as $field) {
         $this->assertTrue($table->hasField($field));
         $this->assertInstanceOf('Diff\\Model\\Field', $table->getField($field));
     }
 }
Example #2
0
 /**
  * @param Database $db
  * @param Table $tbl
  * @return Table
  */
 public function getTableFields(Database $db, Table $tbl)
 {
     $query = sprintf('SHOW COLUMNS IN `%s` FROM `%s`', $tbl->getName(), $db->getName());
     $stmt = $this->conn->query($query);
     while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
         $field = new Field('', $row['Field']);
         $field->setType($row['Type'])->setNullable(strtoupper($row['Null']) == 'YES')->setDefaultValue($row['Default']);
         if ($row['Extra']) {
             if ($row['Extra'] == 'auto_increment') {
                 $field->setAutoIncrement(true);
             } else {
                 //things like on update?
                 $field->setExtraString($row['Extra']);
             }
         }
         $tbl->addField($field, true);
     }
     return $tbl;
 }
Example #3
0
 /**
  * @param Table $table
  * @param Database $db
  * @return Table
  */
 protected function addCreateStatement(Table $table, Database $db)
 {
     $stmt = $this->conn->query(sprintf('SHOW CREATE TABLE %s.%s', $db->getName(), $table->getName()));
     $create = $stmt->fetch(\PDO::FETCH_ASSOC);
     if (!$create || !isset($create['Create Table'])) {
         return null;
     }
     $table->setStatement($create['Create Table'])->parse($create['Create Table']);
     $db->addTable($table);
     return $table;
 }
Example #4
0
 /**
  * @param Database $toCheck
  * @param Table $missing
  * @param Database $from
  * @return array
  */
 protected function crossCheckDependencies(Database $toCheck, Table $missing, Database $from)
 {
     $renameCandidates = [];
     $possibleDrops = [];
     foreach ($toCheck as $name => $table) {
         if (!$from->hasTable($name)) {
             $possibleDrops[$name] = $table;
         }
     }
     $depString = $missing->getSortedDependencyString();
     /** @var Table $table */
     foreach ($possibleDrops as $name => $table) {
         if ($depString == $table->getSortedDependencyString()) {
             $renameCandidates[$name] = $table;
         } else {
             //X-check existing FK's
             /** @var ForeignKey $fk */
             foreach ($table->getConstraints() as $fkName => $fk) {
                 $missingFk = $missing->getConstraintByName($fkName);
                 if ($missingFk && $missingFk->getReferences() === $fk->getReferences()) {
                     $renameCandidates[$name] = ['table' => $table, 'similarity' => $table->getSimilarityPercentage($missing)];
                 }
             }
         }
     }
     return $renameCandidates;
 }