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)
|
||||
{return Item_func::fix_fields(thd, ref);}
|
||||
virtual void print(String *str, enum_query_type query_type);
|
||||
void set_sum_test(Item_sum_hybrid *item) { test_sum_item= item; };
|
||||
void set_sub_test(Item_maxmin_subselect *item) { test_sub_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; test_sum_item= 0;};
|
||||
bool empty_underlying_subquery();
|
||||
Item *neg_transformer(THD *thd);
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user