mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug#53933 crash when using uncacheable subquery in the having clause of outer query
The problem is in the Item_func_isnull::update_used_tables() function, bracket is at the wrong place. Because of that isnull item erroneously is treated as const item. The fix is to set brackets in the right place. mysql-test/r/func_isnull.result: test case mysql-test/t/func_isnull.test: test case sql/item_cmpfunc.h: set brackets in the right place.
This commit is contained in:
@ -5,3 +5,17 @@ flush tables;
|
|||||||
select * from t1 where isnull(to_days(mydate));
|
select * from t1 where isnull(to_days(mydate));
|
||||||
id mydate
|
id mydate
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# Bug#53933 crash when using uncacheable subquery in the having clause of outer query
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (0),(0);
|
||||||
|
SELECT ISNULL((SELECT GET_LOCK('Bug#53933', 0) FROM t1 GROUP BY f1)) AS f2
|
||||||
|
FROM t1 GROUP BY f1 HAVING f2 = f2;
|
||||||
|
f2
|
||||||
|
0
|
||||||
|
SELECT RELEASE_LOCK('Bug#53933');
|
||||||
|
RELEASE_LOCK('Bug#53933')
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
End of 5.0 tests
|
||||||
|
@ -13,3 +13,18 @@ select * from t1 where isnull(to_days(mydate));
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#53933 crash when using uncacheable subquery in the having clause of outer query
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 INT);
|
||||||
|
INSERT INTO t1 VALUES (0),(0);
|
||||||
|
|
||||||
|
SELECT ISNULL((SELECT GET_LOCK('Bug#53933', 0) FROM t1 GROUP BY f1)) AS f2
|
||||||
|
FROM t1 GROUP BY f1 HAVING f2 = f2;
|
||||||
|
SELECT RELEASE_LOCK('Bug#53933');
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo End of 5.0 tests
|
||||||
|
@ -1209,8 +1209,8 @@ public:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
args[0]->update_used_tables();
|
args[0]->update_used_tables();
|
||||||
if ((const_item_cache= !(used_tables_cache= args[0]->used_tables())) &&
|
if ((const_item_cache= !(used_tables_cache= args[0]->used_tables()) &&
|
||||||
!with_subselect)
|
!with_subselect))
|
||||||
{
|
{
|
||||||
/* Remember if the value is always NULL or never NULL */
|
/* Remember if the value is always NULL or never NULL */
|
||||||
cached_value= (longlong) args[0]->is_null();
|
cached_value= (longlong) args[0]->is_null();
|
||||||
|
Reference in New Issue
Block a user