/**
  * Does the actual work of each specific transformations plugin.
  *
  * @param string $buffer  text to be transformed
  * @param array  $options transformation options
  * @param string $meta    meta information
  *
  * @return string
  */
 public function applyTransformation($buffer, $options = array(), $meta = '')
 {
     // see PMA_highlightSQL()
     $result = PMA_Util::formatSql($buffer);
     // Need to clear error state not to break subsequent queries display.
     PMA_SQP_resetError();
     return $result;
 }
/**
 * Handles requests for executing a routine
 *
 * @return void
 */
function PMA_RTN_handleExecute()
{
    global $_GET, $_POST, $_REQUEST, $GLOBALS, $db;
    /**
     * Handle all user requests other than the default of listing routines
     */
    if (!empty($_REQUEST['execute_routine']) && !empty($_REQUEST['item_name'])) {
        // Build the queries
        $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], $_REQUEST['item_type'], false);
        if ($routine === false) {
            $message = __('Error in processing request:') . ' ';
            $message .= sprintf(PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db)));
            $message = PMA_message::error($message);
            if ($GLOBALS['is_ajax_request']) {
                $response = PMA_Response::getInstance();
                $response->isSuccess(false);
                $response->addJSON('message', $message);
                exit;
            } else {
                echo $message->getDisplay();
                unset($_POST);
            }
        }
        $queries = array();
        $end_query = array();
        $args = array();
        $all_functions = $GLOBALS['PMA_Types']->getAllFunctions();
        for ($i = 0; $i < $routine['item_num_params']; $i++) {
            if (isset($_REQUEST['params'][$routine['item_param_name'][$i]])) {
                $value = $_REQUEST['params'][$routine['item_param_name'][$i]];
                if (is_array($value)) {
                    // is SET type
                    $value = implode(',', $value);
                }
                $value = PMA_Util::sqlAddSlashes($value);
                if (!empty($_REQUEST['funcs'][$routine['item_param_name'][$i]]) && in_array($_REQUEST['funcs'][$routine['item_param_name'][$i]], $all_functions)) {
                    $queries[] = "SET @p{$i}=" . $_REQUEST['funcs'][$routine['item_param_name'][$i]] . "('{$value}');\n";
                } else {
                    $queries[] = "SET @p{$i}='{$value}';\n";
                }
                $args[] = "@p{$i}";
            } else {
                $args[] = "@p{$i}";
            }
            if ($routine['item_type'] == 'PROCEDURE') {
                if ($routine['item_param_dir'][$i] == 'OUT' || $routine['item_param_dir'][$i] == 'INOUT') {
                    $end_query[] = "@p{$i} AS " . PMA_Util::backquote($routine['item_param_name'][$i]);
                }
            }
        }
        if ($routine['item_type'] == 'PROCEDURE') {
            $queries[] = "CALL " . PMA_Util::backquote($routine['item_name']) . "(" . implode(', ', $args) . ");\n";
            if (count($end_query)) {
                $queries[] = "SELECT " . implode(', ', $end_query) . ";\n";
            }
        } else {
            $queries[] = "SELECT " . PMA_Util::backquote($routine['item_name']) . "(" . implode(', ', $args) . ") " . "AS " . PMA_Util::backquote($routine['item_name']) . ";\n";
        }
        // Get all the queries as one SQL statement
        $multiple_query = implode("", $queries);
        $outcome = true;
        $affected = 0;
        // Execute query
        if (!$GLOBALS['dbi']->tryMultiQuery($multiple_query)) {
            $outcome = false;
        }
        // Generate output
        if ($outcome) {
            // Pass the SQL queries through the "pretty printer"
            $output = PMA_Util::formatSql(implode($queries, "\n"));
            // Display results
            $output .= "<fieldset><legend>";
            $output .= sprintf(__('Execution results of routine %s'), PMA_Util::backquote(htmlspecialchars($routine['item_name'])));
            $output .= "</legend>";
            $nbResultsetToDisplay = 0;
            do {
                $result = $GLOBALS['dbi']->storeResult();
                $num_rows = $GLOBALS['dbi']->numRows($result);
                if ($result !== false && $num_rows > 0) {
                    $output .= "<table><tr>";
                    foreach ($GLOBALS['dbi']->getFieldsMeta($result) as $field) {
                        $output .= "<th>";
                        $output .= htmlspecialchars($field->name);
                        $output .= "</th>";
                    }
                    $output .= "</tr>";
                    $color_class = 'odd';
                    while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
                        $output .= "<tr>" . browseRow($row, $color_class) . "</tr>";
                        $color_class = $color_class == 'odd' ? 'even' : 'odd';
                    }
                    $output .= "</table>";
                    $nbResultsetToDisplay++;
                    $affected = $num_rows;
                }
                if (!$GLOBALS['dbi']->moreResults()) {
                    break;
                }
                $output .= "<br/>";
                $GLOBALS['dbi']->freeResult($result);
            } while ($GLOBALS['dbi']->nextResult());
            $output .= "</fieldset>";
            $message = __('Your SQL query has been executed successfully.');
            if ($routine['item_type'] == 'PROCEDURE') {
                $message .= '<br />';
                // 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.', '%d rows affected by the last statement inside the ' . 'procedure.', $affected), $affected);
            }
            $message = PMA_message::success($message);
            if ($nbResultsetToDisplay == 0) {
                $notice = __('MySQL returned an empty result set (i.e. zero rows).');
                $output .= PMA_message::notice($notice)->getDisplay();
            }
        } else {
            $output = '';
            $message = PMA_message::error(sprintf(__('The following query has failed: "%s"'), htmlspecialchars($multiple_query)) . '<br /><br />' . __('MySQL said: ') . $GLOBALS['dbi']->getError(null));
        }
        // Print/send output
        if ($GLOBALS['is_ajax_request']) {
            $response = PMA_Response::getInstance();
            $response->isSuccess($message->isSuccess());
            $response->addJSON('message', $message->getDisplay() . $output);
            $response->addJSON('dialog', false);
            exit;
        } else {
            echo $message->getDisplay() . $output;
            if ($message->isError()) {
                // At least one query has failed, so shouldn't
                // execute any more queries, so we quit.
                exit;
            }
            unset($_POST);
            // Now deliberately fall through to displaying the routines list
        }
        return;
    } else {
        if (!empty($_GET['execute_dialog']) && !empty($_GET['item_name'])) {
            /**
             * Display the execute form for a routine.
             */
            $routine = PMA_RTN_getDataFromName($_GET['item_name'], $_GET['item_type'], true);
            if ($routine !== false) {
                $form = PMA_RTN_getExecuteForm($routine);
                if ($GLOBALS['is_ajax_request'] == true) {
                    $title = __("Execute routine") . " " . PMA_Util::backquote(htmlentities($_GET['item_name'], ENT_QUOTES));
                    $response = PMA_Response::getInstance();
                    $response->addJSON('message', $form);
                    $response->addJSON('title', $title);
                    $response->addJSON('dialog', true);
                } else {
                    echo "\n\n<h2>" . __("Execute routine") . "</h2>\n\n";
                    echo $form;
                }
                exit;
            } else {
                if ($GLOBALS['is_ajax_request'] == true) {
                    $message = __('Error in processing request:') . ' ';
                    $message .= sprintf(PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db)));
                    $message = PMA_message::error($message);
                    $response = PMA_Response::getInstance();
                    $response->isSuccess(false);
                    $response->addJSON('message', $message);
                    exit;
                }
            }
        }
    }
}
Ejemplo n.º 3
0
/**
 * Function to get html for one data manipulation statement
 *
 * @param array  $entry              entry
 * @param array  $filter_users       filter users
 * @param int    $filter_ts_from     filter time stamp from
 * @param int    $filter_ts_to       filter time stamp to
 * @param string $style              style
 * @param int    $line_number        line number
 * @param array  $url_params         url parameters
 * @param int    $offset             line number offset
 * @param string $drop_image_or_text drop image or text
 * @param string $delete_param       parameter for delete
 *
 * @return string
 */
