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())) { if ($fromDomain->getOriginSqlType()) { if (strtoupper($fromDomain->getOriginSqlType()) !== strtoupper($toDomain->getSqlType())) { if ($fromDomain->getType() !== $toDomain->getType()) { $changedProperties['type'] = [$fromDomain->getType(), $toDomain->getType()]; } $changedProperties['sqlType'] = [$fromDomain->getSqlType(), $toDomain->getSqlType()]; } } else { $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); }
/** * Gets accessor lazy loaded snippets. * * @param Column $column * @return string */ protected function getAccessorLazyLoadSnippet(Column $column) { if ($column->isLazyLoad()) { $clo = $column->getLowercasedName(); $defaultValueString = 'null'; $def = $column->getDefaultValue(); if ($def !== null && !$def->isExpression()) { $defaultValueString = $this->getDefaultValueString($column); } return "\n if (!\$this->{$clo}_isLoaded && \$this->{$clo} === {$defaultValueString} && !\$this->isNew()) {\n \$this->load{$column->getPhpName()}(\$con);\n }\n"; } return ''; }
/** * Returns the SQL for the default value of a Column object * @return string */ public function getColumnDefaultValueDDL(Column $col) { $default = ''; $defaultValue = $col->getDefaultValue(); if (null !== $defaultValue) { $default .= 'DEFAULT '; if ($defaultValue->isExpression()) { $default .= $defaultValue->getValue(); } else { if ($col->isTextType()) { $default .= $this->quote($defaultValue->getValue()); } elseif (in_array($col->getType(), array(PropelTypes::BOOLEAN, PropelTypes::BOOLEAN_EMU))) { $default .= $this->getBooleanString($defaultValue->getValue()); } elseif ($col->getType() == PropelTypes::ENUM) { $default .= array_search($defaultValue->getValue(), $col->getValueSet()); } elseif ($col->isPhpArrayType()) { $value = $this->getPhpArrayString($defaultValue->getValue()); if (null === $value) { $default = ''; } else { $default .= $value; } } else { $default .= $defaultValue->getValue(); } } } return $default; }
/** * Returns the SQL for the default value of a Column object * @return string */ public function getColumnDefaultValueDDL(Column $col) { $default = ''; $defaultValue = $col->getDefaultValue(); if (null !== $defaultValue) { $default .= 'DEFAULT '; if ($defaultValue->isExpression()) { $default .= $defaultValue->getValue(); } else { if ($col->isTextType()) { $default .= $this->quote($defaultValue->getValue()); } elseif (in_array($col->getType(), [PropelTypes::BOOLEAN, PropelTypes::BOOLEAN_EMU])) { $default .= $this->getBooleanString($defaultValue->getValue()); } elseif ($col->getType() == PropelTypes::ENUM) { $default .= array_search($defaultValue->getValue(), $col->getValueSet()); } elseif ($col->isSetType()) { $val = trim($defaultValue->getValue()); $values = []; foreach (explode(',', $val) as $v) { $values[] = trim($v); } $default .= SetColumnConverter::convertToInt($values, $col->getValueSet()); } elseif ($col->isPhpArrayType()) { $value = $this->getPhpArrayString($defaultValue->getValue()); if (null === $value) { $default = ''; } else { $default .= $value; } } else { $default .= $defaultValue->getValue(); } } } return $default; }