Extend support for inline edit, smallint fields
This commit is contained in:
parent
9be6a6aeaa
commit
0cc8121846
@ -376,10 +376,10 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi
|
||||
table_create_time: g.tableCreateTime
|
||||
};
|
||||
if (g.colOrder.length > 0) {
|
||||
$.extend(post_params, { col_order: g.colOrder.toString() });
|
||||
$.extend(post_params, {col_order: g.colOrder.toString()});
|
||||
}
|
||||
if (g.colVisib.length > 0) {
|
||||
$.extend(post_params, { col_visib: g.colVisib.toString() });
|
||||
$.extend(post_params, {col_visib: g.colVisib.toString()});
|
||||
}
|
||||
$.post('sql.php', post_params, function(data) {
|
||||
if (data.success != true) {
|
||||
@ -634,7 +634,9 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi
|
||||
$this_field.addClass('null');
|
||||
} else {
|
||||
$this_field.removeClass('null');
|
||||
var new_html = $this_field.data('value');
|
||||
var new_html = data.isTruncatableField
|
||||
? data.truncatableFieldValue
|
||||
: $this_field.data('value');
|
||||
if ($this_field.is('.truncated')) {
|
||||
if (new_html.length > g.maxTruncatedLen) {
|
||||
new_html = new_html.substring(0, g.maxTruncatedLen) + '...';
|
||||
@ -1190,6 +1192,32 @@ function PMA_makegrid(t, enableResize, enableReorder, enableVisib, enableGridEdi
|
||||
}
|
||||
if(data.success == true) {
|
||||
PMA_ajaxShowMessage(data.message);
|
||||
|
||||
// Generate new where clause again if the field
|
||||
// can be truncated by MySQL and table does not have
|
||||
// primary/unique key
|
||||
if (data.isTruncatableField && !data.hasUniqueIdentifier) {
|
||||
|
||||
var $toBeSavedColumn = $('.to_be_saved');
|
||||
var condition_array = jQuery.parseJSON($toBeSavedColumn.parent().find('.condition_array').val());
|
||||
var field_name = getFieldName($toBeSavedColumn);
|
||||
var field_str = '`' + g.table + '`.' + '`' + field_name + '`';
|
||||
condition_array[field_str] = ' =' + data.truncatableFieldValue;
|
||||
|
||||
// save new_clause
|
||||
var new_clause = '';
|
||||
for (var field in condition_array) {
|
||||
new_clause += field + ' ' + condition_array[field] + ' AND ';
|
||||
}
|
||||
new_clause = new_clause.substring(0, new_clause.length - 5); // remove the last AND
|
||||
new_clause = PMA_urlencode(new_clause);
|
||||
$toBeSavedColumn.parent().data('new_clause', new_clause);
|
||||
|
||||
// save condition_array
|
||||
$toBeSavedColumn.parent().find('.condition_array').val(JSON.stringify(condition_array));
|
||||
|
||||
}
|
||||
|
||||
// update where_clause related data in each edited row
|
||||
$('.to_be_saved').parents('tr').each(function() {
|
||||
var new_clause = $(this).data('new_clause');
|
||||
|
||||
@ -566,7 +566,40 @@ if ($GLOBALS['is_ajax_request'] == true) {
|
||||
} // end of loop for each transformation cell
|
||||
} // end of loop for each $mime_map
|
||||
}
|
||||
|
||||
|
||||
// Need to check the inline edited value can be truncated by MySQL
|
||||
// without informing while saving
|
||||
$column_name = $_REQUEST['fields_name']['multi_edit'][0][0];
|
||||
$column_value = $_REQUEST['fields']['multi_edit'][0][0];
|
||||
$column_meta_data = PMA_DBI_get_columns($db, $table, $column_name);
|
||||
|
||||
if (stripos($column_meta_data['Type'], 'smallint') !== false) {
|
||||
|
||||
$extra_data['isTruncatableField'] = true;
|
||||
$extra_data['hasUniqueIdentifier'] = hasPrimaryKeyOrUniqueKey($db, $table)
|
||||
? true
|
||||
: false;
|
||||
|
||||
// If table has unique identifier (primary/unique key), fetch the value
|
||||
// of the field. (Yes, can be just round and return, but better need to
|
||||
// retrieve the value really saved in the database when it is possible)
|
||||
if ($extra_data['hasUniqueIdentifier']) {
|
||||
|
||||
$sql_for_real_value = 'SELECT '. PMA_backquote($table) . '.' . PMA_backquote($column_name)
|
||||
. ' FROM ' . PMA_backquote($db) . '.' . PMA_backquote($table)
|
||||
. ' WHERE ' . $_REQUEST['where_clause'][0];
|
||||
|
||||
$extra_data['truncatableFieldValue'] = (PMA_DBI_fetch_value($sql_for_real_value) !== false)
|
||||
? PMA_DBI_fetch_value($sql_for_real_value)
|
||||
: round($column_value);
|
||||
|
||||
} else {
|
||||
$extra_data['truncatableFieldValue'] = round($column_value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**Get the total row count of the table*/
|
||||
$extra_data['row_count'] = PMA_Table::countRecords($_REQUEST['db'], $_REQUEST['table']);
|
||||
$extra_data['sql_query'] = PMA_showMessage($message, $GLOBALS['display_query']);
|
||||
@ -604,4 +637,28 @@ require_once './libraries/header.inc.php';
|
||||
*/
|
||||
require './' . PMA_securePath($goto_include);
|
||||
exit;
|
||||
|
||||
|
||||
/**
|
||||
* Check whether particular table has primary key or unique key
|
||||
*
|
||||
* @param string $db Database name
|
||||
* @param string $table Table name
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function hasPrimaryKeyOrUniqueKey($db, $table) {
|
||||
|
||||
$table_indexes = PMA_DBI_get_table_indexes($db, $table);
|
||||
|
||||
foreach ($table_indexes as $index) {
|
||||
if (($index['Key_name'] == 'PRIMARY') || ($index['Non_unique'] == '0')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user