function PMA_getHtmlForOneStatement($entry, $filter_users, $filter_ts_from, $filter_ts_to, $style, $line_number, $url_params, $offset, $drop_image_or_text, $delete_param)
{
    $statement = PMA_Util::formatSql($entry['statement'], true);
    $timestamp = strtotime($entry['date']);
    $filtered_user = in_array($entry['username'], $filter_users);
    $html = null;
    if ($timestamp >= $filter_ts_from && $timestamp <= $filter_ts_to && (in_array('*', $filter_users) || $filtered_user)) {
        $html = '<tr class="noclick ' . $style . '">';
        $html .= '<td class="right"><small>' . $line_number . '</small></td>';
        $html .= '<td><small>' . htmlspecialchars($entry['date']) . '</small></td>';
        $html .= '<td><small>' . htmlspecialchars($entry['username']) . '</small></td>';
        $html .= '<td>' . $statement . '</td>';
        $html .= '<td class="nowrap"><a  class="delete_entry_anchor ajax"' . ' href="tbl_tracking.php' . PMA_URL_getCommon($url_params + array('report' => 'true', 'version' => $_REQUEST['version'], $delete_param => $line_number - $offset)) . '">' . $drop_image_or_text . '</a></td>';
        $html .= '</tr>';
    }
    return $html;
}
Ejemplo n.º 4
0
/**
 * Returns the html for all binary log items.
 *
 * @param resource $result         MySQL Query result
 * @param bool     $dontlimitchars Whether limit chars
 *
 * @return string
 */
