Parse query before inserting LIMIT to know where to place it.

This commit is contained in:
Michal Čihař
2005-10-08 20:10:01 +00:00
parent 885cb0891b
commit 6429a239da
2 changed files with 16 additions and 10 deletions

View File

@@ -68,6 +68,8 @@ $Source$
string at the end. string at the end.
* import.php: Reenable LIMIT appending (bug #1318624). * import.php: Reenable LIMIT appending (bug #1318624).
* sql.php: Fix appending LIMIT when there are comments. * sql.php: Fix appending LIMIT when there are comments.
* libraries/common.lib.php: Parse query before inserting LIMIT to know
where to place it.
2005-10-07 Marc Delisle <lem9@users.sourceforge.net> 2005-10-07 Marc Delisle <lem9@users.sourceforge.net>
* libraries/check_user_privileges.lib.php: bug #1313821, dbname containing a * libraries/check_user_privileges.lib.php: bug #1313821, dbname containing a

View File

@@ -1847,6 +1847,16 @@ if (typeof(document.getElementById) != 'undefined'
$query_base = $local_query; $query_base = $local_query;
} }
// Parse SQL if needed
if (isset($GLOBALS['parsed_sql']) && $query_base == $GLOBALS['parsed_sql']['raw']) {
$parsed_sql = $GLOBALS['parsed_sql'];
} else {
$parsed_sql = PMA_SQP_parse($query_base);
}
// Analyze it
$analyzed_display_query = PMA_SQP_analyze($parsed_sql);
// Here we append the LIMIT added for navigation, to // Here we append the LIMIT added for navigation, to
// enable its display. Adding it higher in the code // enable its display. Adding it higher in the code
// to $local_query would create a problem when // to $local_query would create a problem when
@@ -1857,11 +1867,11 @@ if (typeof(document.getElementById) != 'undefined'
// FIXME: what would be the best to do when someone // FIXME: what would be the best to do when someone
// hits Refresh: use the current LIMITs ? // hits Refresh: use the current LIMITs ?
// TODO: use the parser instead of preg_match() if (isset($analyzed_display_query[0]['queryflags']['select_from'])
if (preg_match('@^SELECT[[:space:]]+@i', $query_base)
&& isset($GLOBALS['sql_limit_to_append'])) { && isset($GLOBALS['sql_limit_to_append'])) {
$query_base .= $GLOBALS['sql_limit_to_append']; $query_base = $analyzed_display_query[0]['section_before_limit'] . "\n" . $GLOBALS['sql_limit_to_append'] . $analyzed_display_query[0]['section_after_limit'];
// Need to reparse query
$parsed_sql = PMA_SQP_parse($query_base);
} }
if (!empty($GLOBALS['show_as_php'])) { if (!empty($GLOBALS['show_as_php'])) {
@@ -1869,12 +1879,6 @@ if (typeof(document.getElementById) != 'undefined'
} else if (!empty($GLOBALS['validatequery'])) { } else if (!empty($GLOBALS['validatequery'])) {
$query_base = PMA_validateSQL($query_base); $query_base = PMA_validateSQL($query_base);
} else { } else {
// avoid reparsing query:
if (isset($GLOBALS['parsed_sql']) && $query_base == $GLOBALS['parsed_sql']['raw']) {
$parsed_sql = $GLOBALS['parsed_sql'];
} else {
$parsed_sql = PMA_SQP_parse($query_base);
}
$query_base = PMA_formatSql($parsed_sql, $query_base); $query_base = PMA_formatSql($parsed_sql, $query_base);
} }