public static function compareColumns(Column $fromColumn, Column $toColumn) { $changedProperties = array(); // compare column types $fromDomain = $fromColumn->getDomain(); $toDomain = $toColumn->getDomain(); if ($fromDomain->getType() != $toDomain->getType()) { if ($toColumn->getType() == PropelTypes::ENUM && $toColumn->getPhpType() == 'string') { // use MySQL native ENUM support } else { $changedProperties['type'] = array($fromDomain->getType(), $toDomain->getType()); } } if ($fromDomain->getScale() != $toDomain->getScale()) { $changedProperties['scale'] = array($fromDomain->getScale(), $toDomain->getScale()); } if ($fromDomain->getSize() != $toDomain->getSize()) { $changedProperties['size'] = array($fromDomain->getSize(), $toDomain->getSize()); } if (strtoupper($fromDomain->getSqlType()) != strtoupper($toDomain->getSqlType())) { $changedProperties['sqlType'] = array($fromDomain->getSqlType(), $toDomain->getSqlType()); } if ($fromColumn->isNotNull() != $toColumn->isNotNull()) { $changedProperties['notNull'] = array($fromColumn->isNotNull(), $toColumn->isNotNull()); } // compare column default value $fromDefaultValue = $fromColumn->getDefaultValue(); $toDefaultValue = $toColumn->getDefaultValue(); if ($fromDefaultValue && !$toDefaultValue) { $changedProperties['defaultValueType'] = array($fromDefaultValue->getType(), null); $changedProperties['defaultValueValue'] = array($fromDefaultValue->getValue(), null); } elseif (!$fromDefaultValue && $toDefaultValue) { $changedProperties['defaultValueType'] = array(null, $toDefaultValue->getType()); $changedProperties['defaultValueValue'] = array(null, $toDefaultValue->getValue()); } elseif ($fromDefaultValue && $toDefaultValue) { if (!$fromDefaultValue->equals($toDefaultValue)) { if ($fromDefaultValue->getType() != $toDefaultValue->getType()) { $changedProperties['defaultValueType'] = array($fromDefaultValue->getType(), $toDefaultValue->getType()); } if ($fromDefaultValue->getValue() != $toDefaultValue->getValue()) { $changedProperties['defaultValueValue'] = array($fromDefaultValue->getValue(), $toDefaultValue->getValue()); } } } if ($fromColumn->isAutoIncrement() != $toColumn->isAutoIncrement()) { $changedProperties['autoIncrement'] = array($fromColumn->isAutoIncrement(), $toColumn->isAutoIncrement()); } return $changedProperties; }
static function compareColumns(Column $fromColumn, Column $toColumn) { $changedProperties = array(); // compare column types $fromDomain = $fromColumn->getDomain(); $toDomain = $toColumn->getDomain(); if ($fromDomain->getSqlType() != $toDomain->getSqlType()) { $changedProperties['type'] = array($fromDomain->getSqlType(), $toDomain->getSqlType()); } if ($fromDomain->getScale() != $toDomain->getScale()) { $changedProperties['scale'] = array($fromDomain->getScale(), $toDomain->getScale()); } if ($fromDomain->getSize() != $toDomain->getSize()) { $changedProperties['size'] = array($fromDomain->getSize(), $toDomain->getSize()); } if ($fromColumn->isNotNull() != $toColumn->isNotNull()) { $changedProperties['notNull'] = array($fromColumn->isNotNull(), $toColumn->isNotNull()); } // compare column default value $fromDefaultValue = $fromColumn->getDefaultValue(); $toDefaultValue = $toColumn->getDefaultValue(); if ($fromDefaultValue && !$toDefaultValue) { $changedProperties['defaultValueType'] = array($fromDefaultValue->getType(), null); $changedProperties['defaultValueValue'] = array($fromDefaultValue->getValue(), null); } elseif (!$fromDefaultValue && $toDefaultValue) { $changedProperties['defaultValueType'] = array(null, $toDefaultValue->getType()); $changedProperties['defaultValueValue'] = array(null, $toDefaultValue->getValue()); } elseif ($fromDefaultValue && $toDefaultValue) { if (!$fromDefaultValue->equals($toDefaultValue)) { if ($fromDefaultValue->getType() != $toDefaultValue->getType()) { $changedProperties['defaultValueType'] = array($fromDefaultValue->getType(), $toDefaultValue->getType()); } if ($fromDefaultValue->getValue() != $toDefaultValue->getValue()) { $changedProperties['defaultValueValue'] = array($fromDefaultValue->getValue(), $toDefaultValue->getValue()); } } } if ($fromColumn->isAutoIncrement() != $toColumn->isAutoIncrement()) { $changedProperties['autoIncrement'] = array($fromColumn->isAutoIncrement(), $toColumn->isAutoIncrement()); } return $changedProperties; }
public function getColumnDDL(Column $col) { $domain = $col->getDomain(); $sqlType = $domain->getSqlType(); $notNullString = $this->getNullString($col->isNotNull()); $defaultSetting = $this->getColumnDefaultValueDDL($col); // Special handling of TIMESTAMP/DATETIME types ... // See: http://propel.phpdb.org/trac/ticket/538 if ($sqlType == 'DATETIME') { $def = $domain->getDefaultValue(); if ($def && $def->isExpression()) { // DATETIME values can only have constant expressions $sqlType = 'TIMESTAMP'; } } elseif ($sqlType == 'DATE') { $def = $domain->getDefaultValue(); if ($def && $def->isExpression()) { throw new EngineException("DATE columns cannot have default *expressions* in MySQL."); } } elseif ($sqlType == 'TEXT' || $sqlType == 'BLOB') { if ($domain->getDefaultValue()) { throw new EngineException("BLOB and TEXT columns cannot have DEFAULT values. in MySQL."); } } $ddl = array($this->quoteIdentifier($col->getName())); if ($this->hasSize($sqlType)) { $ddl[] = $sqlType . $domain->printSize(); } else { $ddl[] = $sqlType; } $colinfo = $col->getVendorInfoForType($this->getDatabaseType()); if ($colinfo->hasParameter('Charset')) { $ddl[] = 'CHARACTER SET ' . $this->quote($colinfo->getParameter('Charset')); } if ($colinfo->hasParameter('Collation')) { $ddl[] = 'COLLATE ' . $this->quote($colinfo->getParameter('Collation')); } elseif ($colinfo->hasParameter('Collate')) { $ddl[] = 'COLLATE ' . $this->quote($colinfo->getParameter('Collate')); } if ($sqlType == 'TIMESTAMP') { if ($notNullString == '') { $notNullString = 'NULL'; } if ($defaultSetting == '' && $notNullString == 'NOT NULL') { $defaultSetting = 'DEFAULT CURRENT_TIMESTAMP'; } if ($notNullString) { $ddl[] = $notNullString; } if ($defaultSetting) { $ddl[] = $defaultSetting; } } else { if ($defaultSetting) { $ddl[] = $defaultSetting; } if ($notNullString) { $ddl[] = $notNullString; } } if ($autoIncrement = $col->getAutoIncrementString()) { $ddl[] = $autoIncrement; } if ($col->getDescription()) { $ddl[] = 'COMMENT ' . $this->quote($col->getDescription()); } return implode(' ', $ddl); }