diff --git a/libraries/rte/rte_routines.lib.php b/libraries/rte/rte_routines.lib.php index b07b598cfd..89d0bddb84 100644 --- a/libraries/rte/rte_routines.lib.php +++ b/libraries/rte/rte_routines.lib.php @@ -1253,34 +1253,26 @@ function PMA_RTN_handleExecute() . "(" . implode(', ', $args) . ") " . "AS " . $common_functions->backquote($routine['item_name']) . ";\n"; } - // Execute the queries - $affected = 0; - $result = null; + + // Get all the queries as one SQL statement + $multiple_query = implode("", $queries); + $outcome = true; - foreach ($queries as $query) { - $resource = PMA_DBI_try_query($query); - if ($resource === false) { - $outcome = false; - break; - } - while (true) { - if (! PMA_DBI_more_results()) { - break; - } - PMA_DBI_next_result(); - } - if (substr($query, 0, 6) == 'SELECT') { - $result = $resource; - } else if (substr($query, 0, 4) == 'CALL') { - $result = $resource ? $resource : $result; - $affected = PMA_DBI_affected_rows() - PMA_DBI_num_rows($resource); - } + $affected = 0; + + // Execute query + if (! PMA_DBI_try_multi_query($multiple_query)) { + $outcome = false; } + // Generate output if ($outcome) { $message = __('Your SQL query has been executed successfully'); if ($routine['item_type'] == 'PROCEDURE') { $message .= '
'; + + // TODO : message need to be modified according to the + // output from the routine $message .= sprintf( _ngettext( '%d row affected by the last statement inside the procedure', @@ -1295,36 +1287,70 @@ function PMA_RTN_handleExecute() $output = ''; $output .= PMA_SQP_formatHtml(PMA_SQP_parse(implode($queries))); $output .= ''; + // Display results - if ($result) { - $output .= "
"; - $output .= sprintf( - __('Execution results of routine %s'), - $common_functions->backquote(htmlspecialchars($routine['item_name'])) - ); - $output .= ""; - $output .= ""; - foreach (PMA_DBI_get_fields_meta($result) as $key => $field) { - $output .= ""; - } - $output .= ""; - // Stored routines can only ever return ONE ROW. - $data = PMA_DBI_fetch_single_row($result); - foreach ($data as $key => $value) { - if ($value === null) { - $value = 'NULL'; - } else { - $value = htmlspecialchars($value); + $output .= "
"; + $output .= sprintf( + __('Execution results of routine %s'), + $common_functions->backquote(htmlspecialchars($routine['item_name'])) + ); + $output .= ""; + + $num_of_rusults_set_to_display = 0; + + do { + + $result = PMA_DBI_store_result(); + $num_rows = PMA_DBI_num_rows($result); + + if (($result !== false) && ($num_rows > 0)) { + + $output .= "
"; - $output .= htmlspecialchars($field->name); - $output .= "
"; + foreach (PMA_DBI_get_fields_meta($result) as $key => $field) { + $output .= ""; + } + $output .= ""; + + $color_class = 'odd'; + + while ($row = PMA_DBI_fetch_assoc($result)) { + $output .= ""; + foreach ($row as $key => $value) { + if ($value === null) { + $value = 'NULL'; + } else { + $value = htmlspecialchars($value); + } + $output .= ""; + } + $output .= ""; + $color_class = ($color_class == 'odd') ? 'even' : 'odd'; } - $output .= ""; + + $output .= "
"; + $output .= htmlspecialchars($field->name); + $output .= "
" . $value . "
" . $value . "
"; + $num_of_rusults_set_to_display++; + } - $output .= "
"; - } else { + + if (! PMA_DBI_more_results()) { + break; + } + + $output .= "
"; + + PMA_DBI_free_result($result); + + } while (PMA_DBI_next_result()); + + $output .= ""; + + if ($num_of_rusults_set_to_display == 0) { $notice = __('MySQL returned an empty result set (i.e. zero rows).'); $output .= PMA_message::notice($notice)->getDisplay(); } + } else { $output = ''; $message = PMA_message::error( @@ -1336,6 +1362,7 @@ function PMA_RTN_handleExecute() . __('MySQL said: ') . PMA_DBI_getError(null) ); } + // Print/send output if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance();