From 2e5bc2489944a5d1532d4139df3ebbfec63d9be7 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Sat, 14 Sep 2013 12:30:04 +0530 Subject: [PATCH 1/2] Add missing relations --- .../information_schema_relations.lib.php | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/libraries/information_schema_relations.lib.php b/libraries/information_schema_relations.lib.php index e9f3c0370f06..fccd11d92eab 100644 --- a/libraries/information_schema_relations.lib.php +++ b/libraries/information_schema_relations.lib.php @@ -17,6 +17,11 @@ 'foreign_db' => 'information_schema', 'foreign_table' => 'COLLATIONS', 'foreign_field' => 'COLLATION_NAME' + ), + 'CHARACTER_SET_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' ) ), 'COLLATIONS' => array( @@ -62,6 +67,50 @@ 'foreign_field' => 'SCHEMA_NAME' ) ), + 'EVENTS' => array( + 'EVENT_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'CHARACTER_SET_CLIENT' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_CONNECTION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + 'DATABASE_COLLATION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ) + ), + 'FILES' => array( + 'TABLESPACE_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'TABLESPACES', + 'foreign_field' => 'TABLESPACE_NAME' + ), + 'TABLE_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'COLLATION_CONNECTION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + 'ENGINE' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'ENGINES', + 'foreign_field' => 'ENGINE' + ) + ), 'KEY_COLUMN_USAGE' => array( 'CONSTRAINT_SCHEMA' => array( 'foreign_db' => 'information_schema', @@ -72,6 +121,59 @@ 'foreign_db' => 'information_schema', 'foreign_table' => 'SCHEMATA', 'foreign_field' => 'SCHEMA_NAME' + ), + 'REFERENCED_TABLE_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ) + ), + 'PARAMETERS' => array( + 'SPECIFIC_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'CHARACTER_SET_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ) + ), + 'PARTITIONS' => array( + 'TABLE_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'TABLESPACE_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'TABLESPACES', + 'foreign_field' => 'TABLESPACE_NAME' + ) + ), + 'PROCESSLIST' => array( + 'DB' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ) + ), + 'REFERENTIAL_CONSTRAINTS' => array( + 'CONSTRAINT_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'UNIQUE_CONSTRAINT_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' ) ), 'ROUTINES' => array( @@ -79,6 +181,31 @@ 'foreign_db' => 'information_schema', 'foreign_table' => 'SCHEMATA', 'foreign_field' => 'SCHEMA_NAME' + ), + 'CHARACTER_SET_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + 'CHARACTER_SET_CLIENT' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_CONNECTION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + 'DATABASE_COLLATION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' ) ), 'SCHEMATA' => array( @@ -86,6 +213,11 @@ 'foreign_db' => 'information_schema', 'foreign_table' => 'CHARACTER_SETS', 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'DEFAULT_COLLATION_NAME' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' ) ), 'SCHEMA_PRIVILEGES' => array( @@ -95,6 +227,18 @@ 'foreign_field' => 'SCHEMA_NAME' ) ), + 'STATISTICS' => array( + 'TABLE_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'INDEX_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ) + ), 'TABLES' => array( 'TABLE_SCHEMA' => array( 'foreign_db' => 'information_schema', @@ -105,6 +249,18 @@ 'foreign_db' => 'information_schema', 'foreign_table' => 'COLLATIONS', 'foreign_field' => 'COLLATION_NAME' + ), + 'ENGINE' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'ENGINES', + 'foreign_field' => 'ENGINE' + ) + ), + 'TABLESAPCES' => array( + 'ENGINE' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'ENGINES', + 'foreign_field' => 'ENGINE' ) ), 'TABLE_CONSTRAINTS' => array( @@ -126,11 +282,48 @@ 'foreign_field' => 'SCHEMA_NAME' ) ), + 'TRIGGERS' => array( + 'TRIGGER_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'EVENT_OBJECT_SCHEMA' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + 'CHARACTER_SET_CLIENT' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_CONNECTION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + 'DATABASE_COLLATION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ) + ), 'VIEWS' => array( 'TABLE_SCHEMA' => array( 'foreign_db' => 'information_schema', 'foreign_table' => 'SCHEMATA', 'foreign_field' => 'SCHEMA_NAME' + ), + 'CHARACTER_SET_CLIENT' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'CHARACTER_SETS', + 'foreign_field' => 'CHARACTER_SET_NAME' + ), + 'COLLATION_CONNECTION' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' ) ) ); From 3c8e4fb0bb2f1159c6e2aa0733f3ff1e0b4ea142 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Sat, 14 Sep 2013 14:36:03 +0530 Subject: [PATCH 2/2] Add missing default transformations --- libraries/DisplayResults.class.php | 81 +++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 19 deletions(-) diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index 4f0d61764244..dd79d6ee9997 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -156,12 +156,12 @@ class PMA_DisplayResults ); /** - * This global variable represent the columns which needs to be syntax - * highlighted in each database tables + * This variable contains the column transformation information + * for some of the system databases. * One element of this array represent all relavant columns in all tables in * one specific database */ - public $syntax_highlighting_column_info; + public $transformation_info; /** @@ -207,18 +207,7 @@ public function __set($property, $value) */ public function __construct($db, $table, $goto, $sql_query) { - $this->syntax_highlighting_column_info = array( - 'information_schema' => array( - 'processlist' => array( - 'info' => array( - 'libraries/plugins/transformations/' - . 'Text_Plain_Formatted.class.php', - 'Text_Plain_Formatted', - 'Text_Plain' - ) - ) - ) - ); + $this->_setDefaultTransformations(); $this->__set('db', $db); $this->__set('table', $table); @@ -226,6 +215,60 @@ public function __construct($db, $table, $goto, $sql_query) $this->__set('sql_query', $sql_query); } + /** + * Sets default transformations for some columns + * + * @return void + */ + private function _setDefaultTransformations() + { + $sql_highlighting_data = array( + 'libraries/plugins/transformations/Text_Plain_Formatted.class.php', + 'Text_Plain_Formatted', + 'Text_Plain' + ); + $this->transformation_info = array( + 'information_schema' => array( + 'events' => array( + 'event_definition' => $sql_highlighting_data + ), + 'processlist' => array( + 'info' => $sql_highlighting_data + ), + 'routines' => array( + 'routine_definition' => $sql_highlighting_data + ), + 'triggers' => array( + 'action_statement' => $sql_highlighting_data + ), + 'views' => array( + 'view_definition' => $sql_highlighting_data + ) + ) + ); + + $cfgRelation = PMA_getRelationsParam(); + if ($cfgRelation['db']) { + $this->transformation_info[$cfgRelation['db']] = array(); + $relDb = &$this->transformation_info[$cfgRelation['db']]; + if ($cfgRelation['history']) { + $relDb[$cfgRelation['history']] = array( + 'sqlquery' => $sql_highlighting_data + ); + } + if ($cfgRelation['bookmark']) { + $relDb[$cfgRelation['bookmark']] = array( + 'query' => $sql_highlighting_data + ); + } + if ($cfgRelation['tracking']) { + $relDb[$cfgRelation['tracking']] = array( + 'schema_sql' => $sql_highlighting_data, + 'data_sql' => $sql_highlighting_data + ); + } + } + } /** * Set properties which were not initialized at the constructor @@ -2809,8 +2852,8 @@ private function _getRowValues( $row[$i] = PMA_Util::formatSql( $parsed_sql, $row[$i] ); - include_once $this->syntax_highlighting_column_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][0]; - $transformation_plugin = new $this->syntax_highlighting_column_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][1](null); + include_once $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][0]; + $transformation_plugin = new $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][1](null); $transform_options = PMA_transformation_getOptions( isset($mime_map[$meta->name]['transformation_options']) @@ -2820,7 +2863,7 @@ private function _getRowValues( $meta->mimetype = str_replace( '_', '/', - $this->syntax_highlighting_column_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][2] + $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][2] ); } @@ -3046,7 +3089,7 @@ private function _gatherLinksForLaterOutputs( */ private function _isNeedToSyntaxHighlight($field) { - if (! empty($this->syntax_highlighting_column_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($field)])) { + if (! empty($this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($field)])) { return true; } return false;