Esempio n. 1
0
 /**
  * Generate subpart of raport for columns of table.
  *
  * @param string $table
  * @return array
  */
 private function diffColumns($table)
 {
     $sourceTable = $this->adapter('source')->table($table);
     $targetTable = $this->adapter('target')->table($table);
     $sourceColumns = $sourceTable->columns();
     $targetColumns = $targetTable->columns();
     $baseDiff = $this->baseDiff($sourceColumns, $targetColumns);
     $diff = $baseDiff['diff'];
     $status = $baseDiff['status'];
     foreach ($diff as $column => &$diffColumn) {
         if ($diffColumn['status'] != self::NO_CHANGE) {
             // pomijam kolumny usuniete lub dodane
             continue;
         }
         // tworze kolumny ze zrodla oraz z docelowej bazy
         $sourceColumn = $sourceTable->column($column);
         $targetColumn = $targetTable->column($column);
         // przechodze po wszystkich dostepnych atrybutach kolumny
         foreach (Column::allAttributes() as $attribute) {
             if ($this->omitAttribute($attribute, 'column')) {
                 continue;
             }
             // pobieram wartosci tych atrybytow
             $sourceAttribute = $sourceColumn->{$attribute}();
             $targetAttribute = $targetColumn->{$attribute}();
             if ($sourceAttribute == Column::NOT_SUPPORTED || $targetAttribute == Column::NOT_SUPPORTED) {
                 // jesli ktorykolwiek z atrybutow nie jest wspierany przez
                 // ktorykolwiek z adapterow to pomijam cala procedure
                 // porownania
                 continue;
             }
             // @todo : trzeba zmodyfikowac metoda sprawdzania
             if ($sourceAttribute !== $targetAttribute) {
                 // atrybuty sa rozne wiec zaznaczam ze kolumna sie rozni,
                 // zmienna status oznacza ze w calej tabeli cos sie rozni
                 $diffColumn['status'] = $status = self::CHANGED;
                 // zapisuje wartosci tych atrybutow
                 $diffColumn['diff'][$attribute] = array('source' => $sourceAttribute, 'target' => $targetAttribute);
             }
         }
     }
     return array('diff' => $diff, 'status' => $status);
 }
Esempio n. 2
0
 public function inline(MidataColumn $column)
 {
     $assert = $this->service('assert');
     $sql = "";
     $columnName = $column->name();
     $type = $column->need(MidataColumn::ATTRIBUTE_TYPE);
     $nullable = $column->need(MidataColumn::ATTRIBUTE_NULLABLE);
     $defaultValue = $column->need(MidataColumn::ATTRIBUTE_DEFAULTVALUE);
     $length = $column->need(MidataColumn::ATTRIBUTE_LENGTH);
     $numericPrecision = $column->need(MidataColumn::ATTRIBUTE_NUMERICPRECISION);
     $numericScale = $column->need(MidataColumn::ATTRIBUTE_NUMERICSCALE);
     $unsigned = $column->need(MidataColumn::ATTRIBUTE_UNSIGNED);
     if ($unsigned) {
         $unsigned = "unsigned";
     } else {
         $unsigned = "";
     }
     $sequence = false;
     if ($column->isSupported(MidataColumn::ATTRIBUTE_SEQUENCE)) {
         $sequence = $column->sequence();
     }
     $comment = "";
     if ($column->isSupported(MidataColumn::ATTRIBUTE_COMMENT)) {
         $comment = $column->comment();
     }
     $typeOfDataType = $this->typeOfDataType($type);
     switch ($typeOfDataType) {
         case 'precision':
             $sql = "`{$columnName}` {$type}({$numericPrecision}) {$unsigned}";
             break;
         case 'precisionScale':
             $sql = "`{$columnName}` {$tyle}({$numericPrecision}, {$numericScale}) {$unsigned}";
             break;
         case 'length':
             $sql = "`{$columnName}` {$type}({$length})";
             break;
         case 'empty':
             $sql = "`{$columnName}` {$type}";
             break;
         case 'enum':
             $enums = "";
             foreach ($column->enums() as $enum) {
                 $enums .= "'{$enum}',";
             }
             $enums = trim($enums, ',');
             $sql = "`{$columnName}` {$type}({$enums})";
             break;
         default:
             $assert->exception("Not recognized type of data type.");
             break;
     }
     if ($nullable) {
         $sql = "{$sql} NULL";
     } else {
         $sql = "{$sql} NOT NULL";
     }
     if (is_null($defaultValue)) {
         if ($column->nullable()) {
             $sql = "{$sql} DEFAULT NULL";
         }
     } else {
         if (in_array($defaultValue, self::$predefinedDefaultValue)) {
             $sql = "{$sql} DEFAULT {$defaultValue}";
         } else {
             $sql = "{$sql} DEFAULT '{$defaultValue}'";
         }
     }
     if (!empty($comment)) {
         $sql = "{$sql} COMMENT '{$comment}'";
     }
     if ($sequence) {
         $sql = "{$sql} AUTO_INCREMENT";
     }
     return $sql;
 }