diff --git a/libraries/parse_analyze.inc.php b/libraries/parse_analyze.inc.php index 2a0c465fea..eb7704efcb 100644 --- a/libraries/parse_analyze.inc.php +++ b/libraries/parse_analyze.inc.php @@ -74,6 +74,9 @@ $is_count = isset($analyzed_sql[0]['queryflags']['is_count']); // check for a real SELECT ... FROM $is_select = isset($analyzed_sql[0]['queryflags']['select_from']); +// the query contains a subquery +$is_subquery = isset($analyzed_sql[0]['queryflags']['is_subquery']); + // check for CALL // Since multiple query execution is anyway handled, // ignore the WHERE clause of the first sql statement @@ -105,7 +108,8 @@ $analyzed_sql_results = array( "is_func" => $is_func, "is_count" => $is_count, "is_select" => $is_select, - "is_procedure" => $is_procedure + "is_procedure" => $is_procedure, + "is_subquery" => $is_subquery ); diff --git a/libraries/sql.lib.php b/libraries/sql.lib.php index 7cdc44d64a..f3ee83de94 100644 --- a/libraries/sql.lib.php +++ b/libraries/sql.lib.php @@ -839,7 +839,7 @@ function PMA_isAppendLimitClause($analyzed_sql_results) if (($_SESSION['tmpval']['max_rows'] != 'all') && ! ($analyzed_sql_results['is_export'] || $analyzed_sql_results['is_analyse']) - && $select_from + && ($select_from || $analyzed_sql_results['is_subquery']) && ! isset($analyzed_sql_results['analyzed_sql'][0]['queryflags']['offset']) && empty($analyzed_sql_results['analyzed_sql'][0]['limit_clause']) ) { diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index 505e5091d9..00bdfc14f6 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -996,6 +996,7 @@ function PMA_SQP_analyze($arr) * |MIN|MAX|BIT_OR|BIT_AND * ['queryflags']['is_count'] = 1; for the presence of SELECT COUNT * ['queryflags']['is_procedure'] = 1; for the presence of CALL + * ['queryflags']['is_subquery'] = 1; contains a subquery * * query clauses * ------------- @@ -1213,6 +1214,7 @@ function PMA_SQP_analyze($arr) if ($number_of_brackets > 0) { $in_subquery = true; $seen_subquery = true; + $subresult['queryflags']['is_subquery'] = 1; // this is a subquery so do not analyze inside it continue; }