From cab738cbed36fab06bdbe8d322d0cd049a33d510 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Thu, 11 Feb 2016 21:02:33 +1100 Subject: [PATCH 1/2] Fix #11909 Can't insert row into table that contains generated column Signed-off-by: Madhura Jayaratne --- ChangeLog | 1 + libraries/insert_edit.lib.php | 7 +++++++ tbl_replace.php | 20 +++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8bfac5d127..3b0d0bdf48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -52,6 +52,7 @@ phpMyAdmin - ChangeLog - issue #11834 Adjust privileges fails if database name contains underscores - issue #11906 'Loading...' banner shows on login screen - issue #11930 Fixed changing of table parameters, eg. AUTO_INCREMENT +- issue #11909 Can't insert row into table that contains generated column 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index c3d58c0e57..820a55a81a 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -1278,6 +1278,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data_type ); + $virtual = array( + 'VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED' + ); + if (in_array($column['Extra'], $virtual)) { + $html_output .= ''; + } if ($column['Extra'] == 'auto_increment') { $html_output .= ''; diff --git a/tbl_replace.php b/tbl_replace.php index 3d503b72a5..a09d5de93d 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -181,6 +181,10 @@ foreach ($loop_array as $rownumber => $where_clause) { = isset($_REQUEST['auto_increment']['multi_edit'][$rownumber]) ? $_REQUEST['auto_increment']['multi_edit'][$rownumber] : null; + $multi_edit_virtual + = isset($_REQUEST['virtual']['multi_edit'][$rownumber]) + ? $_REQUEST['virtual']['multi_edit'][$rownumber] + : null; // When a select field is nullified, it's not present in $_REQUEST // so initialize it; this way, the foreach($multi_edit_columns) will process it @@ -259,13 +263,15 @@ foreach ($loop_array as $rownumber => $where_clause) { $gis_from_wkb_functions, $func_optional_param, $func_no_param, $key ); - list($query_values, $query_fields) - = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( - $multi_edit_columns_name, $multi_edit_columns_null, $current_value, - $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, - $query_values, $query_fields, $current_value_as_an_array, - $value_sets, $key, $multi_edit_columns_null_prev - ); + if (! isset($multi_edit_virtual) || ! isset($multi_edit_virtual[$key])) { + list($query_values, $query_fields) + = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, $multi_edit_columns_null, $current_value, + $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, + $query_values, $query_fields, $current_value_as_an_array, + $value_sets, $key, $multi_edit_columns_null_prev + ); + } if (isset($multi_edit_columns_null[$key])) { $multi_edit_columns[$key] = null; } From 59342451abae66b969dd7acd9818f678058990d6 Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Thu, 11 Feb 2016 21:02:33 +1100 Subject: [PATCH 2/2] Fix #11909 Can't insert row into table that contains generated column Signed-off-by: Madhura Jayaratne Conflicts: ChangeLog --- ChangeLog | 1 + libraries/insert_edit.lib.php | 7 +++++++ tbl_replace.php | 20 +++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6c9b34f94e..8be22c177f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,7 @@ phpMyAdmin - ChangeLog - issue #11836 Static analysis error for valid WHERE condition with IF keyword - issue #11800 Syntax Verifier error using REGEXP in SQL statement - issue #11799 Backslashes in comments are being interpreted as escape characters +- issue #11909 Can't insert row into table that contains generated column 4.5.4.1 (2016-01-29) - issue #11892 Error with PMA 4.4.15.3 diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index c277091156..573731a4e8 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -1273,6 +1273,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data_type ); + $virtual = array( + 'VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED' + ); + if (in_array($column['Extra'], $virtual)) { + $html_output .= ''; + } if ($column['Extra'] == 'auto_increment') { $html_output .= ''; diff --git a/tbl_replace.php b/tbl_replace.php index 00d37a335e..9e61c13ff2 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -182,6 +182,10 @@ foreach ($loop_array as $rownumber => $where_clause) { = isset($_REQUEST['auto_increment']['multi_edit'][$rownumber]) ? $_REQUEST['auto_increment']['multi_edit'][$rownumber] : null; + $multi_edit_virtual + = isset($_REQUEST['virtual']['multi_edit'][$rownumber]) + ? $_REQUEST['virtual']['multi_edit'][$rownumber] + : null; // When a select field is nullified, it's not present in $_REQUEST // so initialize it; this way, the foreach($multi_edit_columns) will process it @@ -262,13 +266,15 @@ foreach ($loop_array as $rownumber => $where_clause) { $gis_from_wkb_functions, $func_optional_param, $func_no_param, $key ); - list($query_values, $query_fields) - = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( - $multi_edit_columns_name, $multi_edit_columns_null, $current_value, - $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, - $query_values, $query_fields, $current_value_as_an_array, - $value_sets, $key, $multi_edit_columns_null_prev - ); + if (! isset($multi_edit_virtual) || ! isset($multi_edit_virtual[$key])) { + list($query_values, $query_fields) + = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, $multi_edit_columns_null, $current_value, + $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, + $query_values, $query_fields, $current_value_as_an_array, + $value_sets, $key, $multi_edit_columns_null_prev + ); + } if (isset($multi_edit_columns_null[$key])) { $multi_edit_columns[$key] = null; }