0

Class yii\db\mssql\ColumnSchema

Inheritanceyii\db\mssql\ColumnSchema » yii\db\ColumnSchema » yii\base\BaseObject
Implementsyii\base\Configurable
Available since version2.0.23
Source Code https://github.com/yiisoft/yii2/blob/master/framework/db/mssql/ColumnSchema.php

Represents the metadata of a column in a Microsoft SQL Server database table.

Public Properties

Hide inherited properties

Property Type Description Defined By
$allowNull boolean Whether this column can be null. yii\db\ColumnSchema
$autoIncrement boolean Whether this column is auto-incremental yii\db\ColumnSchema
$comment string|null Comment of this column. yii\db\ColumnSchema
$dbType string The DB type of this column. yii\db\ColumnSchema
$defaultValue mixed Default value of this column yii\db\ColumnSchema
$enumValues array|null Enumerable values. yii\db\ColumnSchema
$isComputed boolean Whether this column is a computed column yii\db\mssql\ColumnSchema
$isPrimaryKey boolean|null Whether this column is a primary key yii\db\ColumnSchema
$name string Name of this column (without quotes). yii\db\ColumnSchema
$outputColumnDeclaration string SQL type declaration. yii\db\mssql\ColumnSchema
$phpType string The PHP type of this column. yii\db\ColumnSchema
$precision integer|null Precision of the column data, if it is numeric. yii\db\ColumnSchema
$scale integer|null Scale of the column data, if it is numeric. yii\db\ColumnSchema
$size integer|null Display size of the column. yii\db\ColumnSchema
$type string Abstract type of this column. yii\db\ColumnSchema
$unsigned boolean Whether this column is unsigned. yii\db\ColumnSchema

Public Methods

Hide inherited methods

Method Description Defined By
__call() Calls the named method which is not a class method. yii\base\BaseObject
__construct() Constructor. yii\base\BaseObject
__get() Returns the value of an object property. yii\base\BaseObject
__isset() Checks if a property is set, i.e. defined and not null. yii\base\BaseObject
__set() Sets value of an object property. yii\base\BaseObject
__unset() Sets an object property to null. yii\base\BaseObject
canGetProperty() Returns a value indicating whether a property can be read. yii\base\BaseObject
canSetProperty() Returns a value indicating whether a property can be set. yii\base\BaseObject
className() Returns the fully qualified name of this class. yii\base\BaseObject
dbTypecast() Renders a rowversion/timestamp value as an 8-byte binary literal (0x...) for WHERE comparisons, and converts varbinary strings to CONVERT(VARBINARY(MAX), 0x...) expressions to avoid conversion errors. yii\db\mssql\ColumnSchema
defaultPhpTypecast() Converts a MSSQL column default value to its PHP representation. yii\db\mssql\ColumnSchema
getOutputColumnDeclaration() Returns the SQL type declaration for this column inside an OUTPUT clause temp table. yii\db\mssql\ColumnSchema
hasMethod() Returns a value indicating whether a method is defined. yii\base\BaseObject
hasProperty() Returns a value indicating whether a property is defined. yii\base\BaseObject
init() Initializes the object. yii\base\BaseObject
isRowVersion() Returns whether this column is a SQL Server rowversion (legacy synonym timestamp) auto-versioning column. yii\db\mssql\ColumnSchema
isType() Returns whether this column uses the given abstract type. yii\db\ColumnSchema
phpTypecast() Converts the input value according to $phpType after retrieval from the database. yii\db\mssql\ColumnSchema

Protected Methods

Hide inherited methods

Method Description Defined By
typecast() Converts the input value according to $phpType after retrieval from the database. yii\db\ColumnSchema

Property Details

Hide inherited properties

$isComputed public property (available since version 2.0.39)

Whether this column is a computed column

public boolean $isComputed false
$outputColumnDeclaration public read-only property

SQL type declaration.

Method Details

Hide inherited methods

__call() public method

Defined in: yii\base\BaseObject::__call()

Calls the named method which is not a class method.

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

public mixed __call ( string $name, array $params )
$name string

The method name

$params array

Method parameters

return mixed

The method return value

throws yii\base\UnknownMethodException

when calling unknown method

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

Defined in: yii\base\BaseObject::__construct()

Constructor.

The default implementation does two things:

  • Initializes the object with the given configuration $config.
  • Call init().

If this method is overridden in a child class, it is recommended that

  • the last parameter of the constructor is a configuration array, like $config here.
  • call the parent implementation at the end of the constructor.
public mixed __construct ( array $config = [] )
$config array

Name-value pairs that will be used to initialize the object properties

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public method

Defined in: yii\base\BaseObject::__get()

Returns the value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $object->property;.

See also __set().

public mixed __get ( string $name )
$name string

The property name

return mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is write-only

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public method

Defined in: yii\base\BaseObject::__isset()

Checks if a property is set, i.e. defined and not null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

Note that if the property is not defined, false will be returned.

See also https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( string $name )
$name string

