40 private $definitionAggregator;
45 private $dbSchemaWriter;
50 private $elementFactory;
55 private $elementHistoryFactory;
60 private $addComplexElement;
92 $this->definitionAggregator = $definitionAggregator;
93 $this->dbSchemaWriter = $dbSchemaWriter;
94 $this->elementFactory = $elementFactory;
95 $this->elementHistoryFactory = $elementHistoryFactory;
96 $this->addComplexElement = $addComplexElement;
97 $this->dropElement = $dropElement;
98 $this->triggers = $triggers;
107 private function getTemporaryIndexHistory(
Column $column)
109 $index = $this->elementFactory->create(
112 'name' => self::TEMPORARY_KEY,
113 'column' => [$column->
getName()],
114 'columns' => [$column],
118 return $this->elementHistoryFactory->create([
'new' =>
$index]);
143 private function columnIsAutoIncrement(
Column $column)
145 return $column instanceof
Integer && $column->isIdentity();
158 $column = $elementHistory->
getNew();
160 foreach ($this->triggers as $ddlTrigger) {
161 if ($ddlTrigger->isApplicable((
string) $column->
getOnCreate())) {
162 $statement->
addTrigger($ddlTrigger->getCallback($elementHistory));
165 $statements = [$statement];
171 if ($this->columnIsAutoIncrement($column) && !empty($statement->
getTriggers())) {
179 $indexHistory = $this->getTemporaryIndexHistory($column);
181 $statements = array_merge($this->addComplexElement->doOperation($indexHistory), $statements);
183 $statements = array_merge($statements, $this->dropElement->doOperation($indexHistory));
192 public function doOperation(ElementHistory $elementHistory)
197 $element = $elementHistory->getNew();
198 $definition = $this->definitionAggregator->toDefinition(
$element);
200 $statement = $this->dbSchemaWriter->addElement(
202 $element->getTable()->getResource(),
207 $statements = $this->setupTriggersIfExists($statement, $elementHistory);
209 if ($this->columnIsAutoIncrement(
$element)) {
211 $statements[] = $this->dbSchemaWriter->resetAutoIncrement(
doOperation(ElementHistory $elementHistory)
__construct(DefinitionAggregator $definitionAggregator, DbSchemaWriterInterface $dbSchemaWriter, ElementFactory $elementFactory, ElementHistoryFactory $elementHistoryFactory, AddComplexElement $addComplexElement, DropElement $dropElement, array $triggers=[])
addTrigger(callable $trigger)