function PMA_getAllLogItemInfo($result, $dontlimitchars)
{
    $html = "";
    $odd_row = true;
    while ($value = $GLOBALS['dbi']->fetchAssoc($result)) {
        $html .= '<tr class="noclick ' . ($odd_row ? 'odd' : 'even') . '">' . '<td>&nbsp;' . $value['Log_name'] . '&nbsp;</td>' . '<td class="right">&nbsp;' . $value['Pos'] . '&nbsp;</td>' . '<td>&nbsp;' . $value['Event_type'] . '&nbsp;</td>' . '<td class="right">&nbsp;' . $value['Server_id'] . '&nbsp;</td>' . '<td class="right">&nbsp;' . (isset($value['Orig_log_pos']) ? $value['Orig_log_pos'] : $value['End_log_pos']) . '&nbsp;</td>' . '<td>&nbsp;' . PMA_Util::formatSql($value['Info'], !$dontlimitchars) . '&nbsp;</td></tr>';
        $odd_row = !$odd_row;
    }
    return $html;
}
Ejemplo n.º 5
0
 /**
  * Get the values for one data row
  *
  * @param integer &$dt_result         the link id associated to the query
  *                                    which results have to be displayed
  * @param array   $row                current row data
  * @param integer $row_no             the index of current row
  * @param array   $col_order          the column order
  *                                    false when a property not found
  * @param array   $map                the list of relations
  * @param string  $grid_edit_class    the class for all editable columns
  * @param boolean $col_visib          column is visible(false)
  *        array                       column isn't visible(string array)
  * @param string  $where_clause       where clause
  * @param string  $url_sql_query      the analyzed sql query
  * @param array   $analyzed_sql       the analyzed query
  * @param boolean $directionCondition the directional condition
  *
  * @return  string $row_values_html  html content
  *
  * @access  private
  *
  * @see     _getTableBody()
  */
 private function _getRowValues(&$dt_result, $row, $row_no, $col_order, $map, $grid_edit_class, $col_visib, $where_clause, $url_sql_query, $analyzed_sql, $directionCondition)
 {
     $row_values_html = '';
     // Following variable are needed for use in isset/empty or
     // use with array indexes/safe use in foreach
     $sql_query = $this->__get('sql_query');
     $fields_meta = $this->__get('fields_meta');
     $highlight_columns = $this->__get('highlight_columns');
     $mime_map = $this->__get('mime_map');
     $row_info = $this->_getRowInfoForSpecialLinks($row, $col_order);
     for ($currentColumn = 0; $currentColumn < $this->__get('fields_cnt'); ++$currentColumn) {
         // assign $i with appropriate column order
         $i = $col_order ? $col_order[$currentColumn] : $currentColumn;
         $meta = $fields_meta[$i];
         $not_null_class = $meta->not_null ? 'not_null' : '';
         $relation_class = isset($map[$meta->name]) ? 'relation' : '';
         $hide_class = $col_visib && !$col_visib[$currentColumn] && $_SESSION['tmpval']['disp_direction'] != self::DISP_DIR_VERTICAL ? 'hide' : '';
         // handle datetime-related class, for grid editing
         $field_type_class = $this->_getClassForDateTimeRelatedFields($meta->type);
         $is_field_truncated = false;
         // combine all the classes applicable to this column's value
         $class = $this->_getClassesForColumn($grid_edit_class, $not_null_class, $relation_class, $hide_class, $field_type_class, $row_no);
         //  See if this column should get highlight because it's used in the
         //  where-query.
         $condition_field = isset($highlight_columns) && (isset($highlight_columns[$meta->name]) || isset($highlight_columns[PMA_Util::backquote($meta->name)])) ? true : false;
         // Wrap MIME-transformations. [MIME]
         $default_function = '_mimeDefaultFunction';
         // default_function
         $transformation_plugin = $default_function;
         $transform_options = array();
         if ($GLOBALS['cfgRelation']['mimework'] && $GLOBALS['cfg']['BrowseMIME']) {
             if (isset($mime_map[$meta->name]['mimetype']) && isset($mime_map[$meta->name]['transformation']) && !empty($mime_map[$meta->name]['transformation'])) {
                 $file = $mime_map[$meta->name]['transformation'];
                 $include_file = 'libraries/plugins/transformations/' . $file;
                 if (file_exists($include_file)) {
                     include_once $include_file;
                     $class_name = str_replace('.class.php', '', $file);
                     // todo add $plugin_manager
                     $plugin_manager = null;
                     $transformation_plugin = new $class_name($plugin_manager);
                     $transform_options = PMA_Transformation_getOptions(isset($mime_map[$meta->name]['transformation_options']) ? $mime_map[$meta->name]['transformation_options'] : '');
                     $meta->mimetype = str_replace('_', '/', $mime_map[$meta->name]['mimetype']);
                 }
                 // end if file_exists
             }
             // 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);
         if (!empty($sql_query)) {
             $_url_params['sql_query'] = $url_sql_query;
         }
         $transform_options['wrapper_link'] = PMA_URL_getCommon($_url_params);
         $vertical_display = $this->__get('vertical_display');
         // Check whether the field needs to display with syntax highlighting
         if (!empty($this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)]) && trim($row[$i]) != '') {
             $row[$i] = PMA_Util::formatSql($row[$i]);
             include_once $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][0];
             $transformation_plugin = new $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][1](null);
             $transform_options = PMA_Transformation_getOptions(isset($mime_map[$meta->name]['transformation_options']) ? $mime_map[$meta->name]['transformation_options'] : '');
             $meta->mimetype = str_replace('_', '/', $this->transformation_info[strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)][2]);
         }
         // Check for the predefined fields need to show as link in schemas
         include_once 'libraries/special_schema_links.lib.php';
         if (isset($GLOBALS['special_schema_links']) && !empty($GLOBALS['special_schema_links'][strtolower($this->__get('db'))][strtolower($this->__get('table'))][strtolower($meta->name)])) {
             $linking_url = $this->_getSpecialLinkUrl($row[$i], $row_info, strtolower($meta->name));
             include_once "libraries/plugins/transformations/Text_Plain_Link.class.php";
             $transformation_plugin = new Text_Plain_Link(null);
             $transform_options = array(0 => $linking_url, 2 => true);
             $meta->mimetype = str_replace('_', '/', 'Text/Plain');
         }
         if ($meta->numeric == 1) {
             // n u m e r i c
             $vertical_display['data'][$row_no][$i] = $this->_getDataCellForNumericColumns($row[$i], $class, $condition_field, $meta, $map, $is_field_truncated, $analyzed_sql, $transformation_plugin, $default_function, $transform_options);
         } elseif (stristr($meta->type, self::BLOB_FIELD)) {
             //  b l o b
             // PMA_mysql_fetch_fields returns BLOB in place of
             // TEXT fields type so we have to ensure it's really a BLOB
             $field_flags = $GLOBALS['dbi']->fieldFlags($dt_result, $i);
             $vertical_display['data'][$row_no][$i] = $this->_getDataCellForBlobColumns($row[$i], $class, $meta, $_url_params, $field_flags, $transformation_plugin, $default_function, $transform_options, $condition_field, $is_field_truncated);
         } elseif ($meta->type == self::GEOMETRY_FIELD) {
             // g e o m e t r y
             // Remove 'grid_edit' from $class as we do not allow to
             // inline-edit geometry data.
             $class = str_replace('grid_edit', '', $class);
             $vertical_display['data'][$row_no][$i] = $this->_getDataCellForGeometryColumns($row[$i], $class, $meta, $map, $_url_params, $condition_field, $transformation_plugin, $default_function, $transform_options, $is_field_truncated, $analyzed_sql);
         } else {
             // n o t   n u m e r i c   a n d   n o t   B L O B
             $vertical_display['data'][$row_no][$i] = $this->_getDataCellForNonNumericAndNonBlobColumns($row[$i], $class, $meta, $map, $_url_params, $condition_field, $transformation_plugin, $default_function, $transform_options, $is_field_truncated, $analyzed_sql, $dt_result, $i);
         }
         // output stored cell
         if ($directionCondition) {
             $row_values_html .= $vertical_display['data'][$row_no][$i];
         }
         if (isset($vertical_display['rowdata'][$i][$row_no])) {
             $vertical_display['rowdata'][$i][$row_no] .= $vertical_display['data'][$row_no][$i];
         } else {
             $vertical_display['rowdata'][$i][$row_no] = $vertical_display['data'][$row_no][$i];
         }
         $this->__set('vertical_display', $vertical_display);
     }
     // end for
     return $row_values_html;
 }
