MDEV-5113 Wrong result (extra row) and valgrind warnings in Item_maxmin_subselect::any_value on 2nd execution of PS with SELECT subquery
When setting Item_func_not_all::test_sum_item or Item_func_not_all::test_sub_item, reset the other one to NULL - they can never be set both. When a PS is reexecuted, different executions might be optimized differently and a wrong test_su*_item might stay set from the previous execution.
This commit is contained in:
parent
c98a054fde
commit
441192bfb0
16
mysql-test/r/ps_max_subselect-5113.result
Normal file
16
mysql-test/r/ps_max_subselect-5113.result
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
CREATE TABLE t1 (b INT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (0),(8);
|
||||||
|
PREPARE stmt FROM '
|
||||||
|
SELECT 1 FROM t1 AS o
|
||||||
|
WHERE o.b >= ALL (
|
||||||
|
SELECT a2.b FROM t1 AS a1 LEFT JOIN t1 AS a2 ON ( a2.b = a1.b )
|
||||||
|
WHERE a1.b <= a2.b
|
||||||
|
)
|
||||||
|
';
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
EXECUTE stmt;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
20
mysql-test/t/ps_max_subselect-5113.test
Normal file
20
mysql-test/t/ps_max_subselect-5113.test
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#
|
||||||
|
# MDEV-5113 Wrong result (extra row) and valgrind warnings in Item_maxmin_subselect::any_value on 2nd execution of PS with SELECT subquery
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (b INT NOT NULL);
|
||||||
|
INSERT INTO t1 VALUES (0),(8);
|
||||||
|
|
||||||
|
PREPARE stmt FROM '
|
||||||
|
SELECT 1 FROM t1 AS o
|
||||||
|
WHERE o.b >= ALL (
|
||||||
|
SELECT a2.b FROM t1 AS a1 LEFT JOIN t1 AS a2 ON ( a2.b = a1.b )
|
||||||
|
WHERE a1.b <= a2.b
|
||||||
|
)
|
||||||
|
';
|
||||||
|
|
||||||
|
EXECUTE stmt;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
@ -508,8 +508,8 @@ public:
|
|||||||
bool fix_fields(THD *thd, Item **ref)
|
bool fix_fields(THD *thd, Item **ref)
|
||||||
{return Item_func::fix_fields(thd, ref);}
|
{return Item_func::fix_fields(thd, ref);}
|
||||||
virtual void print(String *str, enum_query_type query_type);
|
virtual void print(String *str, enum_query_type query_type);
|
||||||
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; test_sub_item= 0; };
|
||||||
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; };
|
void set_sub_test(Item_maxmin_subselect *item) { test_sub_item= item; test_sum_item= 0;};
|
||||||
bool empty_underlying_subquery();
|
bool empty_underlying_subquery();
|
||||||
Item *neg_transformer(THD *thd);
|
Item *neg_transformer(THD *thd);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user