Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      9 / 9  | 
      CRAP |         | 
      100.00%  | 
      23 / 23  | 
     
| MySQLColumn |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      9 / 9  | 
      13 |         | 
      100.00%  | 
      23 / 23  | 
     
| __construct |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| fromResultSet |         | 
      100.00%  | 
      1 / 1  | 
      3 |         | 
      100.00%  | 
      8 / 8  | 
     |||
| getDBType |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| getDBName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| setDBName |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      2 / 2  | 
     |||
| getPHPType |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      4 / 4  | 
     |||
| getIsRequired |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getIsPrimaryKey |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| getAutoValue |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| <?php | |
| declare(strict_types = 1); | |
| namespace Siesta\Driver\MySQL\MetaData; | |
| use Siesta\Database\MetaData\ColumnMetaData; | |
| use Siesta\Database\ResultSet; | |
| use Siesta\Model\PHPType; | |
| use Siesta\Util\ArrayUtil; | |
| /** | |
| * @author Gregor Müller | |
| */ | |
| class MySQLColumn implements ColumnMetaData | |
| { | |
| const COLUMN_NAME = "COLUMN_NAME"; | |
| const COLUMN_TYPE = "COLUMN_TYPE"; | |
| const COLUMN_KEY = "COLUMN_KEY"; | |
| const COLUMN_KEY_PRIMARY_KEY = "PRI"; | |
| const COLUMN_KEY_FOREIGN_KEY = "MUL"; | |
| const COLUMN_DEFAULT = "COLUMN_DEFAULT"; | |
| const COLUMN_IS_NULLABLE = "IS_NULLABLE"; | |
| const COLUMN_IS_NULLABLE_YES = "YES"; | |
| const DATA_TYPE = "DATA_TYPE"; | |
| const PHP_TYPE_MAPPING = [ | |
| "BIT" => "bool", | |
| "SMALLINT" => "int", | |
| "MEDIUMINT" => "int", | |
| "INT" => "int", | |
| "BIGINT" => "int", | |
| "DOUBLE" => "float", | |
| "FLOAT" => "float", | |
| "DECIMAL" => "float", | |
| "DATETIME" => "SiestaDateTime", | |
| "DATE" => "SiestaDateTime", | |
| "TIME" => "SiestaDateTime", | |
| ]; | |
| const DB_TYPE_MAPPING = [ | |
| "BIT(1)" => "BIT", | |
| "SMALLINT(6)" => "SMALLINT", | |
| "MEDIUMINT(9)" => "MEDIUMINT", | |
| "INT(11)" => "INT", | |
| "BIGINT(20)" => "BIGINT", | |
| "DECIMAL(10,0)" => "DECIMAL", | |
| "YEAR(4)" => "YEAR", | |
| ]; | |
| /** | |
| * @var string | |
| */ | |
| protected $name; | |
| /** | |
| * @var string | |
| */ | |
| protected $autovalue; | |
| /** | |
| * @var string | |
| */ | |
| protected $columnType; | |
| /** | |
| * @var string | |
| */ | |
| protected $dataType; | |
| /** | |
| * @var string | |
| */ | |
| protected $default; | |
| /** | |
| * @var bool | |
| */ | |
| protected $isPrimaryKey; | |
| /** | |
| * @var bool | |
| */ | |
| protected $isNullAble; | |
| /** | |
| * MySQLColumn constructor. | |
| */ | |
| public function __construct() | |
| { | |
| } | |
| /** | |
| * @param ResultSet $resultSet | |
| * @param bool|null $tableHasAutoincrement | |
| */ | |
| public function fromResultSet(ResultSet $resultSet, bool $tableHasAutoincrement = null) | |
| { | |
| $this->name = $resultSet->getStringValue(self::COLUMN_NAME); | |
| $this->columnType = strtoupper($resultSet->getStringValue(self::COLUMN_TYPE)); | |
| $this->dataType = strtoupper($resultSet->getStringValue(self::DATA_TYPE)); | |
| $this->isPrimaryKey = $resultSet->getStringValue(self::COLUMN_KEY) === self::COLUMN_KEY_PRIMARY_KEY; | |
| $this->default = $resultSet->getStringValue(self::COLUMN_DEFAULT); | |
| $this->isNullAble = $resultSet->getStringValue(self::COLUMN_IS_NULLABLE) === self::COLUMN_IS_NULLABLE_YES; | |
| $this->autovalue = ($this->isPrimaryKey && $tableHasAutoincrement) ? 'autoincrement' : null; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getDBType() : string | |
| { | |
| $dbType = ArrayUtil::getFromArray(self::DB_TYPE_MAPPING, $this->columnType); | |
| if ($dbType !== null) { | |
| return $dbType; | |
| } | |
| return $this->columnType; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getDBName() : string | |
| { | |
| return $this->name; | |
| } | |
| /** | |
| * @param string $dbName | |
| */ | |
| public function setDBName(string $dbName) | |
| { | |
| $this->name = $dbName; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getPHPType() : string | |
| { | |
| $phpType = ArrayUtil::getFromArray(self::PHP_TYPE_MAPPING, $this->dataType); | |
| if ($phpType !== null) { | |
| return $phpType; | |
| } | |
| return PHPType::STRING; | |
| } | |
| /** | |
| * @return bool | |
| */ | |
| public function getIsRequired() : bool | |
| { | |
| return !$this->isNullAble; | |
| } | |
| /** | |
| * @return bool | |
| */ | |
| public function getIsPrimaryKey() : bool | |
| { | |
| return $this->isPrimaryKey; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getAutoValue() | |
| { | |
| return $this->autovalue; | |
| } | |
| } |