Ejemplo n.º 6
0
/**
 * Displays SQL query before executing.
 *
 * @param array|string $query_data Array containing queries or query itself
 *
 * @return void
 */
function PMA_previewSQL($query_data)
{
    $retval = '<div class="preview_sql">';
    if (empty($query_data)) {
        $retval .= __('No change');
    } elseif (is_array($query_data)) {
        foreach ($query_data as $query) {
            $retval .= PMA_Util::formatSql($query);
        }
    } else {
        $retval .= PMA_Util::formatSql($query_data);
    }
    $retval .= '</div>';
    $response = PMA_Response::getInstance();
    $response->addJSON('sql_data', $retval);
    exit;
}
Ejemplo n.º 7
0
/**
 * Function to get html for a data definition statement in schema snapshot
 *
 * @param array  $entry              entry
 * @param array  $filter_users       filter users
 * @param int    $filter_ts_from     filter time stamp from
 * @param int    $filter_ts_to       filter time stamp to
 * @param string $style              style
 * @param int    $i                  column number
 * @param array  $url_params         url parameters
 * @param string $drop_image_or_text drop image or text
 *
 * @return string
 */
function PMA_getHtmlForDataDefinitionStatement($entry, $filter_users, $filter_ts_from, $filter_ts_to, $style, $i, $url_params, $drop_image_or_text)
{
    $statement = PMA_Util::formatSql($entry['statement'], true);
    $timestamp = strtotime($entry['date']);
    $filtered_user = in_array($entry['username'], $filter_users);
    $html = null;
    if ($timestamp >= $filter_ts_from && $timestamp <= $filter_ts_to && (in_array('*', $filter_users) || $filtered_user)) {
        $html = '<tr class="noclick ' . $style . '">';
        $html .= '<td><small>' . $i . '</small></td>';
        $html .= '<td><small>' . htmlspecialchars($entry['date']) . '</small></td>';
        $html .= '<td><small>' . htmlspecialchars($entry['username']) . '</small></td>';
        $html .= '<td>' . $statement . '</td>';
        $html .= '<td class="nowrap"><a href="tbl_tracking.php' . PMA_URL_getCommon($url_params + array('report' => 'true', 'version' => $_REQUEST['version'], 'delete_ddlog' => $i - 1)) . '">' . $drop_image_or_text . '</a></td>';
        $html .= '</tr>';
    }
    return $html;
}
/**
 * Prints Every Item of Server Process
 *
 * @param Array $process       data of Every Item of Server Process
 * @param bool  $odd_row       display odd row or not
 * @param bool  $show_full_sql show full sql or not
 *
 * @return string
 */
