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);
 }
Пример #3
0
 /**
  * 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;
 }
Пример #5
0
 /**
  * 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;
 }