From bfd0a67845c149d5bd6431854ef8633cbf79bbd5 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Sun, 25 Jan 2015 17:59:03 +0530 Subject: [PATCH 1/7] Do not link to itself Signed-off-by: Madhura Jayaratne --- libraries/information_schema_relations.lib.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libraries/information_schema_relations.lib.php b/libraries/information_schema_relations.lib.php index d1532073ef..64be9d7d8d 100644 --- a/libraries/information_schema_relations.lib.php +++ b/libraries/information_schema_relations.lib.php @@ -18,11 +18,6 @@ $GLOBALS['information_schema_relations'] = array( '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( From 19acb28444517ae81eecf1c6f9e18610783d7189 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 11:56:51 +0530 Subject: [PATCH 2/7] Browser transformation and links for mysql and information_schema Signed-off-by: Madhura Jayaratne --- libraries/DisplayResults.class.php | 55 +++- libraries/mysql_relations.lib.php | 169 ++++++++++ .../output/Text_Octetstream_Sql.class.php | 45 +++ libraries/relation.lib.php | 8 +- libraries/special_schema_links.lib.php | 295 +++++++++++------- 5 files changed, 440 insertions(+), 132 deletions(-) create mode 100644 libraries/mysql_relations.lib.php create mode 100644 libraries/plugins/transformations/output/Text_Octetstream_Sql.class.php diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index eb1b007f3e..71ec891233 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -229,8 +229,18 @@ class PMA_DisplayResults private function _setDefaultTransformations() { $sql_highlighting_data = array( - 'libraries/plugins/transformations/output/Text_Plain_Formatted.class.php', - 'Text_Plain_Formatted', + 'libraries/plugins/transformations/output/Text_Plain_Sql.class.php', + 'Text_Plain_Sql', + 'Text_Plain' + ); + $blob_sql_highlighting_data = array( + 'libraries/plugins/transformations/output/Text_Octetstream_Sql.class.php', + 'Text_Octetstream_Sql', + 'Text_Octetstream' + ); + $link_data = array( + 'libraries/plugins/transformations/Text_Plain_Link.class.php', + 'Text_Plain_Link', 'Text_Plain' ); $this->transformation_info = array( @@ -250,6 +260,31 @@ class PMA_DisplayResults 'views' => array( 'view_definition' => $sql_highlighting_data ) + ), + 'mysql' => array( + 'event' => array( + 'body' => $blob_sql_highlighting_data, + 'body_utf8' => $blob_sql_highlighting_data + ), + 'general_log' => array( + 'argument' => $sql_highlighting_data + ), + 'help_category' => array( + 'url' => $link_data + ), + 'help_topic' => array( + 'example' => $sql_highlighting_data, + 'url' => $link_data + ), + 'proc' => array( + 'param_list' => $blob_sql_highlighting_data, + 'returns' => $blob_sql_highlighting_data, + 'body' => $blob_sql_highlighting_data, + 'body_utf8' => $blob_sql_highlighting_data + ), + 'slow_log' => array( + 'sql_text' => $sql_highlighting_data + ) ) ); @@ -2820,7 +2855,6 @@ class PMA_DisplayResults if (! empty($this->transformation_info[$dbLower][$tblLower][$nameLower]) && (trim($row[$i]) != '') ) { - $row[$i] = PMA_Util::formatSql($row[$i]); include_once $this->transformation_info [$dbLower][$tblLower][$nameLower][0]; $transformation_plugin = new $this->transformation_info @@ -2953,9 +2987,10 @@ class PMA_DisplayResults $linking_url_params[$link_relations['link_param'][0]] = $sql; } + $divider = strpos($link_relations['default_page'], '?') ? '&' : '?'; if (empty($link_relations['link_dependancy_params'])) { return $link_relations['default_page'] - . PMA_URL_getCommon($linking_url_params); + . PMA_URL_getCommon($linking_url_params, 'html', $divider); } foreach ($link_relations['link_dependancy_params'] as $new_param) { @@ -2976,18 +3011,10 @@ class PMA_DisplayResults if (empty($row_info['routine_type'])) { continue; } - - $lowerRoutineType = strtolower($row_info['routine_type']); - if ($lowerRoutineType == self::ROUTINE_PROCEDURE - || $lowerRoutineType == self::ROUTINE_FUNCTION - ) { - $linking_url_params['edit_item'] = 1; - } - } return $link_relations['default_page'] - . PMA_URL_getCommon($linking_url_params); + . PMA_URL_getCommon($linking_url_params, 'html', $divider); } @@ -4988,7 +5015,7 @@ class PMA_DisplayResults ) { // Applying Transformations on hex string of binary data // seems more appropriate - $result = bin2hex($content); + $result = pack("H*", bin2hex($content)); } } diff --git a/libraries/mysql_relations.lib.php b/libraries/mysql_relations.lib.php new file mode 100644 index 0000000000..a9b061a8fb --- /dev/null +++ b/libraries/mysql_relations.lib.php @@ -0,0 +1,169 @@ + array( + 'Db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'db' => array( + 'Db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'event' => array( + 'db' => 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' + ), + 'db_collation' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + ), + 'help_category' => array( + 'parent_category_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'help_category', + 'foreign_field' => 'help_category_id' + ), + ), + 'help_relation' => array( + 'help_topic_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'help_topic', + 'foreign_field' => 'help_topic_id' + ), + 'help_keyword_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'help_keyword', + 'foreign_field' => 'help_keyword_id' + ), + ), + 'help_topic' => array( + 'help_category_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'help_category', + 'foreign_field' => 'help_category_id' + ), + ), + 'innodb_index_stats' => array( + 'database_name' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'innodb_table_stats' => array( + 'database_name' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'proc' => array( + 'db' => 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' + ), + 'db_collation' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'COLLATIONS', + 'foreign_field' => 'COLLATION_NAME' + ), + ), + 'proc_priv' => array( + 'Db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'servers' => array( + 'Db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'slow_log' => array( + 'db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'tables_priv' => array( + 'Db' => array( + 'foreign_db' => 'information_schema', + 'foreign_table' => 'SCHEMATA', + 'foreign_field' => 'SCHEMA_NAME' + ), + ), + 'time_zone_name' => array( + 'Time_zone_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'time_zone', + 'foreign_field' => 'Time_zone_id' + ), + ), + 'time_zone_transition' => array( + 'Time_zone_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'time_zone', + 'foreign_field' => 'Time_zone_id' + ), + 'Transition_time' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'time_zone_leap_second', + 'foreign_field' => 'Transition_time' + ) + ), + 'time_zone_transition_type' => array( + 'Time_zone_id' => array( + 'foreign_db' => 'mysql', + 'foreign_table' => 'time_zone', + 'foreign_field' => 'Time_zone_id' + ), + ), +); +?> \ No newline at end of file diff --git a/libraries/plugins/transformations/output/Text_Octetstream_Sql.class.php b/libraries/plugins/transformations/output/Text_Octetstream_Sql.class.php new file mode 100644 index 0000000000..d8e07bd3d6 --- /dev/null +++ b/libraries/plugins/transformations/output/Text_Octetstream_Sql.class.php @@ -0,0 +1,45 @@ + \ No newline at end of file diff --git a/libraries/relation.lib.php b/libraries/relation.lib.php index fd11486868..b7aa5fbc0e 100644 --- a/libraries/relation.lib.php +++ b/libraries/relation.lib.php @@ -710,15 +710,19 @@ function PMA_getForeigners($db, $table, $column = '', $source = 'both') $isInformationSchema = /*overload*/mb_strtolower($db) == 'information_schema'; $is_data_dictionary = PMA_DRIZZLE && /*overload*/mb_strtolower($db) == 'data_dictionary'; - if (($isInformationSchema || $is_data_dictionary) + $isMysql = /*overload*/mb_strtolower($db) == 'mysql'; + if (($isInformationSchema || $is_data_dictionary || $isMysql) && ($source == 'internal' || $source == 'both') ) { if ($isInformationSchema) { $relations_key = 'information_schema_relations'; include_once './libraries/information_schema_relations.lib.php'; - } else { + } else if ($is_data_dictionary) { $relations_key = 'data_dictionary_relations'; include_once './libraries/data_dictionary_relations.lib.php'; + } else { + $relations_key = 'mysql_relations'; + include_once './libraries/mysql_relations.lib.php'; } if (isset($GLOBALS[$relations_key][$table])) { foreach ($GLOBALS[$relations_key][$table] as $field => $relations) { diff --git a/libraries/special_schema_links.lib.php b/libraries/special_schema_links.lib.php index e28848d54f..222fc53871 100644 --- a/libraries/special_schema_links.lib.php +++ b/libraries/special_schema_links.lib.php @@ -46,11 +46,47 @@ if (! defined('PHPMYADMIN')) { */ $GLOBALS['special_schema_links'] = array( 'mysql' => array( - 'db' => array( - 'db' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] + 'columns_priv' => array( + 'user' => array( + 'link_param' => 'username', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'hostname', + 'column_name' => 'host' + ) + ), + 'default_page' => 'server_privileges.php' ), + 'table_name' => array( + 'link_param' => 'table', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'Db' + ), + ), + 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] + ), + 'column_name' => array( + 'link_param' => array( + 'sql_query', + 'db', + 'table_name' + ), + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'Db' + ), + 1 => array( + 'param_info' => 'table', + 'column_name' => 'Table_name' + ) + ), + 'default_page' => 'sql.php' + ), + ), + 'db' => array( 'user' => array( 'link_param' => 'username', 'link_dependancy_params' => array( @@ -62,11 +98,146 @@ $GLOBALS['special_schema_links'] = array( 'default_page' => 'server_privileges.php' ) ), + 'event' => array( + 'name' => array( + 'link_param' => 'item_name', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'db' + ) + ), + 'default_page' => 'db_events.php?edit_item=1' + ), + + ), + 'innodb_index_stats' => array( + 'table_name' => array( + 'link_param' => 'table', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'database_name' + ), + ), + 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] + ), + 'index_name' => array( + 'link_param' => 'index', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'database_name' + ), + 1 => array( + 'param_info' => 'table', + 'column_name' => 'table_name' + ) + ), + 'default_page' => 'tbl_structure.php' + ), + ), + 'innodb_table_stats' => array( + 'table_name' => array( + 'link_param' => 'table', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'database_name' + ), + ), + 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] + ), + ), 'proc' => array( - 'db' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) + 'name' => array( + 'link_param' => 'item_name', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'db' + ), + 1 => array( + 'param_info' => 'item_type', + 'column_name' => 'type' + ) + ), + 'default_page' => 'db_routines.php?edit_item=1' + ), + 'specific_name' => array( + 'link_param' => 'item_name', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'db' + ), + 1 => array( + 'param_info' => 'item_type', + 'column_name' => 'type' + ) + ), + 'default_page' => 'db_routines.php?edit_item=1' + ), + ), + 'proc_priv' => array( + 'user' => array( + 'link_param' => 'username', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'hostname', + 'column_name' => 'Host' + ) + ), + 'default_page' => 'server_privileges.php' + ), + 'routine_name' => array( + 'link_param' => 'item_name', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'Db' + ), + 1 => array( + 'param_info' => 'item_type', + 'column_name' => 'Routine_type' + ) + ), + 'default_page' => 'db_routines.php?edit_item=1' + ), + ), + 'proxies_priv' => array( + 'user' => array( + 'link_param' => 'username', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'hostname', + 'column_name' => 'Host' + ) + ), + 'default_page' => 'server_privileges.php' + ), + ), + 'tables_priv' => array( + 'user' => array( + 'link_param' => 'username', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'hostname', + 'column_name' => 'Host' + ) + ), + 'default_page' => 'server_privileges.php' + ), + 'table_name' => array( + 'link_param' => 'table', + 'link_dependancy_params' => array( + 0 => array( + 'param_info' => 'db', + 'column_name' => 'Db' + ), + ), + 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] + ), ), 'user' => array( 'user' => array( @@ -83,10 +254,6 @@ $GLOBALS['special_schema_links'] = array( ), 'information_schema' => array( 'columns' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'table_name' => array( 'link_param' => 'table', 'link_dependancy_params' => array( @@ -116,24 +283,6 @@ $GLOBALS['special_schema_links'] = array( 'default_page' => 'sql.php' ) ), - 'column_privileges' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), - 'events' => array( - 'event_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), - 'files' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), 'key_column_usage' => array( 'table_name' => array( 'link_param' => 'table', @@ -163,18 +312,6 @@ $GLOBALS['special_schema_links'] = array( ), 'default_page' => 'sql.php' ), - 'constraint_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'referenced_table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'referenced_table_name' => array( 'link_param' => 'table', 'link_dependancy_params' => array( @@ -204,17 +341,7 @@ $GLOBALS['special_schema_links'] = array( 'default_page' => 'sql.php' ) ), - 'parameters' => array( - 'specific_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), 'partitions' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'table_name' => array( 'link_param' => 'table', 'link_dependancy_params' => array( @@ -227,10 +354,6 @@ $GLOBALS['special_schema_links'] = array( ) ), 'processlist' => array( - 'db' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'user' => array( 'link_param' => 'username', 'link_dependancy_params' => array( @@ -243,14 +366,6 @@ $GLOBALS['special_schema_links'] = array( ) ), 'referential_constraints' => array( - 'constraint_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'unique_constraint_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'table_name' => array( 'link_param' => 'table', 'link_dependancy_params' => array( @@ -287,10 +402,6 @@ $GLOBALS['special_schema_links'] = array( ), 'default_page' => 'db_routines.php' ), - 'routine_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), ), 'schemata' => array( 'schema_name' => array( @@ -298,21 +409,7 @@ $GLOBALS['special_schema_links'] = array( 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] ) ), - 'schema_privileges' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), 'statistics' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'index_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), 'table_name' => array( 'link_param' => 'table', 'link_dependancy_params' => array( @@ -353,10 +450,6 @@ $GLOBALS['special_schema_links'] = array( ), 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] ), - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) ), 'table_constraints' => array( 'table_name' => array( @@ -369,37 +462,7 @@ $GLOBALS['special_schema_links'] = array( ), 'default_page' => $GLOBALS['cfg']['DefaultTabTable'] ), - 'constraint_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) ), - 'table_privileges' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), - 'triggers' => array( - 'trigger_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ), - 'event_object_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ), - 'views' => array( - 'table_schema' => array( - 'link_param' => 'db', - 'default_page' => $GLOBALS['cfg']['DefaultTabDatabase'] - ) - ) ) ); From c7ebfd44784ca241fdc37bbc2db36fa2641c5fd2 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 12:22:15 +0530 Subject: [PATCH 3/7] Organize the code. Adhere to hide_browser_transformations Signed-off-by: Madhura Jayaratne --- libraries/DisplayResults.class.php | 66 +++++++++++++++--------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index 71ec891233..3a3cdf97d4 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -2814,38 +2814,6 @@ class PMA_DisplayResults } // end if transformation is set } // end if mime/transformation works. - $_url_params = array( - 'db' => $this->__get('db'), - 'table' => $this->__get('table'), - 'where_clause' => $where_clause, - 'transform_key' => $meta->name, - ); - - $unique_conditions = PMA_Util::getUniqueCondition( - $dt_result, - $this->__get('fields_cnt'), - $this->__get('fields_meta'), - $row, - false, - $meta->orgtable - ); - - $transform_url_params = array( - 'db' => $meta->db, - 'table' => $meta->orgtable, - 'where_clause' => $unique_conditions[0], - 'transform_key' => $meta->orgname - ); - - if (! empty($sql_query)) { - $_url_params['sql_query'] = $url_sql_query; - $transform_url_params['sql_query'] = $url_sql_query; - } - - $transform_options['wrapper_link'] - = PMA_URL_getCommon($transform_url_params); - - $vertical_display = $this->__get('vertical_display'); // Check whether the field needs to display with syntax highlighting @@ -2854,6 +2822,7 @@ class PMA_DisplayResults $nameLower = /*overload*/mb_strtolower($meta->orgname); if (! empty($this->transformation_info[$dbLower][$tblLower][$nameLower]) && (trim($row[$i]) != '') + && ! $_SESSION['tmpval']['hide_transformation'] ) { include_once $this->transformation_info [$dbLower][$tblLower][$nameLower][0]; @@ -2901,6 +2870,39 @@ class PMA_DisplayResults } + $_url_params = array( + 'db' => $this->__get('db'), + 'table' => $this->__get('table'), + 'where_clause' => $where_clause, + 'transform_key' => $meta->name, + ); + + $unique_conditions = PMA_Util::getUniqueCondition( + $dt_result, + $this->__get('fields_cnt'), + $this->__get('fields_meta'), + $row, + false, + $meta->orgtable + ); + + $transform_url_params = array( + 'db' => $meta->db, + 'table' => $meta->orgtable, + 'where_clause' => $unique_conditions[0], + 'transform_key' => $meta->orgname + ); + + if (! empty($sql_query)) { + $_url_params['sql_query'] = $url_sql_query; + $transform_url_params['sql_query'] = $url_sql_query; + } + + $transform_options['wrapper_link'] + = PMA_URL_getCommon($transform_url_params); + + $vertical_display = $this->__get('vertical_display'); + if ($meta->numeric == 1) { // n u m e r i c From 112099971b3e3afe889cce059b2a64ec56b4f302 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 12:27:14 +0530 Subject: [PATCH 4/7] Remove redundant check Signed-off-by: Madhura Jayaratne --- libraries/DisplayResults.class.php | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index 3a3cdf97d4..df1adf0ea8 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -2779,7 +2779,6 @@ class PMA_DisplayResults ) { if (isset($mime_map[$orgFullColName]['mimetype']) - && isset($mime_map[$orgFullColName]['transformation']) && !empty($mime_map[$orgFullColName]['transformation']) ) { From 29815e644e7dfaf9b4f6d1ed2b53206b02a71720 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 13:07:29 +0530 Subject: [PATCH 5/7] Browser transformation for some of the SHOW statements Signed-off-by: Madhura Jayaratne --- libraries/DisplayResults.class.php | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/libraries/DisplayResults.class.php b/libraries/DisplayResults.class.php index df1adf0ea8..3e674e0a78 100644 --- a/libraries/DisplayResults.class.php +++ b/libraries/DisplayResults.class.php @@ -2689,6 +2689,39 @@ class PMA_DisplayResults } } + // special browser transformation for some SHOW statements + if ($this->__get('is_show') + && ! $_SESSION['tmpval']['hide_transformation'] + ) { + preg_match( + '@^SHOW[[:space:]]+(VARIABLES|(FULL[[:space:]]+)?' + . 'PROCESSLIST|STATUS|TABLE|GRANTS|CREATE|LOGS|DATABASES|FIELDS' + . ')@i', + $this->__get('sql_query'), $which + ); + + if (isset($which[1])) { + $str = ' ' . strtoupper($which[1]); + $isShowProcessList = strpos($str, 'PROCESSLIST') > 0; + if ($isShowProcessList) { + $mimeMap['..Info'] = array( + 'mimetype' => 'Text_Plain', + 'transformation' => 'output/Text_Plain_Sql.class.php', + ); + } + + $isShowCreateTable = preg_match( + '@CREATE[[:space:]]+TABLE@i', $this->__get('sql_query') + ); + if ($isShowCreateTable) { + $mimeMap['..Create Table'] = array( + 'mimetype' => 'Text_Plain', + 'transformation' => 'output/Text_Plain_Sql.class.php', + ); + } + } + } + $this->__set('mime_map', $mimeMap); } From 078eaea9168987f6b328ccaf1e3f827319e1cc50 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 13:08:37 +0530 Subject: [PATCH 6/7] Add ChangeLog entry Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog b/ChangeLog index 7aacfb5f0a..0cbc9120ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ phpMyAdmin - ChangeLog + rfe #1582 SQL formatter + rfe #1597 Fast filter improvement: remove "x other results found" - bug #4720 No error message on Missing extension mbstring ++ rfe #801 Builtin transformations and relations 4.3.8.0 (not yet released) - bug Undefined constant PMA_DRIZZLE From 8b1f6eccd284b29d5c241bf4ef086f37c799b299 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 26 Jan 2015 14:07:50 +0530 Subject: [PATCH 7/7] Fix some failing tests Signed-off-by: Madhura Jayaratne --- test/classes/PMA_DisplayResults_test.php | 10 ++--- test/libraries/PMA_transformation_test.php | 43 ++++++++++++---------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/test/classes/PMA_DisplayResults_test.php b/test/classes/PMA_DisplayResults_test.php index 5830b0305a..bc87438ae9 100644 --- a/test/classes/PMA_DisplayResults_test.php +++ b/test/classes/PMA_DisplayResults_test.php @@ -1112,8 +1112,8 @@ class PMA_DisplayResults_Test extends PHPUnit_Framework_TestCase 'routine_type' => 'FUNCTION' ), 'routine_name', - 'db_routines.php?item_name=circumference&db=data&edit_' - . 'item=1&item_type=FUNCTION&server=0&lang=en' + 'db_routines.php?item_name=circumference&db=data' + . '&item_type=FUNCTION&server=0&lang=en' . '&collation_connection=utf-8' . '&token=token' ), @@ -1127,7 +1127,7 @@ class PMA_DisplayResults_Test extends PHPUnit_Framework_TestCase 'routine_type' => 'PROCEDURE' ), 'routine_name', - 'db_routines.php?item_name=area&db=data&edit_item=1' + 'db_routines.php?item_name=area&db=data' . '&item_type=PROCEDURE&server=0&lang=en' . '&collation_connection=utf-8' . '&token=token' @@ -1509,7 +1509,7 @@ class PMA_DisplayResults_Test extends PHPUnit_Framework_TestCase $meta, $url_params, null, - '31303031' + '1001' ), array( false, @@ -1638,7 +1638,7 @@ class PMA_DisplayResults_Test extends PHPUnit_Framework_TestCase 0, 'binary', '' - . '31303031' + . '1001' ), array( 'noblob', diff --git a/test/libraries/PMA_transformation_test.php b/test/libraries/PMA_transformation_test.php index 2096aea310..75ff77534b 100644 --- a/test/libraries/PMA_transformation_test.php +++ b/test/libraries/PMA_transformation_test.php @@ -99,6 +99,7 @@ class PMA_Transformation_Test extends PHPUnit_Framework_TestCase 'Image/JPEG' => 'Image/JPEG', 'Image/PNG' => 'Image/PNG', 'Text/Plain' => 'Text/Plain', + 'Text/Octetstream' => 'Text/Octetstream' ), 'transformation' => array ( 0 => 'Application/Octetstream: Download', @@ -106,16 +107,17 @@ class PMA_Transformation_Test extends PHPUnit_Framework_TestCase 2 => 'Image/JPEG: Inline', 3 => 'Image/JPEG: Link', 4 => 'Image/PNG: Inline', - 5 => 'Text/Plain: Bool2text', - 6 => 'Text/Plain: Dateformat', - 7 => 'Text/Plain: External', - 8 => 'Text/Plain: Formatted', - 9 => 'Text/Plain: Imagelink', - 10 => 'Text/Plain: Sql', - 11 => 'Text/Plain: Link', - 12 => 'Text/Plain: Longtoipv4', - 13 => 'Text/Plain: Preappend', - 14 => 'Text/Plain: Substring', + 5 => 'Text/Octetstream: Sql', + 6 => 'Text/Plain: Bool2text', + 7 => 'Text/Plain: Dateformat', + 8 => 'Text/Plain: External', + 9 => 'Text/Plain: Formatted', + 10 => 'Text/Plain: Imagelink', + 11 => 'Text/Plain: Sql', + 12 => 'Text/Plain: Link', + 13 => 'Text/Plain: Longtoipv4', + 14 => 'Text/Plain: Preappend', + 15 => 'Text/Plain: Substring', ), 'transformation_file' => array ( 0 => 'output/Application_Octetstream_Download.class.php', @@ -123,16 +125,17 @@ class PMA_Transformation_Test extends PHPUnit_Framework_TestCase 2 => 'output/Image_JPEG_Inline.class.php', 3 => 'output/Image_JPEG_Link.class.php', 4 => 'output/Image_PNG_Inline.class.php', - 5 => 'output/Text_Plain_Bool2text.class.php', - 6 => 'output/Text_Plain_Dateformat.class.php', - 7 => 'output/Text_Plain_External.class.php', - 8 => 'output/Text_Plain_Formatted.class.php', - 9 => 'output/Text_Plain_Imagelink.class.php', - 10 => 'output/Text_Plain_Sql.class.php', - 11 => 'Text_Plain_Link.class.php', - 12 => 'Text_Plain_Longtoipv4.class.php', - 13 => 'Text_Plain_Preappend.class.php', - 14 => 'Text_Plain_Substring.class.php', + 5 => 'output/Text_Octetstream_Sql.class.php', + 6 => 'output/Text_Plain_Bool2text.class.php', + 7 => 'output/Text_Plain_Dateformat.class.php', + 8 => 'output/Text_Plain_External.class.php', + 9 => 'output/Text_Plain_Formatted.class.php', + 10 => 'output/Text_Plain_Imagelink.class.php', + 11 => 'output/Text_Plain_Sql.class.php', + 12 => 'Text_Plain_Link.class.php', + 13 => 'Text_Plain_Longtoipv4.class.php', + 14 => 'Text_Plain_Preappend.class.php', + 15 => 'Text_Plain_Substring.class.php', ), 'input_transformation' => array( 'Image/JPEG: Upload',