function PMA_getHtmlForServerProcessItem($process, $odd_row, $show_full_sql)
{
    // Array keys need to modify due to the way it has used
    // to display column values
    if (!empty($_REQUEST['order_by_field']) && !empty($_REQUEST['sort_order'])) {
        foreach (array_keys($process) as $key) {
            $new_key = ucfirst(mb_strtolower($key));
            if ($new_key !== $key) {
                $process[$new_key] = $process[$key];
                unset($process[$key]);
            }
        }
    }
    $url_params = array('kill' => $process['Id'], 'ajax_request' => true);
    $kill_process = 'server_status_processes.php' . PMA_URL_getCommon($url_params);
    $retval = '<tr class="' . ($odd_row ? 'odd' : 'even') . '">';
    $retval .= '<td><a class="ajax kill_process" href="' . $kill_process . '">' . __('Kill') . '</a></td>';
    $retval .= '<td class="value">' . $process['Id'] . '</td>';
    $retval .= '<td>' . htmlspecialchars($process['User']) . '</td>';
    $retval .= '<td>' . htmlspecialchars($process['Host']) . '</td>';
    $retval .= '<td>' . (!isset($process['db']) || !mb_strlen($process['db']) ? '<i>' . __('None') . '</i>' : htmlspecialchars($process['db'])) . '</td>';
    $retval .= '<td>' . htmlspecialchars($process['Command']) . '</td>';
    $retval .= '<td class="value">' . $process['Time'] . '</td>';
    $processStatusStr = empty($process['State']) ? '---' : $process['State'];
    $retval .= '<td>' . $processStatusStr . '</td>';
    $retval .= '<td>';
    if (empty($process['Info'])) {
        $retval .= '---';
    } else {
        $retval .= PMA_Util::formatSql($process['Info'], !$show_full_sql);
    }
    $retval .= '</td>';
    $retval .= '</tr>';
    return $retval;
}
Ejemplo n.º 9
0
/**
 * Find the matching rows for UPDATE/DELETE query.
 *
 * @param array $analyzed_sql_results Analyzed SQL results from parser.
 *
 * @return mixed
 */
