D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
local
/
psa
/
admin
/
plib
/
modules
/
wp-toolkit
/
vendor
/
robmorgan
/
phinx
/
src
/
Phinx
/
Db
/
Table
/
Filename :
Column.php
back
Copy
<?php /** * MIT License * For full license information, please view the LICENSE file that was distributed with this source code. */ namespace WPToolkitDependenciesIsolationPrefix\Phinx\Db\Table; use WPToolkitDependenciesIsolationPrefix\Phinx\Config\FeatureFlags; use WPToolkitDependenciesIsolationPrefix\Phinx\Db\Adapter\AdapterInterface; use WPToolkitDependenciesIsolationPrefix\Phinx\Db\Adapter\PostgresAdapter; use RuntimeException; /** * This object is based loosely on: https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Table.html. */ class Column { public const BIGINTEGER = AdapterInterface::PHINX_TYPE_BIG_INTEGER; public const SMALLINTEGER = AdapterInterface::PHINX_TYPE_SMALL_INTEGER; public const TINYINTEGER = AdapterInterface::PHINX_TYPE_TINY_INTEGER; public const BINARY = AdapterInterface::PHINX_TYPE_BINARY; public const BOOLEAN = AdapterInterface::PHINX_TYPE_BOOLEAN; public const CHAR = AdapterInterface::PHINX_TYPE_CHAR; public const DATE = AdapterInterface::PHINX_TYPE_DATE; public const DATETIME = AdapterInterface::PHINX_TYPE_DATETIME; public const DECIMAL = AdapterInterface::PHINX_TYPE_DECIMAL; public const FLOAT = AdapterInterface::PHINX_TYPE_FLOAT; public const INTEGER = AdapterInterface::PHINX_TYPE_INTEGER; public const STRING = AdapterInterface::PHINX_TYPE_STRING; public const TEXT = AdapterInterface::PHINX_TYPE_TEXT; public const TIME = AdapterInterface::PHINX_TYPE_TIME; public const TIMESTAMP = AdapterInterface::PHINX_TYPE_TIMESTAMP; public const UUID = AdapterInterface::PHINX_TYPE_UUID; public const BINARYUUID = AdapterInterface::PHINX_TYPE_BINARYUUID; /** MySQL-only column type */ public const MEDIUMINTEGER = AdapterInterface::PHINX_TYPE_MEDIUM_INTEGER; /** MySQL-only column type */ public const ENUM = AdapterInterface::PHINX_TYPE_ENUM; /** MySQL-only column type */ public const SET = AdapterInterface::PHINX_TYPE_STRING; /** MySQL-only column type */ public const BLOB = AdapterInterface::PHINX_TYPE_BLOB; /** MySQL-only column type */ public const YEAR = AdapterInterface::PHINX_TYPE_YEAR; /** MySQL/Postgres-only column type */ public const JSON = AdapterInterface::PHINX_TYPE_JSON; /** Postgres-only column type */ public const JSONB = AdapterInterface::PHINX_TYPE_JSONB; /** Postgres-only column type */ public const CIDR = AdapterInterface::PHINX_TYPE_CIDR; /** Postgres-only column type */ public const INET = AdapterInterface::PHINX_TYPE_INET; /** Postgres-only column type */ public const MACADDR = AdapterInterface::PHINX_TYPE_MACADDR; /** Postgres-only column type */ public const INTERVAL = AdapterInterface::PHINX_TYPE_INTERVAL; /** * @var string */ protected $name; /** * @var string|\Phinx\Util\Literal */ protected $type; /** * @var int|null */ protected $limit; /** * @var bool */ protected $null = \true; /** * @var mixed */ protected $default; /** * @var bool */ protected $identity = \false; /** * Postgres-only column option for identity (always|default) * * @var ?string */ protected $generated = PostgresAdapter::GENERATED_ALWAYS; /** * @var int|null */ protected $seed; /** * @var int|null */ protected $increment; /** * @var int|null */ protected $scale; /** * @var string|null */ protected $after; /** * @var string|null */ protected $update; /** * @var string|null */ protected $comment; /** * @var bool */ protected $signed = \true; /** * @var bool */ protected $timezone = \false; /** * @var array */ protected $properties = []; /** * @var string|null */ protected $collation; /** * @var string|null */ protected $encoding; /** * @var int|null */ protected $srid; /** * @var array|null */ protected $values; /** * Column constructor */ public function __construct() { $this->null = FeatureFlags::$columnNullDefault; } /** * Sets the column name. * * @param string $name Name * @return $this */ public function setName(string $name) { $this->name = $name; return $this; } /** * Gets the column name. * * @return string|null */ public function getName() : ?string { return $this->name; } /** * Sets the column type. * * @param string|\Phinx\Util\Literal $type Column type * @return $this */ public function setType($type) { $this->type = $type; return $this; } /** * Gets the column type. * * @return string|\Phinx\Util\Literal */ public function getType() { return $this->type; } /** * Sets the column limit. * * @param int|null $limit Limit * @return $this */ public function setLimit(?int $limit) { $this->limit = $limit; return $this; } /** * Gets the column limit. * * @return int|null */ public function getLimit() : ?int { return $this->limit; } /** * Sets whether the column allows nulls. * * @param bool $null Null * @return $this */ public function setNull(bool $null) { $this->null = (bool) $null; return $this; } /** * Gets whether the column allows nulls. * * @return bool */ public function getNull() : bool { return $this->null; } /** * Does the column allow nulls? * * @return bool */ public function isNull() : bool { return $this->getNull(); } /** * Sets the default column value. * * @param mixed $default Default * @return $this */ public function setDefault($default) { $this->default = $default; return $this; } /** * Gets the default column value. * * @return mixed */ public function getDefault() { return $this->default; } /** * Sets generated option for identity columns. Ignored otherwise. * * @param string|null $generated Generated option * @return $this */ public function setGenerated(?string $generated) { $this->generated = $generated; return $this; } /** * Gets generated option for identity columns. Null otherwise * * @return string|null */ public function getGenerated() : ?string { return $this->generated; } /** * Sets whether or not the column is an identity column. * * @param bool $identity Identity * @return $this */ public function setIdentity(bool $identity) { $this->identity = $identity; return $this; } /** * Gets whether or not the column is an identity column. * * @return bool */ public function getIdentity() : bool { return $this->identity; } /** * Is the column an identity column? * * @return bool */ public function isIdentity() : bool { return $this->getIdentity(); } /** * Sets the name of the column to add this column after. * * @param string $after After * @return $this */ public function setAfter(string $after) { $this->after = $after; return $this; } /** * Returns the name of the column to add this column after. * * @return string|null */ public function getAfter() : ?string { return $this->after; } /** * Sets the 'ON UPDATE' mysql column function. * * @param string $update On Update function * @return $this */ public function setUpdate(string $update) { $this->update = $update; return $this; } /** * Returns the value of the ON UPDATE column function. * * @return string|null */ public function getUpdate() : ?string { return $this->update; } /** * Sets the number precision for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int|null $precision Number precision * @return $this */ public function setPrecision(?int $precision) { $this->setLimit($precision); return $this; } /** * Gets the number precision for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @return int|null */ public function getPrecision() : ?int { return $this->limit; } /** * Sets the column identity increment. * * @param int $increment Number increment * @return $this */ public function setIncrement(int $increment) { $this->increment = $increment; return $this; } /** * Gets the column identity increment. * * @return int|null */ public function getIncrement() : ?int { return $this->increment; } /** * Sets the column identity seed. * * @param int $seed Number seed * @return $this */ public function setSeed(int $seed) { $this->seed = $seed; return $this; } /** * Gets the column identity seed. * * @return int */ public function getSeed() : ?int { return $this->seed; } /** * Sets the number scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int|null $scale Number scale * @return $this */ public function setScale(?int $scale) { $this->scale = $scale; return $this; } /** * Gets the number scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @return int */ public function getScale() : ?int { return $this->scale; } /** * Sets the number precision and scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int $precision Number precision * @param int $scale Number scale * @return $this */ public function setPrecisionAndScale(int $precision, int $scale) { $this->setLimit($precision); $this->scale = $scale; return $this; } /** * Sets the column comment. * * @param string|null $comment Comment * @return $this */ public function setComment(?string $comment) { $this->comment = $comment; return $this; } /** * Gets the column comment. * * @return string */ public function getComment() : ?string { return $this->comment; } /** * Sets whether field should be signed. * * @param bool $signed Signed * @return $this */ public function setSigned(bool $signed) { $this->signed = (bool) $signed; return $this; } /** * Gets whether field should be signed. * * @return bool */ public function getSigned() : bool { return $this->signed; } /** * Should the column be signed? * * @return bool */ public function isSigned() : bool { return $this->getSigned(); } /** * Sets whether the field should have a timezone identifier. * Used for date/time columns only! * * @param bool $timezone Timezone * @return $this */ public function setTimezone(bool $timezone) { $this->timezone = (bool) $timezone; return $this; } /** * Gets whether field has a timezone identifier. * * @return bool */ public function getTimezone() : bool { return $this->timezone; } /** * Should the column have a timezone? * * @return bool */ public function isTimezone() : bool { return $this->getTimezone(); } /** * Sets field properties. * * @param array $properties Properties * @return $this */ public function setProperties(array $properties) { $this->properties = $properties; return $this; } /** * Gets field properties * * @return array */ public function getProperties() : array { return $this->properties; } /** * Sets field values. * * @param string[]|string $values Value(s) * @return $this */ public function setValues($values) { if (!\is_array($values)) { $values = \preg_split('/,\\s*/', $values) ?: []; } $this->values = $values; return $this; } /** * Gets field values * * @return array|null */ public function getValues() : ?array { return $this->values; } /** * Sets the column collation. * * @param string $collation Collation * @return $this */ public function setCollation(string $collation) { $this->collation = $collation; return $this; } /** * Gets the column collation. * * @return string|null */ public function getCollation() : ?string { return $this->collation; } /** * Sets the column character set. * * @param string $encoding Encoding * @return $this */ public function setEncoding(string $encoding) { $this->encoding = $encoding; return $this; } /** * Gets the column character set. * * @return string|null */ public function getEncoding() : ?string { return $this->encoding; } /** * Sets the column SRID. * * @param int $srid SRID * @return $this */ public function setSrid(int $srid) { $this->srid = $srid; return $this; } /** * Gets the column SRID. * * @return int|null */ public function getSrid() : ?int { return $this->srid; } /** * Gets all allowed options. Each option must have a corresponding `setFoo` method. * * @return array */ protected function getValidOptions() : array { return ['limit', 'default', 'null', 'identity', 'scale', 'after', 'update', 'comment', 'signed', 'timezone', 'properties', 'values', 'collation', 'encoding', 'srid', 'seed', 'increment', 'generated']; } /** * Gets all aliased options. Each alias must reference a valid option. * * @return array */ protected function getAliasedOptions() : array { return ['length' => 'limit', 'precision' => 'limit']; } /** * Utility method that maps an array of column options to this objects methods. * * @param array<string, mixed> $options Options * @throws \RuntimeException * @return $this */ public function setOptions(array $options) { $validOptions = $this->getValidOptions(); $aliasOptions = $this->getAliasedOptions(); if (isset($options['identity']) && $options['identity'] && !isset($options['null'])) { $options['null'] = \false; } foreach ($options as $option => $value) { if (isset($aliasOptions[$option])) { // proxy alias -> option $option = $aliasOptions[$option]; } if (!\in_array($option, $validOptions, \true)) { throw new RuntimeException(\sprintf('"%s" is not a valid column option.', $option)); } $method = 'set' . \ucfirst($option); $this->{$method}($value); } return $this; } }