diff --git a/ChangeLog b/ChangeLog index 366f7827b..f10bdafc1 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ $Source$ queries generated by our db search. * db_search.php: Do not generate search query to include all fields, just SELECT * is enough. + * libraries/display_tbl.lib.php: Use shorter query for edit/delete if + original one is too long (bug #951744). 2004-05-10 Marc Delisle * lang/serbian: Updated, thanks to Mihailo Stefanovic (mikis). diff --git a/libraries/display_tbl.lib.php b/libraries/display_tbl.lib.php index 032c95319..ab5ee4e56 100644 --- a/libraries/display_tbl.lib.php +++ b/libraries/display_tbl.lib.php @@ -457,6 +457,7 @@ function PMA_displayTableHeaders(&$is_display, &$fields_meta, $fields_cnt = 0, $ // Just as fallback $unsorted_sql_query = $sql_query; + $url_sql_query = $sql_query; // sorting by indexes, only if it makes sense if (isset($analyzed_sql) && isset($analyzed_sql[0]) && @@ -471,6 +472,12 @@ function PMA_displayTableHeaders(&$is_display, &$fields_meta, $fields_cnt = 0, $ if (!empty($analyzed_sql[0]['from_clause'])) { $unsorted_sql_query .= ' FROM ' . $analyzed_sql[0]['from_clause']; } + + // query without conditions to shorten urls when needed, 800 is just guess, it should depend on remaining url length + if (strlen($sql_query) > 800) { + $url_sql_query = $unsorted_sql_query; + } + if (!empty($analyzed_sql[0]['where_clause'])) { $unsorted_sql_query .= ' WHERE ' . $analyzed_sql[0]['where_clause']; } @@ -961,6 +968,23 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) global $dontlimitchars; global $row; // mostly because of browser transformations, to make the row-data accessible in a plugin + $url_sql_query = $sql_query; + + // query without conditions to shorten urls when needed, 600 is just guess, it should depend on remaining url length + if (isset($analyzed_sql) && isset($analyzed_sql[0]) && + isset($analyzed_sql[0]['querytype']) && $analyzed_sql[0]['querytype'] == 'SELECT' && + strlen($sql_query) > 600) { + + $url_sql_query = 'SELECT '; + if (isset($analyzed_sql[0]['queryflags']['distinct'])) { + $url_sql_query .= ' DISTINCT '; + } + $url_sql_query .= $analyzed_sql[0]['select_expr_clause']; + if (!empty($analyzed_sql[0]['from_clause'])) { + $url_sql_query .= ' FROM ' . $analyzed_sql[0]['from_clause']; + } + } + if (!is_array($map)) { $map = array(); } @@ -1077,7 +1101,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) $edit_url = 'tbl_change.php' . '?' . $url_query . '&primary_key=' . $uva_condition - . '&sql_query=' . urlencode($sql_query) + . '&sql_query=' . urlencode($url_sql_query) . '&goto=' . urlencode($lnk_goto); if ($GLOBALS['cfg']['PropertiesIconic'] == FALSE) { $edit_str = $GLOBALS['strEdit']; @@ -1116,7 +1140,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) if ($is_display['del_lnk'] == 'dr') { // delete row case $lnk_goto = 'sql.php' . '?' . str_replace('&', '&', $url_query) - . '&sql_query=' . urlencode($sql_query) + . '&sql_query=' . urlencode($url_sql_query) . '&zero_rows=' . urlencode(htmlspecialchars($GLOBALS['strDeleted'])) . '&goto=' . (empty($goto) ? 'tbl_properties.php' : $goto); $del_query = urlencode('DELETE FROM ' . PMA_backquote($table) . ' WHERE') . $uva_condition . '+LIMIT+1'; @@ -1139,7 +1163,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) } else if ($is_display['del_lnk'] == 'kp') { // kill process case $lnk_goto = 'sql.php' . '?' . str_replace('&', '&', $url_query) - . '&sql_query=' . urlencode($sql_query) + . '&sql_query=' . urlencode($url_sql_query) . '&goto=main.php'; $del_url = 'sql.php?' . PMA_generate_common_url('mysql') @@ -1209,7 +1233,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) $transform_options['wrapper_link'] = '?' . (isset($url_query) ? $url_query : '') . '&primary_key=' . (isset($uva_condition) ? $uva_condition : '') - . '&sql_query=' . (isset($sql_query) ? urlencode($sql_query) : '') + . '&sql_query=' . (isset($sql_query) ? urlencode($url_sql_query) : '') . '&goto=' . (isset($sql_goto) ? urlencode($lnk_goto) : '') . '&transform_key=' . urlencode($meta->name);