function PMA_getMatchedRows($analyzed_sql_results = array())
{
    // Get the query type.
    $query_type = isset($analyzed_sql_results['analyzed_sql'][0]['querytype']) ? $analyzed_sql_results['analyzed_sql'][0]['querytype'] : '';
    $matched_row_query = '';
    if ($query_type == 'DELETE') {
        $matched_row_query = PMA_getSimulatedDeleteQuery($analyzed_sql_results);
    } else {
        if ($query_type == 'UPDATE') {
            $matched_row_query = PMA_getSimulatedUpdateQuery($analyzed_sql_results);
        }
    }
    // Execute the query and get the number of matched rows.
    $matched_rows = PMA_executeMatchedRowQuery($matched_row_query);
    // URL to matched rows.
    $_url_params = array('db' => $GLOBALS['db'], 'sql_query' => $matched_row_query);
    $matched_rows_url = 'sql.php' . PMA_URL_getCommon($_url_params);
    return array('sql_query' => PMA_Util::formatSql($analyzed_sql_results['parsed_sql']['raw']), 'matched_rows' => $matched_rows, 'matched_rows_url' => $matched_rows_url);
}
Ejemplo n.º 10
0
/**
 * Find the matching rows for UPDATE/DELETE query.
 *
 * @param array $analyzed_sql_results Analyzed SQL results from parser.
 *
 * @return mixed
 */
