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;
 }
 protected function addTranslatedColumnSetter(Column $column)
 {
     $visibility = $column->getTable()->isReadOnly() ? 'protected' : $column->getMutatorVisibility();
     $typeHint = '';
     $null = '';
     if ($column->getTypeHint()) {
         $typeHint = $column->getTypeHint();
         if ('array' !== $typeHint) {
             $typeHint = $this->declareClass($typeHint);
         }
         $typeHint .= ' ';
         if (!$column->isNotNull()) {
             $null = ' = null';
         }
     }
     $typeHint = "{$typeHint}\$v{$null}";
     $i18nTablePhpName = $this->builder->getClassNameFromBuilder($this->builder->getNewStubObjectBuilder($this->behavior->getI18nTable()));
     $tablePhpName = $this->builder->getObjectClassName();
     $objectBuilder = $this->builder->getNewObjectBuilder($this->behavior->getI18nTable());
     $comment = '';
     if ($this->isDateType($column->getType())) {
         $objectBuilder->addTemporalMutatorComment($comment, $column);
     } else {
         $objectBuilder->addMutatorComment($comment, $column);
     }
     $comment = preg_replace('/^\\t/m', '', $comment);
     $comment = str_replace('@return     $this|' . $i18nTablePhpName, '@return     $this|' . $tablePhpName, $comment);
     return $this->renderTemplate('objectTranslatedColumnSetter', ['comment' => $comment, 'column' => $column, 'visibility' => $visibility, 'typeHint' => $typeHint, 'columnPhpName' => $column->getPhpName(), 'localeColumnName' => $this->behavior->getLocaleColumn()->getPhpName()]);
 }
 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) && $col->isDefaultSqlType($this)) {
         $ddl[] = $sqlType . $col->getSizeDefinition();
     } 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);
 }
示例#4
0
 /**
  * Adds the mutator function declaration.
  *
  * @param string &$script
  * @param Column $column
  */
 public function addMutatorOpenOpen(&$script, Column $column)
 {
     $cfc = $column->getPhpName();
     $visibility = $this->getTable()->isReadOnly() ? 'protected' : $column->getMutatorVisibility();
     $typeHint = '';
     $null = '';
     if ($column->getTypeHint()) {
         $typeHint = $column->getTypeHint();
         if ('array' !== $typeHint) {
             $typeHint = $this->declareClass($typeHint);
         }
         $typeHint .= ' ';
         if (!$column->isNotNull()) {
             $null = ' = null';
         }
     }
     $script .= "\n    " . $visibility . " function set{$cfc}({$typeHint}\$v{$null})\n    {";
 }
示例#5
0
 /**
  * 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 testSetNotNull()
 {
     $column = new Column();
     $column->setNotNull(true);
     $this->assertTrue($column->isNotNull());
 }