public static function compareColumns(Column $fromColumn, Column $toColumn) { $changedProperties = []; // compare column types $fromDomain = $fromColumn->getDomain(); $toDomain = $toColumn->getDomain(); if ($fromDomain->getScale() !== $toDomain->getScale()) { $changedProperties['scale'] = [$fromDomain->getScale(), $toDomain->getScale()]; } if ($fromDomain->getSize() !== $toDomain->getSize()) { $changedProperties['size'] = [$fromDomain->getSize(), $toDomain->getSize()]; } if (strtoupper($fromDomain->getSqlType()) !== strtoupper($toDomain->getSqlType())) { $changedProperties['sqlType'] = [$fromDomain->getSqlType(), $toDomain->getSqlType()]; if ($fromDomain->getType() !== $toDomain->getType()) { $changedProperties['type'] = [$fromDomain->getType(), $toDomain->getType()]; } } if ($fromColumn->isNotNull() !== $toColumn->isNotNull()) { $changedProperties['notNull'] = [$fromColumn->isNotNull(), $toColumn->isNotNull()]; } // compare column default value $fromDefaultValue = $fromColumn->getDefaultValue(); $toDefaultValue = $toColumn->getDefaultValue(); if ($fromDefaultValue && !$toDefaultValue) { $changedProperties['defaultValueType'] = [$fromDefaultValue->getType(), null]; $changedProperties['defaultValueValue'] = [$fromDefaultValue->getValue(), null]; } elseif (!$fromDefaultValue && $toDefaultValue) { $changedProperties['defaultValueType'] = [null, $toDefaultValue->getType()]; $changedProperties['defaultValueValue'] = [null, $toDefaultValue->getValue()]; } elseif ($fromDefaultValue && $toDefaultValue) { if (!$fromDefaultValue->equals($toDefaultValue)) { if ($fromDefaultValue->getType() !== $toDefaultValue->getType()) { $changedProperties['defaultValueType'] = [$fromDefaultValue->getType(), $toDefaultValue->getType()]; } if ($fromDefaultValue->getValue() !== $toDefaultValue->getValue()) { $changedProperties['defaultValueValue'] = [$fromDefaultValue->getValue(), $toDefaultValue->getValue()]; } } } if ($fromColumn->isAutoIncrement() !== $toColumn->isAutoIncrement()) { $changedProperties['autoIncrement'] = [$fromColumn->isAutoIncrement(), $toColumn->isAutoIncrement()]; } return $changedProperties; }
public function getColumnDDL(Column $col) { if ($col->isAutoIncrement()) { $col->setType('INTEGER'); $col->setDomainForType('INTEGER'); } if ($col->getDefaultValue() && $col->getDefaultValue()->isExpression() && 'CURRENT_TIMESTAMP' === $col->getDefaultValue()->getValue()) { //sqlite use CURRENT_TIMESTAMP different than mysql/pgsql etc //we set it to the more common behavior $col->setDefaultValue(new ColumnDefaultValue("(datetime(CURRENT_TIMESTAMP, 'localtime'))", ColumnDefaultValue::TYPE_EXPR)); } return parent::getColumnDDL($col); }
public function getColumnDDL(Column $col) { $domain = $col->getDomain(); $ddl = array($this->quoteIdentifier($col->getName())); $sqlType = $domain->getSqlType(); $table = $col->getTable(); if ($col->isAutoIncrement() && $table && $table->getIdMethodParameters() == null) { $sqlType = $col->getType() === PropelTypes::BIGINT ? 'bigserial' : 'serial'; } if ($this->hasSize($sqlType) && $col->isDefaultSqlType($this)) { $ddl[] = $sqlType . $domain->printSize(); } else { $ddl[] = $sqlType; } if ($default = $this->getColumnDefaultValueDDL($col)) { $ddl[] = $default; } if ($notNull = $this->getNullString($col->isNotNull())) { $ddl[] = $notNull; } if ($autoIncrement = $col->getAutoIncrementString()) { $ddl[] = $autoIncrement; } return implode(' ', $ddl); }
/** * Appends the generated <column> XML node to its parent node. * * @param Column $column The Column model instance * @param \DOMNode $parentNode The parent DOMNode object */ private function appendColumnNode(Column $column, \DOMNode $parentNode) { $columnNode = $parentNode->appendChild($this->document->createElement('column')); $columnNode->setAttribute('name', $column->getName()); if ($phpName = $column->getPhpName()) { $columnNode->setAttribute('phpName', $phpName); } $columnNode->setAttribute('type', $column->getType()); $domain = $column->getDomain(); if ($size = $domain->getSize()) { $columnNode->setAttribute('size', $size); } if (null !== ($scale = $domain->getScale())) { $columnNode->setAttribute('scale', $scale); } $platform = $column->getPlatform(); if ($platform && !$column->isDefaultSqlType($platform)) { $columnNode->setAttribute('sqlType', $domain->getSqlType()); } if ($description = $column->getDescription()) { $columnNode->setAttribute('description', $description); } if ($column->isPrimaryKey()) { $columnNode->setAttribute('primaryKey', 'true'); } if ($column->isAutoIncrement()) { $columnNode->setAttribute('autoIncrement', 'true'); } if ($column->isNotNull()) { $columnNode->setAttribute('required', 'true'); } $defaultValue = $domain->getDefaultValue(); if ($defaultValue) { $type = $defaultValue->isExpression() ? 'defaultExpr' : 'defaultValue'; $columnNode->setAttribute($type, $defaultValue->getValue()); } if ($column->isInheritance()) { $columnNode->setAttribute('inheritance', $column->getInheritanceType()); foreach ($column->getInheritanceList() as $inheritance) { $this->appendInheritanceNode($inheritance, $columnNode); } } if ($column->isNodeKey()) { $columnNode->setAttribute('nodeKey', 'true'); if ($nodeKeySeparator = $column->getNodeKeySep()) { $columnNode->setAttribute('nodeKeySep', $nodeKeySeparator); } } foreach ($column->getVendorInformation() as $vendorInformation) { $this->appendVendorInformationNode($vendorInformation, $columnNode); } }
public function testSetAutoIncrement() { $column = new Column(); $column->setAutoIncrement(true); $this->assertTrue($column->isAutoIncrement()); }