function PMA_getMatchedRows($analyzed_sql_results = array())
{
    $statement = $analyzed_sql_results['statement'];
    $matched_row_query = '';
    if ($statement instanceof SqlParser\Statements\DeleteStatement) {
        $matched_row_query = PMA_getSimulatedDeleteQuery($analyzed_sql_results);
    } elseif ($statement instanceof SqlParser\Statements\UpdateStatement) {
        $matched_row_query = PMA_getSimulatedUpdateQuery($analyzed_sql_results);
    }
    // Execute the query and get the number of matched rows.
    $matched_rows = PMA_executeMatchedRowQuery($matched_row_query);
    // URL to matched rows.
    $_url_params = array('db' => $GLOBALS['db'], 'sql_query' => $matched_row_query);
    $matched_rows_url = 'sql.php' . PMA_URL_getCommon($_url_params);
    return array('sql_query' => PMA_Util::formatSql($analyzed_sql_results['query']), 'matched_rows' => $matched_rows, 'matched_rows_url' => $matched_rows_url);
}
Ejemplo n.º 11
0
        echo '<th>' . __('Data manipulation statement') . '</th>';
        echo '<th>' . __('Delete') . '</th>';
        echo '</tr>';
        echo '</thead>';
        echo '<tbody>';

        $style = 'odd';
        foreach ($data['dmlog'] as $entry) {
            if (strlen($entry['statement']) > $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) {
                $statement = substr(
                    $entry['statement'],
                    0,
                    $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']
                ) . '[...]';
            } else {
                $statement  = PMA_Util::formatSql(PMA_SQP_parse($entry['statement']));
            }
            $timestamp = strtotime($entry['date']);

            if ($timestamp >= $filter_ts_from
                && $timestamp <= $filter_ts_to
                && (in_array('*', $filter_users) || in_array($entry['username'], $filter_users))
            ) {
                echo '<tr class="noclick ' . $style . '">';
                echo '<td><small>' . $i . '</small></td>';
                echo '<td><small>' . htmlspecialchars($entry['date']) . '</small></td>';
                echo '<td><small>' . htmlspecialchars($entry['username']) . '</small></td>';
                echo '<td>' . $statement . '</td>';
                echo '<td class="nowrap"><a href="tbl_tracking.php?' . $url_query
                    . '&amp;report=true&amp;version=' . $version['version']
                    . '&amp;delete_dmlog=' . ($i - $ddlog_count) . '">'
 /**
  * Tests simulated UPDATE/DELETE query.
  *
  * @param string $sql_query       SQL query
  * @param string $simulated_query Simulated query
  *
  * @return void
  */
 function simulatedQueryTest($sql_query, $simulated_query)
 {
     $parsed_sql = PMA_SQP_parse($sql_query);
     $analyzed_sql = PMA_SQP_analyze($parsed_sql);
     $analyzed_sql_results = array('parsed_sql' => $parsed_sql, 'analyzed_sql' => $analyzed_sql);
     $simulated_data = PMA_getMatchedRows($analyzed_sql_results);
     // URL to matched rows.
     $_url_params = array('db' => 'PMA', 'sql_query' => $simulated_query);
     $matched_rows_url = 'sql.php' . PMA_URL_getCommon($_url_params);
     $this->assertEquals(array('sql_query' => PMA_Util::formatSql($analyzed_sql_results['parsed_sql']['raw']), 'matched_rows' => 2, 'matched_rows_url' => $matched_rows_url), $simulated_data);
 }
Ejemplo n.º 13
0
 /**
  * Tests simulated UPDATE/DELETE query.
  *
  * @param string $sql_query       SQL query
  * @param string $simulated_query Simulated query
  *
  * @return void
  */
 function simulatedQueryTest($sql_query, $simulated_query)
 {
     $parser = new SqlParser\Parser($sql_query);
     $analyzed_sql_results = array('query' => $sql_query, 'parser' => $parser, 'statement' => $parser->statements[0]);
     $simulated_data = PMA_getMatchedRows($analyzed_sql_results);
     // URL to matched rows.
     $_url_params = array('db' => 'PMA', 'sql_query' => $simulated_query);
     $matched_rows_url = 'sql.php' . PMA_URL_getCommon($_url_params);
     $this->assertEquals(array('sql_query' => PMA_Util::formatSql($analyzed_sql_results['query']), 'matched_rows' => 2, 'matched_rows_url' => $matched_rows_url), $simulated_data);
 }
Ejemplo n.º 14
0
 function testFormatSQLError()
 {
     global $SQP_errorString;
     $SQP_errorString = true;
     $sql = array("raw" => "& \" < >");
     $this->assertEquals(
         "&amp; &quot; &lt; &gt;",
         PMA_Util::formatSql($sql)
     );
     $SQP_errorString = false;
 }
 /**
  * Test for formatSql
  *
  * @return void
  */
 function testFormatSQLTruncate()
 {
     $GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 6;
     $this->assertEquals('<code class="sql"><pre>' . "\n" . 'SELECT[...]' . "\n" . '</pre></code>', PMA_Util::formatSql('SELECT 1 < 2', true));
 }
 /**
  * Does the actual work of each specific transformations plugin.
  *
  * @param string $buffer  text to be transformed
  * @param array  $options transformation options
  * @param string $meta    meta information
  *
  * @return string
  */
 public function applyTransformation($buffer, $options = array(), $meta = '')
 {
     // see PMA_highlightSQL()
     $result = PMA_Util::formatSql($buffer);
     return $result;
 }