phpmyadmin/libraries/classes/InternalRelations.php
Kamil Tekiela 0bdcaba2d2
Add native property types (#18143)
* Add native property types

Includes TypeHints.UnionTypeHintFormat

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Set some default values for properties

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Format and promote properties

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Remove redundant asserts

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant cast

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $tmanager->theme is never null

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant variable

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Fix empty on $statementInfo bool

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant casts

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant issets

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* getPacked() returns nullable string

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Redundant if

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $this->content can be null

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Simplify ThemeManager::getInstance()

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Use isset for checking if property is initialized

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Use nullable instead of uninitialized property

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* password is no longer nullable

I can't verify that none of the globals ever tried to set it to null, but the variable should never be nullable.

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Update baselines

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* $same_wide_width param can be float or int

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Update Message.php

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Cast Sub_part to int

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

* Fix one line doc comments

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>

---------

Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
2023-02-26 23:30:41 -03:00

496 lines
17 KiB
PHP

<?php
/**
* Internal relations for information schema and mysql databases.
*/
declare(strict_types=1);
namespace PhpMyAdmin;
/**
* Internal relations for information schema and mysql databases.
*/
class InternalRelations
{
/** @var array */
private static array $informationSchema = [
'CHARACTER_SETS' => [
'DEFAULT_COLLATE_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'COLLATIONS' => [
'CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
],
'COLLATION_CHARACTER_SET_APPLICABILITY' => [
'CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'COLUMNS' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'COLUMN_PRIVILEGES' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'EVENTS' => [
'EVENT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_CLIENT' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_CONNECTION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'DATABASE_COLLATION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'FILES' => [
'TABLESPACE_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'TABLESPACES',
'foreign_field' => 'TABLESPACE_NAME',
],
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'COLLATION_CONNECTION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'ENGINE' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'ENGINES',
'foreign_field' => 'ENGINE',
],
],
'KEY_COLUMN_USAGE' => [
'CONSTRAINT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'REFERENCED_TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'PARAMETERS' => [
'SPECIFIC_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'PARTITIONS' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'TABLESPACE_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'TABLESPACES',
'foreign_field' => 'TABLESPACE_NAME',
],
],
'PROCESSLIST' => [
'DB' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'REFERENTIAL_CONSTRAINTS' => [
'CONSTRAINT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'UNIQUE_CONSTRAINT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'ROUTINES' => [
'ROUTINE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'CHARACTER_SET_CLIENT' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_CONNECTION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'DATABASE_COLLATION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'SCHEMATA' => [
'DEFAULT_CHARACTER_SET_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'DEFAULT_COLLATION_NAME' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'SCHEMA_PRIVILEGES' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'STATISTICS' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'INDEX_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'TABLES' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'TABLE_COLLATION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'ENGINE' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'ENGINES',
'foreign_field' => 'ENGINE',
],
],
'TABLESAPCES' => [
'ENGINE' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'ENGINES',
'foreign_field' => 'ENGINE',
],
],
'TABLE_CONSTRAINTS' => [
'CONSTRAINT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'TABLE_PRIVILEGES' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'TRIGGERS' => [
'TRIGGER_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'EVENT_OBJECT_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_CLIENT' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_CONNECTION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'DATABASE_COLLATION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'VIEWS' => [
'TABLE_SCHEMA' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'CHARACTER_SET_CLIENT' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'COLLATION_CONNECTION' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
];
/** @var array */
private static array $mysql = [
'columns_priv' => [
'Db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'db' => [
'Db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'event' => [
'db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'character_set_client' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'collation_connection' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'db_collation' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'help_category' => [
'parent_category_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'help_category',
'foreign_field' => 'help_category_id',
],
],
'help_relation' => [
'help_topic_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'help_topic',
'foreign_field' => 'help_topic_id',
],
'help_keyword_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'help_keyword',
'foreign_field' => 'help_keyword_id',
],
],
'help_topic' => [
'help_category_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'help_category',
'foreign_field' => 'help_category_id',
],
],
'innodb_index_stats' => [
'database_name' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'innodb_table_stats' => [
'database_name' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'proc' => [
'db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
'character_set_client' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'CHARACTER_SETS',
'foreign_field' => 'CHARACTER_SET_NAME',
],
'collation_connection' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
'db_collation' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'COLLATIONS',
'foreign_field' => 'COLLATION_NAME',
],
],
'proc_priv' => [
'Db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'servers' => [
'Db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'slow_log' => [
'db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'tables_priv' => [
'Db' => [
'foreign_db' => 'information_schema',
'foreign_table' => 'SCHEMATA',
'foreign_field' => 'SCHEMA_NAME',
],
],
'time_zone_name' => [
'Time_zone_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'time_zone',
'foreign_field' => 'Time_zone_id',
],
],
'time_zone_transition' => [
'Time_zone_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'time_zone',
'foreign_field' => 'Time_zone_id',
],
'Transition_time' => [
'foreign_db' => 'mysql',
'foreign_table' => 'time_zone_leap_second',
'foreign_field' => 'Transition_time',
],
],
'time_zone_transition_type' => [
'Time_zone_id' => [
'foreign_db' => 'mysql',
'foreign_table' => 'time_zone',
'foreign_field' => 'Time_zone_id',
],
],
];
/** @return array */
public static function getInformationSchema(): array
{
return self::$informationSchema;
}
/** @return array */
public static function getMySql(): array
{
return self::$mysql;
}
}