387 lines
8.2 KiB
PHP
387 lines
8.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of the Propel package.
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*
|
|
* @license MIT License
|
|
*/
|
|
|
|
require_once 'model/XMLElement.php';
|
|
|
|
/**
|
|
* A class for holding data about a domain used in the schema.
|
|
*
|
|
* @author Hans Lellelid <hans@xmpl.org> (Propel)
|
|
* @author Martin Poeschl <mpoeschl@marmot.at> (Torque)
|
|
* @version $Revision: 1612 $
|
|
* @package propel.generator.model
|
|
*/
|
|
class Domain extends XMLElement
|
|
{
|
|
|
|
/**
|
|
* @var string The name of this domain
|
|
*/
|
|
private $name;
|
|
|
|
/**
|
|
* @var string Description for this domain.
|
|
*/
|
|
private $description;
|
|
|
|
/**
|
|
* @var int Size
|
|
*/
|
|
private $size;
|
|
|
|
/**
|
|
* @var int Scale
|
|
*/
|
|
private $scale;
|
|
|
|
/**
|
|
* @var int Propel type from schema
|
|
*/
|
|
private $propelType;
|
|
|
|
/**
|
|
* @var string The SQL type to use for this column
|
|
*/
|
|
private $sqlType;
|
|
|
|
/**
|
|
* @var ColumnDefaultValue A default value
|
|
*/
|
|
private $defaultValue;
|
|
|
|
/**
|
|
* @var Database
|
|
*/
|
|
private $database;
|
|
|
|
/**
|
|
* Creates a new Domain object.
|
|
* If this domain needs a name, it must be specified manually.
|
|
*
|
|
* @param string $type Propel type.
|
|
* @param string $sqlType SQL type.
|
|
* @param string $size
|
|
* @param string $scale
|
|
*/
|
|
public function __construct($type = null, $sqlType = null, $size = null, $scale = null)
|
|
{
|
|
$this->propelType = $type;
|
|
$this->sqlType = ($sqlType !== null) ? $sqlType : $type;
|
|
$this->size = $size;
|
|
$this->scale = $scale;
|
|
}
|
|
|
|
/**
|
|
* Copy the values from current object into passed-in Domain.
|
|
* @param Domain $domain Domain to copy values into.
|
|
*/
|
|
public function copy(Domain $domain)
|
|
{
|
|
$this->defaultValue = $domain->getDefaultValue();
|
|
$this->description = $domain->getDescription();
|
|
$this->name = $domain->getName();
|
|
$this->scale = $domain->getScale();
|
|
$this->size = $domain->getSize();
|
|
$this->sqlType = $domain->getSqlType();
|
|
$this->propelType = $domain->getType();
|
|
}
|
|
|
|
/**
|
|
* Sets up the Domain object based on the attributes that were passed to loadFromXML().
|
|
* @see parent::loadFromXML()
|
|
*/
|
|
protected function setupObject()
|
|
{
|
|
$schemaType = strtoupper($this->getAttribute("type"));
|
|
$this->copy($this->getDatabase()->getPlatform()->getDomainForType($schemaType));
|
|
|
|
//Name
|
|
$this->name = $this->getAttribute("name");
|
|
|
|
// Default value
|
|
$defval = $this->getAttribute("defaultValue", $this->getAttribute("default"));
|
|
if ($defval !== null) {
|
|
$this->setDefaultValue(new ColumnDefaultValue($defval, ColumnDefaultValue::TYPE_VALUE));
|
|
} elseif ($this->getAttribute("defaultExpr") !== null) {
|
|
$this->setDefaultValue(new ColumnDefaultValue($this->getAttribute("defaultExpr"), ColumnDefaultValue::TYPE_EXPR));
|
|
}
|
|
|
|
$this->size = $this->getAttribute("size");
|
|
$this->scale = $this->getAttribute("scale");
|
|
$this->description = $this->getAttribute("description");
|
|
}
|
|
|
|
/**
|
|
* Sets the owning database object (if this domain is being setup via XML).
|
|
* @param Database $database
|
|
*/
|
|
public function setDatabase(Database $database)
|
|
{
|
|
$this->database = $database;
|
|
}
|
|
|
|
/**
|
|
* Gets the owning database object (if this domain was setup via XML).
|
|
* @return Database
|
|
*/
|
|
public function getDatabase()
|
|
{
|
|
return $this->database;
|
|
}
|
|
|
|
/**
|
|
* @return string Returns the description.
|
|
*/
|
|
public function getDescription()
|
|
{
|
|
return $this->description;
|
|
}
|
|
|
|
/**
|
|
* @param string $description The description to set.
|
|
*/
|
|
public function setDescription($description)
|
|
{
|
|
$this->description = $description;
|
|
}
|
|
|
|
/**
|
|
* @return string Returns the name.
|
|
*/
|
|
public function getName()
|
|
{
|
|
return $this->name;
|
|
}
|
|
|
|
/**
|
|
* @param string $name The name to set.
|
|
*/
|
|
public function setName($name)
|
|
{
|
|
$this->name = $name;
|
|
}
|
|
|
|
/**
|
|
* @return string Returns the scale.
|
|
*/
|
|
public function getScale()
|
|
{
|
|
return $this->scale;
|
|
}
|
|
|
|
/**
|
|
* @param string $scale The scale to set.
|
|
*/
|
|
public function setScale($scale)
|
|
{
|
|
$this->scale = $scale;
|
|
}
|
|
|
|
/**
|
|
* Replaces the size if the new value is not null.
|
|
*
|
|
* @param string $value The size to set.
|
|
*/
|
|
public function replaceScale($value)
|
|
{
|
|
if ($value !== null) {
|
|
$this->scale = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return int Returns the size.
|
|
*/
|
|
public function getSize()
|
|
{
|
|
return $this->size;
|
|
}
|
|
|
|
/**
|
|
* @param int $size The size to set.
|
|
*/
|
|
public function setSize($size)
|
|
{
|
|
$this->size = $size;
|
|
}
|
|
|
|
/**
|
|
* Replaces the size if the new value is not null.
|
|
*
|
|
* @param int $value The size to set.
|
|
*/
|
|
public function replaceSize($value)
|
|
{
|
|
if ($value !== null) {
|
|
$this->size = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string Returns the propelType.
|
|
*/
|
|
public function getType()
|
|
{
|
|
return $this->propelType;
|
|
}
|
|
|
|
/**
|
|
* @param string $propelType The PropelTypes type to set.
|
|
*/
|
|
public function setType($propelType)
|
|
{
|
|
$this->propelType = $propelType;
|
|
}
|
|
|
|
/**
|
|
* Replaces the type if the new value is not null.
|
|
*
|
|
* @param string $value The tyep to set.
|
|
*/
|
|
public function replaceType($value)
|
|
{
|
|
if ($value !== null) {
|
|
$this->propelType = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the default value object.
|
|
* @return ColumnDefaultValue The default value object for this domain.
|
|
*/
|
|
public function getDefaultValue()
|
|
{
|
|
return $this->defaultValue;
|
|
}
|
|
|
|
/**
|
|
* Gets the default value, type-casted for use in PHP OM.
|
|
* @return mixed
|
|
* @see getDefaultValue()
|
|
*/
|
|
public function getPhpDefaultValue()
|
|
{
|
|
if ($this->defaultValue === null) {
|
|
return null;
|
|
} else {
|
|
if ($this->defaultValue->isExpression()) {
|
|
throw new EngineException("Cannot get PHP version of default value for default value EXPRESSION.");
|
|
}
|
|
if ($this->propelType === PropelTypes::BOOLEAN || $this->propelType === PropelTypes::BOOLEAN_EMU) {
|
|
return $this->booleanValue($this->defaultValue->getValue());
|
|
} else {
|
|
return $this->defaultValue->getValue();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param ColumnDefaultValue $value The column default value to set.
|
|
*/
|
|
public function setDefaultValue(ColumnDefaultValue $value)
|
|
{
|
|
$this->defaultValue = $value;
|
|
}
|
|
|
|
/**
|
|
* Replaces the default value if the new value is not null.
|
|
*
|
|
* @param ColumnDefaultValue $value The defualt value object
|
|
*/
|
|
public function replaceDefaultValue(ColumnDefaultValue $value = null)
|
|
{
|
|
if ($value !== null) {
|
|
$this->defaultValue = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return string Returns the sqlType.
|
|
*/
|
|
public function getSqlType()
|
|
{
|
|
return $this->sqlType;
|
|
}
|
|
|
|
/**
|
|
* @param string $sqlType The sqlType to set.
|
|
*/
|
|
public function setSqlType($sqlType)
|
|
{
|
|
$this->sqlType = $sqlType;
|
|
}
|
|
|
|
/**
|
|
* Replaces the SQL type if the new value is not null.
|
|
* @param string $sqlType The native SQL type to use for this domain.
|
|
*/
|
|
public function replaceSqlType($sqlType)
|
|
{
|
|
if ($sqlType !== null) {
|
|
$this->sqlType = $sqlType;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return the size and scale in brackets for use in an sql schema.
|
|
*
|
|
* @return string Size and scale or an empty String if there are no values
|
|
* available.
|
|
*/
|
|
public function printSize()
|
|
{
|
|
if ($this->size !== null && $this->scale !== null) {
|
|
return '(' . $this->size . ',' . $this->scale . ')';
|
|
} elseif ($this->size !== null) {
|
|
return '(' . $this->size . ')';
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @see XMLElement::appendXml(DOMNode)
|
|
*/
|
|
public function appendXml(DOMNode $node)
|
|
{
|
|
$doc = ($node instanceof DOMDocument) ? $node : $node->ownerDocument;
|
|
|
|
$domainNode = $node->appendChild($doc->createElement('domain'));
|
|
$domainNode->setAttribute('type', $this->getType());
|
|
$domainNode->setAttribute('name', $this->getName());
|
|
|
|
if ($this->sqlType !== $this->getType()) {
|
|
$domainNode->setAttribute('sqlType', $this->sqlType);
|
|
}
|
|
|
|
$def = $this->getDefaultValue();
|
|
if ($def) {
|
|
if ($def->isExpression()) {
|
|
$domainNode->setAttribute('defaultExpr', $def->getValue());
|
|
} else {
|
|
$domainNode->setAttribute('defaultValue', $def->getValue());
|
|
}
|
|
}
|
|
|
|
if ($this->size) {
|
|
$domainNode->setAttribute('size', $this->size);
|
|
}
|
|
|
|
if ($this->scale) {
|
|
$domainNode->setAttribute('scale', $this->scale);
|
|
}
|
|
|
|
if ($this->description) {
|
|
$domainNode->setAttribute('description', $this->description);
|
|
}
|
|
}
|
|
|
|
}
|