The branch, master has been updated via 701a668d354f8d6e8b47579a59feff4775dc820f (commit) from 2636f3b18eaefe7cf204795a9f4e0f9d74735a8e (commit)
- Log ----------------------------------------------------------------- commit 701a668d354f8d6e8b47579a59feff4775dc820f Author: Marc Delisle marc@infomarc.info Date: Wed Mar 23 07:47:24 2011 -0400
For bug #3220370, generate UPDATE only for modified columns and avoid POSTing if not needed
-----------------------------------------------------------------------
Summary of changes: js/sql.js | 228 ++++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 126 insertions(+), 102 deletions(-)
diff --git a/js/sql.js b/js/sql.js index e06b622..9adfb62 100644 --- a/js/sql.js +++ b/js/sql.js @@ -778,6 +778,8 @@ $(document).ready(function() { */ var sql_query = 'UPDATE `' + window.parent.table + '` SET ';
+ var need_to_post = false; + $input_siblings.each(function() { /** @lends jQuery */ /** @@ -806,6 +808,7 @@ $(document).ready(function() {
if (is_null) { sql_query += ' `' + field_name + "`=NULL , "; + need_to_post = true; } else { if($this_field.is(":not(.relation, .enum, .set)")) { this_field_params[field_name] = $this_field.find('textarea').val(); @@ -834,7 +837,10 @@ $(document).ready(function() { $.extend(relation_fields, this_field_params); } } - sql_query += ' `' + field_name + "`='" + this_field_params[field_name].replace(/'/g, "''") + "' , "; + if (this_field_params[field_name] != $this_field.data('original_data')) { + sql_query += ' `' + field_name + "`='" + this_field_params[field_name].replace(/'/g, "''") + "' , "; + need_to_post = true; + } } })
@@ -852,11 +858,16 @@ $(document).ready(function() { */ var transform_fields_list = $.param(transform_fields);
- // Make the Ajax post after setting all parameters - /** - * @var post_params Object containing parameters for the POST request - */ - var post_params = {'ajax_request' : true, + // if inline_edit is successful, we need to go back to default view + var $del_hide=$(this).parent(); + var $chg_submit=$(this); + + if (need_to_post) { + // Make the Ajax post after setting all parameters + /** + * @var post_params Object containing parameters for the POST request + */ + var post_params = {'ajax_request' : true, 'sql_query' : sql_query, 'disp_direction' : disp_mode, 'token' : window.parent.token, @@ -871,113 +882,126 @@ $(document).ready(function() { 'submit_type' : 'save' };
- // if inline_edit is successful, we need to go back to default view - var $del_hide=$(this).parent(); - var $chg_submit=$(this); + $.post('tbl_replace.php', post_params, function(data) { + if(data.success == true) { + PMA_ajaxShowMessage(data.message); + PMA_unInlineEditRow($del_hide, $chg_submit, $this_td, $input_siblings, data, disp_mode); + } else { + PMA_ajaxShowMessage(data.error); + }; + }) // end $.post() + } else { + // no posting was done but still need to display the row + // in its previous format + PMA_unInlineEditRow($del_hide, $chg_submit, $this_td, $input_siblings, '', disp_mode); + } + }) // End After editing, clicking again should post data +}, 'top.frame_content') // end $(document).ready()
- $.post('tbl_replace.php', post_params, function(data) { - if(data.success == true) { - // deleting the hide button if my query was successful - // remove <br><br><a> tags - for ( var i=0;i<=2;i++) { $del_hide.next().remove(); } - if(disp_mode!='vertical'){ - $chg_submit.empty(); - $chg_submit.html('<span class="nowrap"></span>'); - $chg_submit.children('span.nowrap').text(PMA_messages['strInlineEdit']); - } - else { - $chg_submit.children('span.nowrap').empty(); - $chg_submit.children('span.nowrap').append(data_vt); - } - - PMA_ajaxShowMessage(data.message);
- // changing inline_edit_active to inline_edit_anchor - $this_td.removeClass('inline_edit_active').addClass('inline_edit_anchor'); +/** + * Visually put back the row in the state it was before entering Inline edit + * + * (when called in the situation where no posting was done, the data + * parameter is empty) + */ +function PMA_unInlineEditRow($del_hide, $chg_submit, $this_td, $input_siblings, data, disp_mode) {
- // removing hover, marked and noclick classes - $this_td.parent('tr').removeClass('noclick'); - if(disp_mode != 'vertical') { - $this_td.parent('tr').removeClass('hover').find('td').removeClass('hover'); - } else { - $this_td.parents('tbody').find('tr').find('td:eq(' + $this_td.index() + ')').removeClass('marked'); - } + // deleting the hide button + // remove <br><br><a> tags + for ( var i = 0; i <= 2; i++) { + $del_hide.next().remove(); + } + if(disp_mode != 'vertical'){ + $chg_submit.empty(); + $chg_submit.html('<span class="nowrap"></span>'); + $chg_submit.children('span.nowrap').text(PMA_messages['strInlineEdit']); + } else { + $chg_submit.children('span.nowrap').empty(); + $chg_submit.children('span.nowrap').append(data_vt); + }
- $input_siblings.each(function() { - // Inline edit post has been successful. - $this_sibling = $(this); + // changing inline_edit_active to inline_edit_anchor + $this_td.removeClass('inline_edit_active').addClass('inline_edit_anchor');
- var is_null = $this_sibling.find('input:checkbox').is(':checked'); - if (is_null) { - $this_sibling.html('NULL'); - $this_sibling.addClass('null'); - } else { - $this_sibling.removeClass('null'); - if($this_sibling.is(':not(.relation, .enum, .set)')) { - /** - * @var new_html String containing value of the data field after edit - */ - var new_html = $this_sibling.find('textarea').val(); - - if($this_sibling.is('.transformed')) { - var field_name = getFieldName($this_sibling, disp_mode); - $.each(data.transformations, function(key, value) { - if(key == field_name) { - if($this_sibling.is('.text_plain, .application_octetstream')) { - new_html = value; - return false; - } - else { - var new_value = $this_sibling.find('textarea').val(); - new_html = $(value).append(new_value); - return false; - } - } - }) - } - } - else { - var new_html = ''; - var new_value = ''; - $test_element = $this_sibling.find('select'); - if ($test_element.length != 0) { - new_value = $test_element.val(); - } + // removing hover, marked and noclick classes + $this_td.parent('tr').removeClass('noclick'); + if(disp_mode != 'vertical') { + $this_td.parent('tr').removeClass('hover').find('td').removeClass('hover'); + } else { + $this_td.parents('tbody').find('tr').find('td:eq(' + $this_td.index() + ')').removeClass('marked'); + }
- $test_element = $this_sibling.find('span.curr_value'); - if ($test_element.length != 0) { - new_value = $test_element.text(); - } + $input_siblings.each(function() { + // Inline edit post has been successful. + $this_sibling = $(this);
- if($this_sibling.is('.relation')) { - var field_name = getFieldName($this_sibling, disp_mode); - $.each(data.relations, function(key, value) { - if(key == field_name) { - new_html = $(value).append(new_value); - return false; - } - }) - } else if ($this_sibling.is('.enum')) { - new_html = new_value; - } else if ($this_sibling.is('.set')) { - if (new_value != null) { - $.each(new_value, function(key, value) { - new_html = new_html + value + ','; - }) - new_html = new_html.substring(0, new_html.length-1); + var is_null = $this_sibling.find('input:checkbox').is(':checked'); + if (is_null) { + $this_sibling.html('NULL'); + $this_sibling.addClass('null'); + } else { + $this_sibling.removeClass('null'); + if($this_sibling.is(':not(.relation, .enum, .set)')) { + /** + * @var new_html String containing value of the data field after edit + */ + var new_html = $this_sibling.find('textarea').val(); + + if($this_sibling.is('.transformed')) { + var field_name = getFieldName($this_sibling, disp_mode); + if (typeof data.transformations != 'undefined') { + $.each(data.transformations, function(key, value) { + if(key == field_name) { + if($this_sibling.is('.text_plain, .application_octetstream')) { + new_html = value; + return false; + } else { + var new_value = $this_sibling.find('textarea').val(); + new_html = $(value).append(new_value); + return false; } } - } - $this_sibling.html(new_html); + }) } - }) + } + } else { + var new_html = ''; + var new_value = ''; + $test_element = $this_sibling.find('select'); + if ($test_element.length != 0) { + new_value = $test_element.val(); + } + $test_element = $this_sibling.find('span.curr_value'); + if ($test_element.length != 0) { + new_value = $test_element.text(); + } + + if($this_sibling.is('.relation')) { + var field_name = getFieldName($this_sibling, disp_mode); + if (typeof data.relations != 'undefined') { + $.each(data.relations, function(key, value) { + if(key == field_name) { + new_html = $(value).append(new_value); + return false; + } + }) + } + } else if ($this_sibling.is('.enum')) { + new_html = new_value; + } else if ($this_sibling.is('.set')) { + if (new_value != null) { + $.each(new_value, function(key, value) { + new_html = new_html + value + ','; + }) + new_html = new_html.substring(0, new_html.length-1); + } + } } - else { - PMA_ajaxShowMessage(data.error); - }; - }) // end $.post() - }) // End After editing, clicking again should post data -}, 'top.frame_content') // end $(document).ready() + $this_sibling.html(new_html); + } + }) +}
/** * Starting from some th, change the class of all td under it
hooks/post-receive