public function test()
 {
     $subject = new AutoIncrementChangeEvent();
     $subject->setColumn(new Column('id'))->setOldValue(1)->setNewValue(2);
     static::assertSame('id', $subject->getColumn()->getName());
     static::assertSame(1, $subject->getOldValue());
     static::assertSame(2, $subject->getNewValue());
 }
 /**
  * @param \DatabaseExporterImporter\Model\Observer\Import\AutoIncrementObserver\AutoIncrementChangeEvent $event
  * @throws \RuntimeException
  */
 public function notify(AutoIncrementChangeEvent $event)
 {
     $dependentColumns = $this->foreignKeysFinder->setTables($this->tables)->setParentColumn($event->getColumn())->getDependentColumns();
     foreach ($dependentColumns as $dependentColumn) {
         foreach ($this->tables as $table) {
             if ($table->getName() === $dependentColumn->getTable()->getName()) {
                 foreach ($table->getDataRows() as $dataRow) {
                     foreach ($dataRow->getDataColumns() as $dataColumn) {
                         if (true === $dataColumn->isOriginalValue() && $dataColumn->getName() === $dependentColumn->getName() && $dataColumn->getValue() === $event->getOldValue()) {
                             $dataColumn->setOriginalValue(false)->setValue($event->getNewValue());
                         }
                     }
                 }
             }
         }
     }
 }
 public function test()
 {
     $data = json_encode(['maker' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'name']], 'data_rows' => [['id' => 1, 'name' => 'Maker 1'], ['id' => 2, 'name' => 'Maker 2']]], 'model' => ['columns' => [['name' => 'id', 'auto_increment' => 1], ['name' => 'maker_id', 'foreign_key' => ['table_name' => 'maker', 'column_name' => 'id']], ['name' => 'name']], 'data_rows' => [['id' => 3, 'maker_id' => 1, 'name' => 'Model 1'], ['id' => 4, 'maker_id' => 1, 'name' => 'Model 2'], ['id' => 5, 'maker_id' => 2, 'name' => 'Model 3']]]]);
     $subject = new JsonDataParser();
     $subject->setColumnsCreator(new JsonColumnsCreator())->setDataRowsCreator(new JsonDataRowsCreator())->setData($data);
     $tables = $subject->getTables();
     $makerColumns = $tables[0]->getColumns();
     $event = new AutoIncrementChangeEvent();
     $event->setColumn($makerColumns['id'])->setOldValue(1)->setNewValue(456);
     $subject = new AutoIncrementObserver(new ForeignKeyColumnsFinder());
     $subject->setTables($tables)->notify($event);
     $changedValues = 0;
     foreach ($tables[1]->getDataRows() as $dataRow) {
         foreach ($dataRow->getDataColumns() as $dataColumn) {
             if ('maker_id' === $dataColumn->getName() && 2 !== $dataColumn->getValue()) {
                 static::assertFalse($dataColumn->isOriginalValue());
                 static::assertSame(456, $dataColumn->getValue());
                 $changedValues++;
             }
         }
     }
     static::assertSame(2, $changedValues);
 }
 /**
  * @throws \Exception
  */
 public function import()
 {
     $tables = $this->dataParser->getTables();
     $this->observer->setTables($tables);
     $autoIncrementEvent = new AutoIncrementChangeEvent();
     foreach ($tables as $table) {
         $autoIncrementEvent->setColumn($this->autoIncrementFinder->getAutoIncrementColumn($table));
         foreach ($table->getDataRows() as $dataRow) {
             $dataRowValues = [];
             foreach ($dataRow->getDataColumns() as $dataColumn) {
                 if (null !== $autoIncrementEvent->getColumn() && $autoIncrementEvent->getColumn()->getName() === $dataColumn->getName()) {
                     $autoIncrementEvent->setOldValue($dataColumn->getValue());
                     continue;
                 }
                 $dataRowValues[] = $dataColumn;
             }
             $lastInsertId = $this->insertRecord($table, $dataRowValues);
             if (null !== $autoIncrementEvent->getColumn()) {
                 $this->observer->notify($autoIncrementEvent->setNewValue($lastInsertId));
             }
         }
     }
 }