summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/insert_update_autoinc-7150.result9
-rw-r--r--mysql-test/t/insert_update_autoinc-7150.test8
-rw-r--r--sql/sql_insert.cc2
3 files changed, 18 insertions, 1 deletions
diff --git a/mysql-test/r/insert_update_autoinc-7150.result b/mysql-test/r/insert_update_autoinc-7150.result
new file mode 100644
index 00000000000..96773479310
--- /dev/null
+++ b/mysql-test/r/insert_update_autoinc-7150.result
@@ -0,0 +1,9 @@
+create table t1 (a int(10) auto_increment primary key, b int(11));
+insert t1 values (null,1);
+insert t1 values (null,2), (1,-1), (null,3) on duplicate key update b=values(b);
+select * from t1;
+a b
+1 -1
+2 2
+3 3
+drop table t1;
diff --git a/mysql-test/t/insert_update_autoinc-7150.test b/mysql-test/t/insert_update_autoinc-7150.test
new file mode 100644
index 00000000000..1229898b4aa
--- /dev/null
+++ b/mysql-test/t/insert_update_autoinc-7150.test
@@ -0,0 +1,8 @@
+#
+# MDEV-7150 Wrong auto increment values on INSERT .. ON DUPLICATE KEY UPDATE when the inserted columns include NULL in an auto-increment column
+#
+create table t1 (a int(10) auto_increment primary key, b int(11));
+insert t1 values (null,1);
+insert t1 values (null,2), (1,-1), (null,3) on duplicate key update b=values(b);
+select * from t1;
+drop table t1;
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index ccfdf352f53..4500c4492c4 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1754,7 +1754,7 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
table->file->adjust_next_insert_id_after_explicit_value(table->next_number_field->val_int());
}
- else
+ else if (prev_insert_id_for_cur_row)
{
table->file->restore_auto_increment(prev_insert_id_for_cur_row);
}