Fixed bug #601164.
The functions mysql_delete and mysql_update lacked calls of updated_virtual_fields(). This caused wrong results for some DELETEs/UPDATEs. Added test cases for this bug.
This commit is contained in:
parent
4ee9e66d87
commit
b95bd9f5e2
32
mysql-test/suite/vcol/r/vcol_misc.result
Normal file
32
mysql-test/suite/vcol/r/vcol_misc.result
Normal file
@ -0,0 +1,32 @@
|
||||
drop table if exists t1,t2;
|
||||
create table t1 (a int, b int, v int as (a+1), index idx(b));
|
||||
insert into t1(a, b) values
|
||||
(4, 40), (3, 30), (5, 50), (7, 70), (8, 80), (2, 20), (1, 10);
|
||||
select * from t1 order by b;
|
||||
a b v
|
||||
1 10 2
|
||||
2 20 3
|
||||
3 30 4
|
||||
4 40 5
|
||||
5 50 6
|
||||
7 70 8
|
||||
8 80 9
|
||||
delete from t1 where v > 6 order by b limit 1;
|
||||
select * from t1 order by b;
|
||||
a b v
|
||||
1 10 2
|
||||
2 20 3
|
||||
3 30 4
|
||||
4 40 5
|
||||
5 50 6
|
||||
8 80 9
|
||||
update t1 set a=v order by b limit 1;
|
||||
select * from t1 order by b;
|
||||
a b v
|
||||
2 10 3
|
||||
2 20 3
|
||||
3 30 4
|
||||
4 40 5
|
||||
5 50 6
|
||||
8 80 9
|
||||
drop table t1;
|
21
mysql-test/suite/vcol/t/vcol_misc.test
Normal file
21
mysql-test/suite/vcol/t/vcol_misc.test
Normal file
@ -0,0 +1,21 @@
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Bug#601164: DELETE/UPDATE with ORDER BY index and LIMIT
|
||||
#
|
||||
|
||||
create table t1 (a int, b int, v int as (a+1), index idx(b));
|
||||
insert into t1(a, b) values
|
||||
(4, 40), (3, 30), (5, 50), (7, 70), (8, 80), (2, 20), (1, 10);
|
||||
|
||||
select * from t1 order by b;
|
||||
|
||||
delete from t1 where v > 6 order by b limit 1;
|
||||
select * from t1 order by b;
|
||||
|
||||
update t1 set a=v order by b limit 1;
|
||||
select * from t1 order by b;
|
||||
|
||||
drop table t1;
|
@ -304,6 +304,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
||||
while (!(error=info.read_record(&info)) && !thd->killed &&
|
||||
! thd->is_error())
|
||||
{
|
||||
update_virtual_fields(table);
|
||||
// thd->is_error() is tested to disallow delete row on error
|
||||
if (!select || select->skip_record(thd) > 0)
|
||||
{
|
||||
|
@ -469,6 +469,7 @@ int mysql_update(THD *thd,
|
||||
while (!(error=info.read_record(&info)) &&
|
||||
!thd->killed && !thd->is_error())
|
||||
{
|
||||
update_virtual_fields(table);
|
||||
if (!select || select->skip_record(thd) > 0)
|
||||
{
|
||||
if (table->file->was_semi_consistent_read())
|
||||
@ -575,6 +576,7 @@ int mysql_update(THD *thd,
|
||||
|
||||
while (!(error=info.read_record(&info)) && !thd->killed)
|
||||
{
|
||||
update_virtual_fields(table);
|
||||
if (!select || select->skip_record(thd) > 0)
|
||||
{
|
||||
if (table->file->was_semi_consistent_read())
|
||||
|
Loading…
x
Reference in New Issue
Block a user