mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 18:20:07 +01:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1
into moonbone.local:/work/15028-bug-4.1-mysql
This commit is contained in:
commit
f173e09f0d
3 changed files with 37 additions and 6 deletions
|
@ -345,3 +345,16 @@ f1
|
|||
2000-01-01
|
||||
2002-02-02
|
||||
drop table t1;
|
||||
create table t1 (f1 int);
|
||||
create table t2 (f2 int);
|
||||
insert into t1 values(1),(2);
|
||||
insert into t2 values(1),(1);
|
||||
update t1,t2 set f1=3,f2=3 where f1=f2 and f1=1;
|
||||
affected rows: 3
|
||||
info: Rows matched: 3 Changed: 3 Warnings: 0
|
||||
update t2 set f2=1;
|
||||
update t1 set f1=1 where f1=3;
|
||||
update t2,t1 set f1=3,f2=3 where f1=f2 and f1=1;
|
||||
affected rows: 3
|
||||
info: Rows matched: 3 Changed: 3 Warnings: 0
|
||||
drop table t1,t2;
|
||||
|
|
|
@ -270,4 +270,21 @@ insert into t1 values('2000-01-01'),('0000-00-00');
|
|||
update t1 set f1='2002-02-02' where f1 is null;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#15028 Multitable update returns different numbers of matched rows
|
||||
# depending on table order
|
||||
create table t1 (f1 int);
|
||||
create table t2 (f2 int);
|
||||
insert into t1 values(1),(2);
|
||||
insert into t2 values(1),(1);
|
||||
--enable_info
|
||||
update t1,t2 set f1=3,f2=3 where f1=f2 and f1=1;
|
||||
--disable_info
|
||||
update t2 set f2=1;
|
||||
update t1 set f1=1 where f1=3;
|
||||
--enable_info
|
||||
update t2,t1 set f1=3,f2=3 where f1=f2 and f1=1;
|
||||
--disable_info
|
||||
drop table t1,t2;
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -1082,22 +1082,23 @@ bool multi_update::send_data(List<Item> ¬_used_values)
|
|||
int error;
|
||||
TABLE *tmp_table= tmp_tables[offset];
|
||||
fill_record(tmp_table->field+1, *values_for_table[offset], 1);
|
||||
found++;
|
||||
/* Store pointer to row */
|
||||
memcpy((char*) tmp_table->field[0]->ptr,
|
||||
(char*) table->file->ref, table->file->ref_length);
|
||||
/* Write row, ignoring duplicated updates to a row */
|
||||
if ((error= tmp_table->file->write_row(tmp_table->record[0])) &&
|
||||
(error != HA_ERR_FOUND_DUPP_KEY &&
|
||||
error != HA_ERR_FOUND_DUPP_UNIQUE))
|
||||
if (error= tmp_table->file->write_row(tmp_table->record[0]))
|
||||
{
|
||||
if (create_myisam_from_heap(thd, tmp_table, tmp_table_param + offset,
|
||||
error, 1))
|
||||
if (error != HA_ERR_FOUND_DUPP_KEY &&
|
||||
error != HA_ERR_FOUND_DUPP_UNIQUE &&
|
||||
create_myisam_from_heap(thd, tmp_table,
|
||||
tmp_table_param + offset, error, 1))
|
||||
{
|
||||
do_update=0;
|
||||
DBUG_RETURN(1); // Not a table_is_full error
|
||||
}
|
||||
}
|
||||
else
|
||||
found++;
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
|
|
Loading…
Add table
Reference in a new issue