Commit b468cd47 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-5284 Assertion `!(*expr)->fixed' fails in replace_where_subcondition with IN suquery

parent 441192bf
...@@ -11,3 +11,10 @@ REVERSE(EXISTS(SELECT RAND() FROM t1)) ...@@ -11,3 +11,10 @@ REVERSE(EXISTS(SELECT RAND() FROM t1))
0 0
SET GLOBAL debug=@orig_debug; SET GLOBAL debug=@orig_debug;
DROP TABLE t1; DROP TABLE t1;
create table t1 (i int);
insert into t1 values (1),(2);
select * from t1 where (i < 200 or i = 300) and i in (select i from t1);
i
1
2
drop table t1;
...@@ -15,3 +15,13 @@ SELECT SUM(EXISTS(SELECT RAND() FROM t1)) FROM t1; ...@@ -15,3 +15,13 @@ SELECT SUM(EXISTS(SELECT RAND() FROM t1)) FROM t1;
SELECT REVERSE(EXISTS(SELECT RAND() FROM t1)); SELECT REVERSE(EXISTS(SELECT RAND() FROM t1));
SET GLOBAL debug=@orig_debug; SET GLOBAL debug=@orig_debug;
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-5284 Assertion `!(*expr)->fixed' fails in replace_where_subcondition with IN suquery
#
create table t1 (i int);
insert into t1 values (1),(2);
select * from t1 where (i < 200 or i = 300) and i in (select i from t1);
drop table t1;
...@@ -420,9 +420,7 @@ Currently, solution #2 is implemented. ...@@ -420,9 +420,7 @@ Currently, solution #2 is implemented.
static static
bool subquery_types_allow_materialization(Item_in_subselect *in_subs); bool subquery_types_allow_materialization(Item_in_subselect *in_subs);
static bool replace_where_subcondition(JOIN *join, Item **expr, static bool replace_where_subcondition(JOIN *, Item **, Item *, Item *, bool);
Item *old_cond, Item *new_cond,
bool do_fix_fields);
static int subq_sj_candidate_cmp(Item_in_subselect* el1, Item_in_subselect* el2, static int subq_sj_candidate_cmp(Item_in_subselect* el1, Item_in_subselect* el2,
void *arg); void *arg);
static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred); static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred);
...@@ -1293,7 +1291,7 @@ static bool replace_where_subcondition(JOIN *join, Item **expr, ...@@ -1293,7 +1291,7 @@ static bool replace_where_subcondition(JOIN *join, Item **expr,
} }
else if (item->type() == Item::COND_ITEM) else if (item->type() == Item::COND_ITEM)
{ {
DBUG_ASSERT(!(*expr)->fixed); DBUG_ASSERT(!do_fix_fields || !(*expr)->fixed);
replace_where_subcondition(join, li.ref(), replace_where_subcondition(join, li.ref(),
old_cond, new_cond, old_cond, new_cond,
do_fix_fields); do_fix_fields);
......
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