Commit b625e434 authored by evgen@moonbone.local's avatar evgen@moonbone.local

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1

into  moonbone.local:/work/mysql-4.1-bug-10886
parents 3bfe28e9 dc381ea9
...@@ -625,3 +625,12 @@ select SQL_BUFFER_RESULT * from t1 WHERE (SEQ = 1); ...@@ -625,3 +625,12 @@ select SQL_BUFFER_RESULT * from t1 WHERE (SEQ = 1);
ID NO SEQ ID NO SEQ
1 1 1 1 1 1
drop table t1; drop table t1;
create table t1 (f1 int);
create table t2 (ff1 int unique, ff2 int default 1);
insert into t1 values (1),(1),(2);
insert into t2(ff1) select f1 from t1 on duplicate key update ff2=ff2+1;
select * from t2;
ff1 ff2
1 2
2 1
drop table t1, t2;
...@@ -166,3 +166,12 @@ INSERT INTO t1 (SEQ, NO) SELECT "1" AS SEQ, IF(MAX(NO) IS NULL, 0, MAX(NO)) + 1 ...@@ -166,3 +166,12 @@ INSERT INTO t1 (SEQ, NO) SELECT "1" AS SEQ, IF(MAX(NO) IS NULL, 0, MAX(NO)) + 1
select SQL_BUFFER_RESULT * from t1 WHERE (SEQ = 1); select SQL_BUFFER_RESULT * from t1 WHERE (SEQ = 1);
drop table t1; drop table t1;
#
# Bug#10886 - Have to restore default values after update ON DUPLICATE KEY
#
create table t1 (f1 int);
create table t2 (ff1 int unique, ff2 int default 1);
insert into t1 values (1),(1),(2);
insert into t2(ff1) select f1 from t1 on duplicate key update ff2=ff2+1;
select * from t2;
drop table t1, t2;
...@@ -1636,11 +1636,22 @@ bool select_insert::send_data(List<Item> &values) ...@@ -1636,11 +1636,22 @@ bool select_insert::send_data(List<Item> &values)
store_values(values); store_values(values);
error=thd->net.report_error || write_record(table,&info); error=thd->net.report_error || write_record(table,&info);
thd->count_cuted_fields= CHECK_FIELD_IGNORE; thd->count_cuted_fields= CHECK_FIELD_IGNORE;
if (!error && table->next_number_field) // Clear for next record
if (!error)
{ {
table->next_number_field->reset(); /*
if (! last_insert_id && thd->insert_id_used) Restore fields of the record since it is possible that they were
last_insert_id=thd->insert_id(); changed by ON DUPLICATE KEY UPDATE clause.
*/
if (info.handle_duplicates == DUP_UPDATE)
restore_record(table, default_values);
if (table->next_number_field) // Clear for next record
{
table->next_number_field->reset();
if (! last_insert_id && thd->insert_id_used)
last_insert_id=thd->insert_id();
}
} }
DBUG_RETURN(error); DBUG_RETURN(error);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment