/usr/share/phpmyadmin/libraries/classes
NameSizeModeActions
Charsets/-0755rm
Command/-0755rm
Config/-0755rm
Controllers/-0755rm
Database/-0755rm
Dbal/-0755rm
Display/-0755rm
Engines/-0755rm
Exceptions/-0755rm
Export/-0755rm
Gis/-0755rm
Html/-0755rm
Import/-0755rm
Navigation/-0755rm
Plugins/-0755rm
Properties/-0755rm
Providers/-0755rm
Query/-0755rm
Server/-0755rm
Setup/-0755rm
Table/-0755rm
Twig/-0755rm
Utils/-0755rm
Advisor.php125170644editdlrm
Bookmark.php109440644editdlrm
BrowseForeigners.php110830644editdlrm
Charsets.php72670644editdlrm
CheckUserPrivileges.php122300644editdlrm
Config.php464560644editdlrm
Console.php34600644editdlrm
Core.php433440644editdlrm
CreateAddField.php179930644editdlrm
DatabaseInterface.php768020644editdlrm
DbTableExists.php32870644editdlrm
Encoding.php87150644editdlrm
Error.php143040644editdlrm
ErrorHandler.php175570644editdlrm
ErrorReport.php93640644editdlrm
Export.php473510644editdlrm
File.php217860644editdlrm
FileListing.php29230644editdlrm
Font.php57180644editdlrm
Footer.php107940644editdlrm
Git.php183810644editdlrm
Header.php219670644editdlrm
Import.php588400644editdlrm
Index.php154280644editdlrm
IndexColumn.php43310644editdlrm
InsertEdit.php1333090644editdlrm
InternalRelations.php177300644editdlrm
IpAllowDeny.php99970644editdlrm
Language.php45680644editdlrm
LanguageManager.php245320644editdlrm
Linter.php53740644editdlrm
ListAbstract.php18140644editdlrm
ListDatabase.php44020644editdlrm
Logging.php27810644editdlrm
Menu.php218120644editdlrm
Message.php195470644editdlrm
Mime.php9160644editdlrm
Normalization.php424750644editdlrm
OpenDocument.php86170644editdlrm
Operations.php387480644editdlrm
OutputBuffering.php40740644editdlrm
ParseAnalyze.php24290644editdlrm
Partition.php73400644editdlrm
Pdf.php44490644editdlrm
Plugins.php257830644editdlrm
Profiling.php23170644editdlrm
RecentFavoriteTable.php122970644editdlrm
Relation.php792470644editdlrm
RelationCleanup.php150510644editdlrm
Replication.php48430644editdlrm
ReplicationGui.php220380644editdlrm
ReplicationInfo.php49430644editdlrm
Response.php168640644editdlrm
Routing.php58450644editdlrm
Sanitize.php124180644editdlrm
SavedSearches.php122210644editdlrm
Scripts.php37260644editdlrm
Session.php81980644editdlrm
Sql.php682720644editdlrm
SqlQueryForm.php72860644editdlrm
StorageEngine.php128280644editdlrm
SubPartition.php33980644editdlrm
SystemDatabase.php37480644editdlrm
Table.php979610644editdlrm
TablePartitionDefinition.php66640644editdlrm
Template.php39620644editdlrm
Theme.php89690644editdlrm
ThemeManager.php98150644editdlrm
Tracker.php304970644editdlrm
Tracking.php381410644editdlrm
Transformations.php166850644editdlrm
TwoFactor.php69680644editdlrm
Types.php258050644editdlrm
Url.php89730644editdlrm
UserPassword.php72840644editdlrm
UserPreferences.php86570644editdlrm
Util.php1047680644editdlrm
Version.php5330644editdlrm
VersionInformation.php73190644editdlrm
ZipExtension.php110170644editdlrm
Edit: /usr/share/phpmyadmin/libraries/classes/Types.php (25805B)
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 * * @return bool */ public function isUnaryOperator($op) { 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', '=', '!=', 'REGEXP', 'REGEXP ^...$', 'NOT REGEXP', "= ''", "!= ''", 'IN (...)', 'NOT IN (...)', 'BETWEEN', 'NOT BETWEEN', ]; } /** * Number search operators * * @return string[] */ public function getNumberOperators() { return [ '=', '>', '>=', '<', '<=', '!=', 'LIKE', 'LIKE %...%', 'NOT LIKE', 'IN (...)', 'NOT IN (...)', 'BETWEEN', 'NOT BETWEEN', ]; } /** * 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()); } 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 .= ''; } 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'); } 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'; } 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 $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 $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('UUID') ); sort($ret); return $ret; } /** * Returns array of all attributes available. * * @return string[] */ public function getAttributes() { return [ '', 'BINARY', 'UNSIGNED', 'UNSIGNED ZEROFILL', 'on update CURRENT_TIMESTAMP', ]; } /** * 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(); // most used types $ret = [ 'INT', 'VARCHAR', 'TEXT', 'DATE', ]; // 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 $ret[_pgettext('string types', 'String')] = [ 'CHAR', 'VARCHAR', '-', 'TINYTEXT', 'TEXT', 'MEDIUMTEXT', 'LONGTEXT', '-', 'BINARY', 'VARBINARY', '-', 'TINYBLOB', 'BLOB', 'MEDIUMBLOB', 'LONGBLOB', '-', 'ENUM', 'SET', ]; $ret[_pgettext('spatial types', 'Spatial')] = [ 'GEOMETRY', 'POINT', 'LINESTRING', 'POLYGON', 'MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION', ]; if (($isMariaDB && $serverVersion > 100207) || (! $isMariaDB && $serverVersion >= 50708) ) { $ret['JSON'] = ['JSON']; } if ($isMariaDB && $serverVersion >= 100500) { array_push($ret[_pgettext('string types', 'String')], '-', 'INET6'); } return $ret; } /** * 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) { static $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] ?? [ '', '', ]; } }