From 241c15fba01832f2bfa7d0880db0bd7b047bc7ec Mon Sep 17 00:00:00 2001 From: Marc Delisle Date: Fri, 8 Feb 2008 18:55:08 +0000 Subject: [PATCH] bug #1799691 [export] "Propose table structure" and Export --- ChangeLog | 1 + libraries/display_tbl.lib.php | 9 +++++++-- libraries/sqlparser.lib.php | 10 +++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 43f52503f..338739825 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,6 +18,7 @@ $HeadURL: https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/trunk/phpMyA thanks to Tim Steiner - spam38 - bug [import] Do not verify a missing enclosing character for CSV, because files generated by Excel don't have any enclosing character +- bug #1799691 [export] "Propose table structure" and Export 2.11.4.0 (2008-01-12) - bug #1843428 [GUI] Space issue with DROP/DELETE/ALTER TABLE diff --git a/libraries/display_tbl.lib.php b/libraries/display_tbl.lib.php index e16fbf48e..a4229bfac 100644 --- a/libraries/display_tbl.lib.php +++ b/libraries/display_tbl.lib.php @@ -2087,7 +2087,11 @@ function PMA_displayResultsOperations($the_disp_mode, $analyzed_sql) { // (the url_query has extra parameters that won't be used to export) // (the single_table parameter is used in display_export.lib.php // to hide the SQL and the structure export dialogs) - if (isset($analyzed_sql[0]) && $analyzed_sql[0]['querytype'] == 'SELECT' && !isset($printview)) { + // If the parser found a PROCEDURE clause + // (most probably PROCEDURE ANALYSE()) it makes no sense to + // display the Export link). + + if (isset($analyzed_sql[0]) && $analyzed_sql[0]['querytype'] == 'SELECT' && !isset($printview) && ! isset($analyzed_sql[0]['queryflags']['procedure'])) { if (isset($analyzed_sql[0]['table_ref'][0]['table_true_name']) && !isset($analyzed_sql[0]['table_ref'][1]['table_true_name'])) { $single_table = '&single_table=true'; } else { @@ -2111,8 +2115,9 @@ function PMA_displayResultsOperations($the_disp_mode, $analyzed_sql) { * @todo detect privileges to create a view * (but see 2006-01-19 note in display_create_table.lib.php, * I think we cannot detect db-specific privileges reliably) + * Note: we don't display a Create view link if we found a PROCEDURE clause */ - if (PMA_MYSQL_INT_VERSION >= 50000) { + if (PMA_MYSQL_INT_VERSION >= 50000 && ! isset($analyzed_sql[0]['queryflags']['procedure'])) { if (!$header_shown) { echo $header; $header_shown = TRUE; diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index d03745d89..fe439c198 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -880,6 +880,7 @@ if (! defined('PMA_MINIMUM_COMMON')) { * ['queryflags']['union'] = 1; for a UNION * ['queryflags']['join'] = 1; for a JOIN * ['queryflags']['offset'] = 1; for the presence of OFFSET + * ['queryflags']['procedure'] = 1; for the presence of PROCEDURE * * query clauses * ------------- @@ -1440,6 +1441,7 @@ if (! defined('PMA_MINIMUM_COMMON')) { $in_having = FALSE; // true when we are inside the HAVING clause $in_select_expr = FALSE; // true when we are inside the select expr clause $in_where = FALSE; // true when we are inside the WHERE clause + $seen_limit = FALSE; // true if we have seen a LIMIT clause $in_limit = FALSE; // true when we are inside the LIMIT clause $after_limit = FALSE; // true when we are after the LIMIT clause $in_from = FALSE; // true when we are in the FROM clause @@ -1491,11 +1493,13 @@ if (! defined('PMA_MINIMUM_COMMON')) { if ($upper_data == 'LIMIT') { $section_before_limit = substr($arr['raw'], 0, $arr[$i]['pos'] - 5); $in_limit = TRUE; + $seen_limit = TRUE; $limit_clause = ''; $in_order_by = FALSE; // @todo maybe others to set FALSE } if ($upper_data == 'PROCEDURE') { + $subresult['queryflags']['procedure'] = 1; $in_limit = FALSE; $after_limit = TRUE; } @@ -1685,16 +1689,16 @@ if (! defined('PMA_MINIMUM_COMMON')) { } } - if ($in_limit) { + if ($in_limit) { if ($upper_data == 'OFFSET') { $limit_clause .= $sep; } - $limit_clause .= $arr[$i]['data']; + $limit_clause .= $arr[$i]['data']; if ($upper_data == 'LIMIT' || $upper_data == 'OFFSET') { $limit_clause .= $sep; } } - if ($after_limit) { + if ($after_limit && $seen_limit) { $section_after_limit .= $arr[$i]['data'] . $sep; }