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); }
/** * 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 {"; }
/** * 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()); }