Commit 441192bf authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-5113 Wrong result (extra row) and valgrind warnings in...

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.
parent c98a054f
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;
#
# 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 @@ class Item_func_not_all :public Item_func_not
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);
};
......
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