Commit cb25707c authored by Igor Babaev's avatar Igor Babaev

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.
parent f26ee710
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;
--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())
......
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