The property name or the event name

return boolean

Whether the named property is set (not null).

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public method

Defined in: yii\base\BaseObject::__set()

Sets value of an object property.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $object->property = $value;.

See also __get().

public mixed __set ( string $name, mixed $value )
$name string

The property name or the event name

$value mixed

The property value

throws yii\base\UnknownPropertyException

if the property is not defined

throws yii\base\InvalidCallException

if the property is read-only

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public method

Defined in: yii\base\BaseObject::__unset()

Sets an object property to null.

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($object->property).

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

See also https://www.php.net/manual/en/function.unset.php.

public mixed __unset ( string $name )
$name string

The property name

throws yii\base\InvalidCallException

if the property is read only.

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
canGetProperty() public method

Defined in: yii\base\BaseObject::canGetProperty()

Returns a value indicating whether a property can be read.

A property is readable if:

  • the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also canSetProperty().

public boolean canGetProperty ( string $name, boolean $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property can be read

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public method

Defined in: yii\base\BaseObject::canSetProperty()

Returns a value indicating whether a property can be set.

A property is writable if:

  • the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also canGetProperty().

public boolean canSetProperty ( string $name, boolean $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property can be written

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static method

Defined in: yii\base\BaseObject::className()

Returns the fully qualified name of this class.

public static string className ( )
return string

The fully qualified name of this class.

                public static function className(): string
{
    return static::class;
}

            
dbTypecast() public method

Renders a rowversion/timestamp value as an 8-byte binary literal (0x...) for WHERE comparisons, and converts varbinary strings to CONVERT(VARBINARY(MAX), 0x...) expressions to avoid conversion errors.

See also:

public mixed dbTypecast ( mixed $value )
$value mixed

                public function dbTypecast($value)
{
    if ($this->isRowVersion() && $value !== null && !$value instanceof ExpressionInterface) {
        $hex = is_string($value) && strlen($value) === 8
            ? bin2hex($value) // raw 8-byte binary value.
            : sprintf('%016x', (int) $value); // integer representation from `phpTypecast()`.
        return new Expression("0x{$hex}");
    }
    if ($this->isVarbinary()) {
        if ($value instanceof PdoValue && $value->getType() === \PDO::PARAM_LOB) {
            $pdoValue = $value->getValue();
            if (is_string($pdoValue) || $pdoValue === null) {
                $value = $pdoValue;
            }
        }
        if (is_string($value)) {
            return new Expression('CONVERT(VARBINARY(MAX), 0x' . bin2hex($value) . ')');
        }
        if ($value === null && $this->allowNull) {
            return new Expression('CAST(NULL AS VARBINARY(MAX))');
        }
    }
    return parent::dbTypecast($value);
}

            
defaultPhpTypecast() public method (available since version 2.0.24)

Converts a MSSQL column default value to its PHP representation.

Recognizes the literal formats stored in sys.default_constraints.definition and typecasts only those:

  • NULL or any parenthesized form such as (NULL) to null.
  • Quoted strings (('value') / (N'value'), any parenthesis depth) to the unquoted value with doubled quotes unescaped, delegated to {@see \yii\db\mssql\phpTypecast()}.
  • Parenthesized signed, decimal, or scientific numerics (((0)), ((-5)), ((1.0e+005))) delegated to {@see \yii\db\mssql\phpTypecast()}.
  • Binary literals ((0x...)) to their byte string via hex2bin().

Everything else; function calls such as (getdate()), operator expressions such as ((1)+(2)), or (NEXT VALUE FOR ...) sequences; becomes an executable {@see \yii\db\Expression}: the definition is SQL expression text and MSSQL exposes no literal-versus-expression metadata.

public mixed defaultPhpTypecast ( mixed $value )
$value mixed

Default value in MSSQL column_default format.

return mixed

Converted value.

                public function defaultPhpTypecast($value)
{
    if ($value === null) {
        return null;
    }
    if (is_string($value)) {
        if (preg_match('/^(?:NULL|\(+NULL\)+)$/i', $value) === 1) {
            return null;
        }
        if (preg_match("/^\(+N?'((?:''|[^'])*)'\)+$/is", $value, $matches) === 1) {
            $value = str_replace("''", "'", $matches[1]);
        } elseif (preg_match('/^\(+([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)\)+$/i', $value, $matches) === 1) {
            $value = $matches[1];
        } elseif (preg_match('/^\(+0x((?:[0-9a-f]{2})*)\)+$/i', $value, $matches) === 1) {
            $value = hex2bin($matches[1]);
        } else {
            return new Expression($value);
        }
    }
    return parent::defaultPhpTypecast($value);
}

            
getOutputColumnDeclaration() public method

Returns the SQL type declaration for this column inside an OUTPUT clause temp table.

Preserves the reflected declaration for variable-length types (varchar, nvarchar, varbinary), keeps the legacy (MAX) fallback for bare variable-length declarations, appends the declared size for fixed-length types (char, nchar, binary), and maps timestamp to varbinary(8) or binary(8).

public string getOutputColumnDeclaration ( )
return string

SQL type declaration.

                public function getOutputColumnDeclaration(): string
{
    if ($this->dbType === Schema::TYPE_TIMESTAMP) {
        return $this->allowNull ? 'varbinary(8)' : 'binary(8)';
    }
    $dbType = $this->dbType;
    if (in_array($dbType, ['varchar', 'nvarchar', 'varbinary'], true)) {
        $dbType .= '(MAX)';
    } elseif (in_array($dbType, ['char', 'nchar', 'binary'], true)) {
        $dbType .= "($this->size)";
    }
    return $dbType;
}

            
hasMethod() public method

Defined in: yii\base\BaseObject::hasMethod()

Returns a value indicating whether a method is defined.

The default implementation is a call to php function method_exists(). You may override this method when you implemented the php magic method __call().

public boolean hasMethod ( string $name )
$name string

The method name

return boolean

Whether the method is defined

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public method

Defined in: yii\base\BaseObject::hasProperty()

Returns a value indicating whether a property is defined.

A property is defined if:

  • the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);

See also:

public boolean hasProperty ( string $name, boolean $checkVars true )
$name string

The property name

$checkVars boolean

Whether to treat member variables as properties

return boolean

Whether the property is defined

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public method

Defined in: yii\base\BaseObject::init()

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public mixed init ( )

                public function init()
{
}

            
isRowVersion() public method

Returns whether this column is a SQL Server rowversion (legacy synonym timestamp) auto-versioning column.

See also https://learn.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql.

public boolean isRowVersion ( )

                public function isRowVersion(): bool
{
    return $this->isType(Schema::TYPE_TIMESTAMP);
}

            
isType() public method (available since version 22.0)

Defined in: yii\db\ColumnSchema::isType()

Returns whether this column uses the given abstract type.

public boolean isType ( string $type )
$type string

Abstract column type.

return boolean

Whether this column uses the given abstract type.

                public function isType(string $type): bool
{
    return $this->type === $type;
}

            
phpTypecast() public method

Converts the input value according to $phpType after retrieval from the database.

Decodes a rowversion/timestamp token to its integer value, and reads varbinary streams into strings.

If the value is null or an yii\db\Expression, it will not be converted.

public mixed phpTypecast ( mixed $value )
$value mixed

Input value

return mixed

Converted value

                public function phpTypecast($value)
{
    if ($value === null) {
        return null;
    }
    if ($this->isRowVersion()) {
        if (is_resource($value) && get_resource_type($value) === 'stream') {
            $value = stream_get_contents($value);
        }
        return is_string($value) && strlen($value) === 8
            ? unpack('J', $value)[1]
            : $value;
    }
    if ($this->isVarbinary() && is_resource($value) && get_resource_type($value) === 'stream') {
        return stream_get_contents($value);
    }
    return parent::phpTypecast($value);
}

            
typecast() protected method (available since version 2.0.3)

Defined in: yii\db\ColumnSchema::typecast()

Converts the input value according to $phpType after retrieval from the database.

If the value is null or an yii\db\Expression, it will not be converted.

protected mixed typecast ( mixed $value )
$value mixed

Input value

return mixed

Converted value

                protected function typecast($value)
{
    if (
        $value === ''
        && !in_array(
            $this->type,
            [
                Schema::TYPE_TEXT,
                Schema::TYPE_STRING,
                Schema::TYPE_BINARY,
                Schema::TYPE_CHAR
            ],
            true
        )
    ) {
        return null;
    }
    if (
        $value === null
        || gettype($value) === $this->phpType
        || $value instanceof ExpressionInterface
        || $value instanceof Query
    ) {
        return $value;
    }
    if (
        is_array($value)
        && count($value) === 2
        && isset($value[1])
        && in_array($value[1], $this->getPdoParamTypes(), true)
    ) {
        return new PdoValue($value[0], $value[1]);
    }
    switch ($this->phpType) {
        case 'resource':
        case 'string':
            if (is_resource($value)) {
                return $value;
            }
            if (is_float($value)) {
                // ensure type cast always has . as decimal separator in all locales
                return StringHelper::floatToString($value);
            }
            if (
                is_numeric($value)
                && ColumnSchemaBuilder::CATEGORY_NUMERIC === ColumnSchemaBuilder::$typeCategoryMap[$this->type]
            ) {
                // https://github.com/yiisoft/yii2/issues/14663
                return $value;
            }
            if (is_object($value) && $value instanceof \BackedEnum) {
                return (string) $value->value;
            }
            return (string) $value;
        case 'integer':
            if (is_object($value) && $value instanceof \BackedEnum) {
                return (int) $value->value;
            }
            return (int) $value;
        case 'boolean':
            // treating a 0 bit value as false too
            // https://github.com/yiisoft/yii2/issues/9006
            return (bool) $value && $value !== "\0" && strtolower($value) !== 'false';
        case 'double':
            return (float) $value;
    }
    return $value;
}