41 private $migrateDataBetweenShards;
46 private $elementHistoryFactory;
51 private $elementFactory;
69 $this->createTable = $createTable;
70 $this->dropTable = $dropTable;
71 $this->migrateDataBetweenShards = $migrateDataBetweenShards;
72 $this->elementHistoryFactory = $elementHistoryFactory;
73 $this->elementFactory = $elementFactory;
103 $newTable = $elementHistory->
getNew();
105 $oldTable = $elementHistory->
getOld();
107 $recreationTable = $this->elementFactory->create(
110 'name' => $newTable->getName(),
112 'nameWithoutPrefix' => $newTable->getNameWithoutPrefix(),
113 'resource' => $newTable->getResource(),
114 'engine' => $newTable->getEngine(),
115 'charset' => $newTable->getCharset(),
116 'collation' => $newTable->getCollation(),
117 'onCreate' => $newTable->getOnCreate(),
118 'comment' => $newTable->getOnCreate(),
119 'columns' => $oldTable->getColumns(),
120 'indexes' => $oldTable->getIndexes(),
121 'constraints' => array_merge($oldTable->getInternalConstraints(), $newTable->getReferenceConstraints())
125 return $recreationTable;
133 $recreatedTable = $this->getRecreatedTable($elementHistory);
134 $recreatedElementHistory = $this->elementHistoryFactory->create(
136 'old' => $elementHistory->
getOld(),
137 'new' => $recreatedTable
140 $statements = $this->createTable->doOperation($recreatedElementHistory);
142 foreach ($statements as $statement) {
143 if ($this->migrateDataBetweenShards->isApplicable((
string) $recreatedTable->getOnCreate())) {
144 $statement->addTrigger($this->migrateDataBetweenShards->getCallback($recreatedElementHistory));
148 return array_merge($statements, $this->dropTable->doOperation($recreatedElementHistory));
doOperation(ElementHistory $elementHistory)
__construct(CreateTable $createTable, DropTable $dropTable, MigrateDataBetweenShards $migrateDataBetweenShards, ElementHistoryFactory $elementHistoryFactory, ElementFactory $elementFactory)