0 follower

Final Class Yiisoft\Db\Mysql\Column\ColumnFactory

InheritanceYiisoft\Db\Mysql\Column\ColumnFactory » Yiisoft\Db\Schema\Column\AbstractColumnFactory

Constants

Hide inherited constants

Constant Value Description Defined By
TYPE_MAP [ 'bit' => \Yiisoft\Db\Constant\ColumnType::BIT, 'tinyint' => \Yiisoft\Db\Constant\ColumnType::TINYINT, 'smallint' => \Yiisoft\Db\Constant\ColumnType::SMALLINT, 'mediumint' => \Yiisoft\Db\Constant\ColumnType::INTEGER, 'int' => \Yiisoft\Db\Constant\ColumnType::INTEGER, 'integer' => \Yiisoft\Db\Constant\ColumnType::INTEGER, 'bigint' => \Yiisoft\Db\Constant\ColumnType::BIGINT, 'float' => \Yiisoft\Db\Constant\ColumnType::FLOAT, 'real' => \Yiisoft\Db\Constant\ColumnType::FLOAT, 'double' => \Yiisoft\Db\Constant\ColumnType::DOUBLE, 'decimal' => \Yiisoft\Db\Constant\ColumnType::DECIMAL, 'numeric' => \Yiisoft\Db\Constant\ColumnType::DECIMAL, 'char' => \Yiisoft\Db\Constant\ColumnType::CHAR, 'varchar' => \Yiisoft\Db\Constant\ColumnType::STRING, 'enum' => \Yiisoft\Db\Constant\ColumnType::STRING, 'tinytext' => \Yiisoft\Db\Constant\ColumnType::TEXT, 'mediumtext' => \Yiisoft\Db\Constant\ColumnType::TEXT, 'longtext' => \Yiisoft\Db\Constant\ColumnType::TEXT, 'text' => \Yiisoft\Db\Constant\ColumnType::TEXT, 'binary' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'varbinary' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'blob' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'tinyblob' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'mediumblob' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'longblob' => \Yiisoft\Db\Constant\ColumnType::BINARY, 'year' => \Yiisoft\Db\Constant\ColumnType::SMALLINT, 'timestamp' => \Yiisoft\Db\Constant\ColumnType::TIMESTAMP, 'datetime' => \Yiisoft\Db\Constant\ColumnType::DATETIME, 'time' => \Yiisoft\Db\Constant\ColumnType::TIME, 'date' => \Yiisoft\Db\Constant\ColumnType::DATE, 'json' => \Yiisoft\Db\Constant\ColumnType::JSON, ] Mapping from physical column types (keys) to abstract column types (values). Yiisoft\Db\Mysql\Column\ColumnFactory

Method Details

Hide inherited methods

columnDefinitionParser() protected method

protected columnDefinitionParser( ): Yiisoft\Db\Mysql\Column\ColumnDefinitionParser

                protected function columnDefinitionParser(): ColumnDefinitionParser
{
    return new ColumnDefinitionParser();
}

            
getColumnClass() protected method

protected getColumnClass( string $type, array $info = [] ): string
$type string
$info array

                protected function getColumnClass(string $type, array $info = []): string
{
    return match ($type) {
        ColumnType::CHAR => StringColumn::class,
        ColumnType::STRING => StringColumn::class,
        ColumnType::TEXT => StringColumn::class,
        ColumnType::UUID => StringColumn::class,
        ColumnType::TIMESTAMP => DateTimeColumn::class,
        ColumnType::DATETIME => DateTimeColumn::class,
        ColumnType::DATETIMETZ => DateTimeColumn::class,
        ColumnType::TIME => DateTimeColumn::class,
        ColumnType::TIMETZ => DateTimeColumn::class,
        ColumnType::DATE => DateTimeColumn::class,
        ColumnType::DECIMAL => StringColumn::class,
        default => parent::getColumnClass($type, $info),
    };
}

            
getType() protected method

protected getType( string $dbType, array $info = [] ): string
$dbType string
$info array

                protected function getType(string $dbType, array $info = []): string
{
    if ($dbType === 'bit' && isset($info['size']) && $info['size'] === 1) {
        return ColumnType::BOOLEAN;
    }
    return parent::getType($dbType, $info);
}

            
normalizeDefaultValue() protected method

protected normalizeDefaultValue( string|null $defaultValue, \Yiisoft\Db\Schema\Column\ColumnInterface $column ): mixed
$defaultValue string|null
$column \Yiisoft\Db\Schema\Column\ColumnInterface

                protected function normalizeDefaultValue(?string $defaultValue, ColumnInterface $column): mixed
{
    if (
        $defaultValue === null
        || $column->isPrimaryKey()
        || $column->isComputed()
    ) {
        return null;
    }
    return $this->normalizeNotNullDefaultValue($defaultValue, $column);
}

            
normalizeNotNullDefaultValue() protected method

protected normalizeNotNullDefaultValue( string $defaultValue, \Yiisoft\Db\Schema\Column\ColumnInterface $column ): mixed
$defaultValue string
$column \Yiisoft\Db\Schema\Column\ColumnInterface

                protected function normalizeNotNullDefaultValue(string $defaultValue, ColumnInterface $column): mixed
{
    if ($defaultValue === '') {
        return $column->phpTypecast($defaultValue);
    }
    if (
        in_array($column->getType(), [ColumnType::TIMESTAMP, ColumnType::DATETIME, ColumnType::DATE, ColumnType::TIME], true)
        && preg_match('/^current_timestamp(?:\((\d*)\))?$/i', $defaultValue, $matches) === 1
    ) {
        return new Expression('CURRENT_TIMESTAMP' . (!empty($matches[1]) ? '(' . $matches[1] . ')' : ''));
    }
    if (!empty($column->getExtra())
        || $defaultValue[0] === '('
        && !in_array($column->getType(), [ColumnType::CHAR, ColumnType::STRING, ColumnType::TEXT, ColumnType::BINARY], true)
    ) {
        return new Expression($defaultValue);
    }
    if ($defaultValue[0] === "'" && $defaultValue[-1] === "'") {
        $value = substr($defaultValue, 1, -1);
        $value = str_replace("''", "'", $value);
        return $column->phpTypecast($value);
    }
    if (
        str_starts_with($defaultValue, "b'")
        && in_array($column->getType(), [ColumnType::BOOLEAN, ColumnType::BIT], true)
    ) {
        return $column->phpTypecast(bindec(substr($defaultValue, 2, -1)));
    }
    return $column->phpTypecast($defaultValue);
}