123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970 |
- <?php
- /**
- * SQL data types definition
- */
- declare(strict_types=1);
- namespace PhpMyAdmin;
- use PhpMyAdmin\Query\Compatibility;
- use function __;
- use function _pgettext;
- use function array_diff;
- use function array_merge;
- use function array_values;
- use function htmlspecialchars;
- use function in_array;
- use function mb_strtoupper;
- use function sort;
- use function sprintf;
- use function strncasecmp;
- /**
- * Class holding type definitions for MySQL and MariaDB.
- */
- class Types
- {
- /** @var DatabaseInterface Database interface */
- private $dbi;
- /**
- * @param DatabaseInterface $dbi Database interface instance
- */
- public function __construct($dbi)
- {
- $this->dbi = $dbi;
- }
- /**
- * Returns list of unary operators.
- *
- * @return string[]
- */
- public function getUnaryOperators()
- {
- return [
- 'IS NULL',
- 'IS NOT NULL',
- "= ''",
- "!= ''",
- ];
- }
- /**
- * Check whether operator is unary.
- *
- * @param string $op operator name
- */
- public function isUnaryOperator($op): bool
- {
- return in_array($op, $this->getUnaryOperators());
- }
- /**
- * Returns list of operators checking for NULL.
- *
- * @return string[]
- */
- public function getNullOperators()
- {
- return [
- 'IS NULL',
- 'IS NOT NULL',
- ];
- }
- /**
- * ENUM search operators
- *
- * @return string[]
- */
- public function getEnumOperators()
- {
- return [
- '=',
- '!=',
- ];
- }
- /**
- * TEXT search operators
- *
- * @return string[]
- */
- public function getTextOperators()
- {
- return [
- 'LIKE %...%',
- 'LIKE',
- 'NOT LIKE',
- 'NOT LIKE %...%',
- '=',
- '!=',
- 'REGEXP',
- 'REGEXP ^...$',
- 'NOT REGEXP',
- "= ''",
- "!= ''",
- 'IN (...)',
- 'NOT IN (...)',
- 'BETWEEN',
- 'NOT BETWEEN',
- ];
- }
- /**
- * Number search operators
- *
- * @return string[]
- */
- public function getNumberOperators()
- {
- return [
- '=',
- '>',
- '>=',
- '<',
- '<=',
- '!=',
- 'LIKE',
- 'LIKE %...%',
- 'NOT LIKE',
- 'NOT LIKE %...%',
- 'IN (...)',
- 'NOT IN (...)',
- 'BETWEEN',
- 'NOT BETWEEN',
- ];
- }
- /**
- * UUID search operators
- *
- * @return string[]
- */
- public function getUUIDOperators()
- {
- return [
- '=',
- '!=',
- 'LIKE',
- 'LIKE %...%',
- 'NOT LIKE',
- 'NOT LIKE %...%',
- 'IN (...)',
- 'NOT IN (...)',
- ];
- }
- /**
- * Returns operators for given type
- *
- * @param string $type Type of field
- * @param bool $null Whether field can be NULL
- *
- * @return string[]
- */
- public function getTypeOperators($type, $null)
- {
- $ret = [];
- $class = $this->getTypeClass($type);
- if (strncasecmp($type, 'enum', 4) == 0) {
- $ret = array_merge($ret, $this->getEnumOperators());
- } elseif ($class === 'CHAR') {
- $ret = array_merge($ret, $this->getTextOperators());
- } elseif ($class === 'UUID') {
- $ret = array_merge($ret, $this->getUUIDOperators());
- } else {
- $ret = array_merge($ret, $this->getNumberOperators());
- }
- if ($null) {
- $ret = array_merge($ret, $this->getNullOperators());
- }
- return $ret;
- }
- /**
- * Returns operators for given type as html options
- *
- * @param string $type Type of field
- * @param bool $null Whether field can be NULL
- * @param string $selectedOperator Option to be selected
- *
- * @return string Generated Html
- */
- public function getTypeOperatorsHtml($type, $null, $selectedOperator = null)
- {
- $html = '';
- foreach ($this->getTypeOperators($type, $null) as $fc) {
- if (isset($selectedOperator) && $selectedOperator == $fc) {
- $selected = ' selected="selected"';
- } else {
- $selected = '';
- }
- $html .= '<option value="' . htmlspecialchars($fc) . '"'
- . $selected . '>'
- . htmlspecialchars($fc) . '</option>';
- }
- return $html;
- }
- /**
- * Returns the data type description.
- *
- * @param string $type The data type to get a description.
- *
- * @return string
- */
- public function getTypeDescription($type)
- {
- $type = mb_strtoupper($type);
- switch ($type) {
- case 'TINYINT':
- return __('A 1-byte integer, signed range is -128 to 127, unsigned range is 0 to 255');
- case 'SMALLINT':
- return __('A 2-byte integer, signed range is -32,768 to 32,767, unsigned range is 0 to 65,535');
- case 'MEDIUMINT':
- return __(
- 'A 3-byte integer, signed range is -8,388,608 to 8,388,607, unsigned range is 0 to 16,777,215'
- );
- case 'INT':
- return __(
- 'A 4-byte integer, signed range is ' .
- '-2,147,483,648 to 2,147,483,647, unsigned range is 0 to ' .
- '4,294,967,295'
- );
- case 'BIGINT':
- return __(
- 'An 8-byte integer, signed range is -9,223,372,036,854,775,808 ' .
- 'to 9,223,372,036,854,775,807, unsigned range is 0 to ' .
- '18,446,744,073,709,551,615'
- );
- case 'DECIMAL':
- return __(
- 'A fixed-point number (M, D) - the maximum number of digits (M) ' .
- 'is 65 (default 10), the maximum number of decimals (D) is 30 ' .
- '(default 0)'
- );
- case 'FLOAT':
- return __(
- 'A small floating-point number, allowable values are ' .
- '-3.402823466E+38 to -1.175494351E-38, 0, and 1.175494351E-38 to ' .
- '3.402823466E+38'
- );
- case 'DOUBLE':
- return __(
- 'A double-precision floating-point number, allowable values are ' .
- '-1.7976931348623157E+308 to -2.2250738585072014E-308, 0, and ' .
- '2.2250738585072014E-308 to 1.7976931348623157E+308'
- );
- case 'REAL':
- return __('Synonym for DOUBLE (exception: in REAL_AS_FLOAT SQL mode it is a synonym for FLOAT)');
- case 'BIT':
- return __('A bit-field type (M), storing M of bits per value (default is 1, maximum is 64)');
- case 'BOOLEAN':
- return __(
- 'A synonym for TINYINT(1), a value of zero is considered false, nonzero values are considered true'
- );
- case 'SERIAL':
- return __('An alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE');
- case 'DATE':
- return sprintf(
- __('A date, supported range is %1$s to %2$s'),
- '1000-01-01',
- '9999-12-31'
- );
- case 'DATETIME':
- return sprintf(
- __('A date and time combination, supported range is %1$s to %2$s'),
- '1000-01-01 00:00:00',
- '9999-12-31 23:59:59'
- );
- case 'TIMESTAMP':
- return __(
- 'A timestamp, range is 1970-01-01 00:00:01 UTC to 2038-01-09 ' .
- '03:14:07 UTC, stored as the number of seconds since the epoch ' .
- '(1970-01-01 00:00:00 UTC)'
- );
- case 'TIME':
- return sprintf(
- __('A time, range is %1$s to %2$s'),
- '-838:59:59',
- '838:59:59'
- );
- case 'YEAR':
- return __(
- 'A year in four-digit (4, default) or two-digit (2) format, the ' .
- 'allowable values are 70 (1970) to 69 (2069) or 1901 to 2155 and ' .
- '0000'
- );
- case 'CHAR':
- return __(
- 'A fixed-length (0-255, default 1) string that is always ' .
- 'right-padded with spaces to the specified length when stored'
- );
- case 'VARCHAR':
- return sprintf(
- __(
- 'A variable-length (%s) string, the effective maximum length is subject to the maximum row size'
- ),
- '0-65,535'
- );
- case 'TINYTEXT':
- return __(
- 'A TEXT column with a maximum length of 255 (2^8 - 1) characters, ' .
- 'stored with a one-byte prefix indicating the length of the value ' .
- 'in bytes'
- );
- case 'TEXT':
- return __(
- 'A TEXT column with a maximum length of 65,535 (2^16 - 1) ' .
- 'characters, stored with a two-byte prefix indicating the length ' .
- 'of the value in bytes'
- );
- case 'MEDIUMTEXT':
- return __(
- 'A TEXT column with a maximum length of 16,777,215 (2^24 - 1) ' .
- 'characters, stored with a three-byte prefix indicating the ' .
- 'length of the value in bytes'
- );
- case 'LONGTEXT':
- return __(
- 'A TEXT column with a maximum length of 4,294,967,295 or 4GiB ' .
- '(2^32 - 1) characters, stored with a four-byte prefix indicating ' .
- 'the length of the value in bytes'
- );
- case 'BINARY':
- return __(
- 'Similar to the CHAR type, but stores binary byte strings rather than non-binary character strings'
- );
- case 'VARBINARY':
- return __(
- 'Similar to the VARCHAR type, but stores binary byte strings ' .
- 'rather than non-binary character strings'
- );
- case 'TINYBLOB':
- return __(
- 'A BLOB column with a maximum length of 255 (2^8 - 1) bytes, ' .
- 'stored with a one-byte prefix indicating the length of the value'
- );
- case 'MEDIUMBLOB':
- return __(
- 'A BLOB column with a maximum length of 16,777,215 (2^24 - 1) ' .
- 'bytes, stored with a three-byte prefix indicating the length of ' .
- 'the value'
- );
- case 'BLOB':
- return __(
- 'A BLOB column with a maximum length of 65,535 (2^16 - 1) bytes, ' .
- 'stored with a two-byte prefix indicating the length of the value'
- );
- case 'LONGBLOB':
- return __(
- 'A BLOB column with a maximum length of 4,294,967,295 or 4GiB ' .
- '(2^32 - 1) bytes, stored with a four-byte prefix indicating the ' .
- 'length of the value'
- );
- case 'ENUM':
- return __(
- 'An enumeration, chosen from the list of up to 65,535 values or the special \'\' error value'
- );
- case 'SET':
- return __('A single value chosen from a set of up to 64 members');
- case 'GEOMETRY':
- return __('A type that can store a geometry of any type');
- case 'POINT':
- return __('A point in 2-dimensional space');
- case 'LINESTRING':
- return __('A curve with linear interpolation between points');
- case 'POLYGON':
- return __('A polygon');
- case 'MULTIPOINT':
- return __('A collection of points');
- case 'MULTILINESTRING':
- return __('A collection of curves with linear interpolation between points');
- case 'MULTIPOLYGON':
- return __('A collection of polygons');
- case 'GEOMETRYCOLLECTION':
- return __('A collection of geometry objects of any type');
- case 'JSON':
- return __('Stores and enables efficient access to data in JSON (JavaScript Object Notation) documents');
- case 'INET6':
- return __('Intended for storage of IPv6 addresses, as well as IPv4 '
- . 'addresses assuming conventional mapping of IPv4 addresses '
- . 'into IPv6 addresses');
- case 'UUID':
- return __('128-bit UUID (Universally Unique Identifier)');
- }
- return '';
- }
- /**
- * Returns class of a type, used for functions available for type
- * or default values.
- *
- * @param string $type The data type to get a class.
- *
- * @return string
- */
- public function getTypeClass($type)
- {
- $type = mb_strtoupper((string) $type);
- switch ($type) {
- case 'TINYINT':
- case 'SMALLINT':
- case 'MEDIUMINT':
- case 'INT':
- case 'BIGINT':
- case 'DECIMAL':
- case 'FLOAT':
- case 'DOUBLE':
- case 'REAL':
- case 'BIT':
- case 'BOOLEAN':
- case 'SERIAL':
- return 'NUMBER';
- case 'DATE':
- case 'DATETIME':
- case 'TIMESTAMP':
- case 'TIME':
- case 'YEAR':
- return 'DATE';
- case 'CHAR':
- case 'VARCHAR':
- case 'TINYTEXT':
- case 'TEXT':
- case 'MEDIUMTEXT':
- case 'LONGTEXT':
- case 'BINARY':
- case 'VARBINARY':
- case 'TINYBLOB':
- case 'MEDIUMBLOB':
- case 'BLOB':
- case 'LONGBLOB':
- case 'ENUM':
- case 'SET':
- case 'INET6':
- return 'CHAR';
- case 'GEOMETRY':
- case 'POINT':
- case 'LINESTRING':
- case 'POLYGON':
- case 'MULTIPOINT':
- case 'MULTILINESTRING':
- case 'MULTIPOLYGON':
- case 'GEOMETRYCOLLECTION':
- return 'SPATIAL';
- case 'JSON':
- return 'JSON';
- case 'UUID':
- return 'UUID';
- }
- return '';
- }
- /**
- * Returns array of functions available for a class.
- *
- * @param string $class The class to get function list.
- *
- * @return string[]
- */
- public function getFunctionsClass($class)
- {
- $isMariaDB = $this->dbi->isMariaDB();
- $serverVersion = $this->dbi->getVersion();
- switch ($class) {
- case 'CHAR':
- $ret = [
- 'AES_DECRYPT',
- 'AES_ENCRYPT',
- 'BIN',
- 'CHAR',
- 'COMPRESS',
- 'CURRENT_USER',
- 'DATABASE',
- 'DAYNAME',
- 'DES_DECRYPT',
- 'DES_ENCRYPT',
- 'ENCRYPT',
- 'HEX',
- 'INET6_NTOA',
- 'INET_NTOA',
- 'LOAD_FILE',
- 'LOWER',
- 'LTRIM',
- 'MD5',
- 'MONTHNAME',
- 'OLD_PASSWORD',
- 'PASSWORD',
- 'QUOTE',
- 'REVERSE',
- 'RTRIM',
- 'SHA1',
- 'SOUNDEX',
- 'SPACE',
- 'TRIM',
- 'UNCOMPRESS',
- 'UNHEX',
- 'UPPER',
- 'USER',
- 'UUID',
- 'VERSION',
- ];
- if (($isMariaDB && $serverVersion < 100012) || $serverVersion < 50603) {
- $ret = array_diff($ret, ['INET6_NTOA']);
- }
- return array_values($ret);
- case 'DATE':
- return [
- 'CURRENT_DATE',
- 'CURRENT_TIME',
- 'DATE',
- 'FROM_DAYS',
- 'FROM_UNIXTIME',
- 'LAST_DAY',
- 'NOW',
- 'SEC_TO_TIME',
- 'SYSDATE',
- 'TIME',
- 'TIMESTAMP',
- 'UTC_DATE',
- 'UTC_TIME',
- 'UTC_TIMESTAMP',
- 'YEAR',
- ];
- case 'NUMBER':
- $ret = [
- 'ABS',
- 'ACOS',
- 'ASCII',
- 'ASIN',
- 'ATAN',
- 'BIT_LENGTH',
- 'BIT_COUNT',
- 'CEILING',
- 'CHAR_LENGTH',
- 'CONNECTION_ID',
- 'COS',
- 'COT',
- 'CRC32',
- 'DAYOFMONTH',
- 'DAYOFWEEK',
- 'DAYOFYEAR',
- 'DEGREES',
- 'EXP',
- 'FLOOR',
- 'HOUR',
- 'INET6_ATON',
- 'INET_ATON',
- 'LENGTH',
- 'LN',
- 'LOG',
- 'LOG2',
- 'LOG10',
- 'MICROSECOND',
- 'MINUTE',
- 'MONTH',
- 'OCT',
- 'ORD',
- 'PI',
- 'QUARTER',
- 'RADIANS',
- 'RAND',
- 'ROUND',
- 'SECOND',
- 'SIGN',
- 'SIN',
- 'SQRT',
- 'TAN',
- 'TO_DAYS',
- 'TO_SECONDS',
- 'TIME_TO_SEC',
- 'UNCOMPRESSED_LENGTH',
- 'UNIX_TIMESTAMP',
- 'UUID_SHORT',
- 'WEEK',
- 'WEEKDAY',
- 'WEEKOFYEAR',
- 'YEARWEEK',
- ];
- if (($isMariaDB && $serverVersion < 100012) || $serverVersion < 50603) {
- $ret = array_diff($ret, ['INET6_ATON']);
- }
- return array_values($ret);
- case 'SPATIAL':
- if ($serverVersion >= 50600) {
- return [
- 'ST_GeomFromText',
- 'ST_GeomFromWKB',
- 'ST_GeomCollFromText',
- 'ST_LineFromText',
- 'ST_MLineFromText',
- 'ST_PointFromText',
- 'ST_MPointFromText',
- 'ST_PolyFromText',
- 'ST_MPolyFromText',
- 'ST_GeomCollFromWKB',
- 'ST_LineFromWKB',
- 'ST_MLineFromWKB',
- 'ST_PointFromWKB',
- 'ST_MPointFromWKB',
- 'ST_PolyFromWKB',
- 'ST_MPolyFromWKB',
- ];
- }
- return [
- 'GeomFromText',
- 'GeomFromWKB',
- 'GeomCollFromText',
- 'LineFromText',
- 'MLineFromText',
- 'PointFromText',
- 'MPointFromText',
- 'PolyFromText',
- 'MPolyFromText',
- 'GeomCollFromWKB',
- 'LineFromWKB',
- 'MLineFromWKB',
- 'PointFromWKB',
- 'MPointFromWKB',
- 'PolyFromWKB',
- 'MPolyFromWKB',
- ];
- }
- return [];
- }
- /**
- * Returns array of functions available for a type.
- *
- * @param string $type The data type to get function list.
- *
- * @return string[]
- */
- public function getFunctions($type)
- {
- $class = $this->getTypeClass($type);
- return $this->getFunctionsClass($class);
- }
- /**
- * Returns array of all functions available.
- *
- * @return string[]
- */
- public function getAllFunctions()
- {
- $ret = array_merge(
- $this->getFunctionsClass('CHAR'),
- $this->getFunctionsClass('NUMBER'),
- $this->getFunctionsClass('DATE'),
- $this->getFunctionsClass('SPATIAL')
- );
- sort($ret);
- return $ret;
- }
- /**
- * Returns array of all attributes available.
- *
- * @return string[]
- */
- public function getAttributes()
- {
- $serverVersion = $this->dbi->getVersion();
- $attributes = [
- '',
- 'BINARY',
- 'UNSIGNED',
- 'UNSIGNED ZEROFILL',
- 'on update CURRENT_TIMESTAMP',
- ];
- if (Compatibility::supportsCompressedColumns($serverVersion)) {
- $attributes[] = 'COMPRESSED=zlib';
- }
- return $attributes;
- }
- /**
- * Returns array of all column types available.
- *
- * VARCHAR, TINYINT, TEXT and DATE are listed first, based on
- * estimated popularity.
- *
- * @return array
- */
- public function getColumns(): array
- {
- $isMariaDB = $this->dbi->isMariaDB();
- $serverVersion = $this->dbi->getVersion();
- $isUUIDSupported = Compatibility::isUUIDSupported($this->dbi);
- // most used types
- $ret = [
- 'INT',
- 'VARCHAR',
- 'TEXT',
- 'DATE',
- ];
- if ($isUUIDSupported) {
- $ret[] = 'UUID';
- }
- // numeric
- $ret[_pgettext('numeric types', 'Numeric')] = [
- 'TINYINT',
- 'SMALLINT',
- 'MEDIUMINT',
- 'INT',
- 'BIGINT',
- '-',
- 'DECIMAL',
- 'FLOAT',
- 'DOUBLE',
- 'REAL',
- '-',
- 'BIT',
- 'BOOLEAN',
- 'SERIAL',
- ];
- // Date/Time
- $ret[_pgettext('date and time types', 'Date and time')] = [
- 'DATE',
- 'DATETIME',
- 'TIMESTAMP',
- 'TIME',
- 'YEAR',
- ];
- // Text
- $stringTypes = [
- 'CHAR',
- 'VARCHAR',
- '-',
- 'TINYTEXT',
- 'TEXT',
- 'MEDIUMTEXT',
- 'LONGTEXT',
- '-',
- 'BINARY',
- 'VARBINARY',
- '-',
- 'TINYBLOB',
- 'BLOB',
- 'MEDIUMBLOB',
- 'LONGBLOB',
- '-',
- 'ENUM',
- 'SET',
- ];
- if ($isMariaDB && $serverVersion >= 100500) {
- $stringTypes[] = '-';
- $stringTypes[] = 'INET6';
- }
- $ret[_pgettext('string types', 'String')] = $stringTypes;
- $ret[_pgettext('spatial types', 'Spatial')] = [
- 'GEOMETRY',
- 'POINT',
- 'LINESTRING',
- 'POLYGON',
- 'MULTIPOINT',
- 'MULTILINESTRING',
- 'MULTIPOLYGON',
- 'GEOMETRYCOLLECTION',
- ];
- if (($isMariaDB && $serverVersion > 100207) || (! $isMariaDB && $serverVersion >= 50708)) {
- $ret['JSON'] = ['JSON'];
- }
- if ($isUUIDSupported) {
- $ret['UUID'] = ['UUID'];
- }
- return $ret;
- }
- public function mapAliasToMysqlType(string $alias): string
- {
- return [
- 'BOOL' => 'TINYINT',
- 'BOOLEAN' => 'TINYINT',
- 'CHARACTER VARYING' => 'VARCHAR',
- 'FIXED' => 'DECIMAL',
- 'FLOAT4' => 'FLOAT',
- 'FLOAT8' => 'DOUBLE',
- 'INT1' => 'TINYINT',
- 'INT2' => 'SMALLINT',
- 'INT3' => 'MEDIUMINT',
- 'INT4' => 'INT',
- 'INT8' => 'BIGINT',
- 'LONG VARBINARY' => 'MEDIUMBLOB',
- 'LONG VARCHAR' => 'MEDIUMTEXT',
- 'LONG' => 'MEDIUMTEXT',
- 'MIDDLEINT' => 'MEDIUMINT',
- 'NUMERIC' => 'DECIMAL',
- ][$alias] ?? $alias;
- }
- /**
- * Returns an array of integer types
- *
- * @return string[] integer types
- */
- public function getIntegerTypes()
- {
- return [
- 'tinyint',
- 'smallint',
- 'mediumint',
- 'int',
- 'bigint',
- ];
- }
- /**
- * Returns the min and max values of a given integer type
- *
- * @param string $type integer type
- * @param bool $signed whether signed
- *
- * @return string[] min and max values
- */
- public function getIntegerRange($type, $signed = true)
- {
- $min_max_data = [
- 'unsigned' => [
- 'tinyint' => [
- '0',
- '255',
- ],
- 'smallint' => [
- '0',
- '65535',
- ],
- 'mediumint' => [
- '0',
- '16777215',
- ],
- 'int' => [
- '0',
- '4294967295',
- ],
- 'bigint' => [
- '0',
- '18446744073709551615',
- ],
- ],
- 'signed' => [
- 'tinyint' => [
- '-128',
- '127',
- ],
- 'smallint' => [
- '-32768',
- '32767',
- ],
- 'mediumint' => [
- '-8388608',
- '8388607',
- ],
- 'int' => [
- '-2147483648',
- '2147483647',
- ],
- 'bigint' => [
- '-9223372036854775808',
- '9223372036854775807',
- ],
- ],
- ];
- $relevantArray = $signed
- ? $min_max_data['signed']
- : $min_max_data['unsigned'];
- return $relevantArray[$type] ?? [
- '',
- '',
- ];
- }
- }
|