Bug #31157: crash when select+order by the avg of some field within the group by
The uncacheable flag should be set at fix_fields() stage. Fixed by moving the flag setting to match the one in 5.1
This commit is contained in:
parent
5f5b7cc311
commit
fb640797b8
@ -1732,4 +1732,18 @@ Variable_name Value
|
|||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 1
|
||||||
drop database db2;
|
drop database db2;
|
||||||
drop database db3;
|
drop database db3;
|
||||||
|
CREATE TABLE t1 (a ENUM('rainbow'));
|
||||||
|
INSERT INTO t1 VALUES (),(),(),(),();
|
||||||
|
SELECT 1 FROM t1 GROUP BY (SELECT 1 FROM t1 ORDER BY AVG(LAST_INSERT_ID()));
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a LONGBLOB);
|
||||||
|
INSERT INTO t1 SET a = 'aaaa';
|
||||||
|
INSERT INTO t1 SET a = 'aaaa';
|
||||||
|
SELECT 1 FROM t1 GROUP BY
|
||||||
|
(SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -1333,4 +1333,21 @@ show status like 'Qcache_queries_in_cache';
|
|||||||
drop database db2;
|
drop database db2;
|
||||||
drop database db3;
|
drop database db3;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #31157: Crash when select+order by the avg of some field within the
|
||||||
|
# group by
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a ENUM('rainbow'));
|
||||||
|
INSERT INTO t1 VALUES (),(),(),(),();
|
||||||
|
SELECT 1 FROM t1 GROUP BY (SELECT 1 FROM t1 ORDER BY AVG(LAST_INSERT_ID()));
|
||||||
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (a LONGBLOB);
|
||||||
|
INSERT INTO t1 SET a = 'aaaa';
|
||||||
|
INSERT INTO t1 SET a = 'aaaa';
|
||||||
|
SELECT 1 FROM t1 GROUP BY
|
||||||
|
(SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -3624,10 +3624,17 @@ longlong Item_func_last_insert_id::val_int()
|
|||||||
thd->first_successful_insert_id_in_prev_stmt= value;
|
thd->first_successful_insert_id_in_prev_stmt= value;
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
|
||||||
return thd->read_first_successful_insert_id_in_prev_stmt();
|
return thd->read_first_successful_insert_id_in_prev_stmt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Item_func_last_insert_id::fix_fields(THD *thd, Item **ref)
|
||||||
|
{
|
||||||
|
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
|
||||||
|
return Item_int_func::fix_fields(thd, ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* This function is just used to test speed of different functions */
|
/* This function is just used to test speed of different functions */
|
||||||
|
|
||||||
longlong Item_func_benchmark::val_int()
|
longlong Item_func_benchmark::val_int()
|
||||||
|
@ -935,6 +935,7 @@ public:
|
|||||||
if (arg_count)
|
if (arg_count)
|
||||||
max_length= args[0]->max_length;
|
max_length= args[0]->max_length;
|
||||||
}
|
}
|
||||||
|
bool fix_fields(THD *thd, Item **ref);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user