Commit 6765cc30 authored by Sergey Petrunya's avatar Sergey Petrunya

# No BUG#, a case brought from 5.2's innodb_mysql_lock.test

- Fix a crash in nested semi-join subquery processing
parent f75fd03e
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
drop view if exists v2;
set @save_optimizer_switch=@@optimizer_switch; set @save_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off"; set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off";
select (select 2); select (select 2);
...@@ -4937,3 +4938,20 @@ SELECT * FROM t2 UNION SELECT * FROM t2 ...@@ -4937,3 +4938,20 @@ SELECT * FROM t2 UNION SELECT * FROM t2
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
DROP TABLE t1,t2; DROP TABLE t1,t2;
End of 5.1 tests End of 5.1 tests
#
# No BUG#, a case brought from 5.2's innodb_mysql_lock.test
#
create table t1 (i int not null primary key);
insert into t1 values (1),(2),(3),(4),(5);
create table t2 (j int not null primary key);
insert into t2 values (1),(2),(3),(4),(5);
create table t3 (k int not null primary key);
insert into t3 values (1),(2),(3);
create view v2 as select t2.j as j from t2 where t2.j in (select t1.i from t1);
select * from t3 where k in (select j from v2);
k
1
2
3
drop table t1,t2,t3;
drop view v2;
...@@ -3,6 +3,7 @@ select @@optimizer_switch like '%materialization=on%'; ...@@ -3,6 +3,7 @@ select @@optimizer_switch like '%materialization=on%';
1 1
set optimizer_switch='materialization=off'; set optimizer_switch='materialization=off';
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
drop view if exists v2;
set @save_optimizer_switch=@@optimizer_switch; set @save_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off"; set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off";
select (select 2); select (select 2);
...@@ -4941,6 +4942,23 @@ SELECT * FROM t2 UNION SELECT * FROM t2 ...@@ -4941,6 +4942,23 @@ SELECT * FROM t2 UNION SELECT * FROM t2
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
DROP TABLE t1,t2; DROP TABLE t1,t2;
End of 5.1 tests End of 5.1 tests
#
# No BUG#, a case brought from 5.2's innodb_mysql_lock.test
#
create table t1 (i int not null primary key);
insert into t1 values (1),(2),(3),(4),(5);
create table t2 (j int not null primary key);
insert into t2 values (1),(2),(3),(4),(5);
create table t3 (k int not null primary key);
insert into t3 values (1),(2),(3);
create view v2 as select t2.j as j from t2 where t2.j in (select t1.i from t1);
select * from t3 where k in (select j from v2);
k
1
2
3
drop table t1,t2,t3;
drop view v2;
set optimizer_switch=default; set optimizer_switch=default;
select @@optimizer_switch like '%materialization=on%'; select @@optimizer_switch like '%materialization=on%';
@@optimizer_switch like '%materialization=on%' @@optimizer_switch like '%materialization=on%'
......
set optimizer_switch='materialization=off,semijoin=off'; set optimizer_switch='materialization=off,semijoin=off';
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
drop view if exists v2;
set @save_optimizer_switch=@@optimizer_switch; set @save_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off"; set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off";
select (select 2); select (select 2);
...@@ -4938,4 +4939,21 @@ SELECT * FROM t2 UNION SELECT * FROM t2 ...@@ -4938,4 +4939,21 @@ SELECT * FROM t2 UNION SELECT * FROM t2
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
DROP TABLE t1,t2; DROP TABLE t1,t2;
End of 5.1 tests End of 5.1 tests
#
# No BUG#, a case brought from 5.2's innodb_mysql_lock.test
#
create table t1 (i int not null primary key);
insert into t1 values (1),(2),(3),(4),(5);
create table t2 (j int not null primary key);
insert into t2 values (1),(2),(3),(4),(5);
create table t3 (k int not null primary key);
insert into t3 values (1),(2),(3);
create view v2 as select t2.j as j from t2 where t2.j in (select t1.i from t1);
select * from t3 where k in (select j from v2);
k
1
2
3
drop table t1,t2,t3;
drop view v2;
set optimizer_switch=default; set optimizer_switch=default;
set optimizer_switch='semijoin=off'; set optimizer_switch='semijoin=off';
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
drop view if exists v2;
set @save_optimizer_switch=@@optimizer_switch; set @save_optimizer_switch=@@optimizer_switch;
set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off"; set @@optimizer_switch="partial_match_rowid_merge=off,partial_match_table_scan=off";
select (select 2); select (select 2);
...@@ -4938,4 +4939,21 @@ SELECT * FROM t2 UNION SELECT * FROM t2 ...@@ -4938,4 +4939,21 @@ SELECT * FROM t2 UNION SELECT * FROM t2
ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE));
DROP TABLE t1,t2; DROP TABLE t1,t2;
End of 5.1 tests End of 5.1 tests
#
# No BUG#, a case brought from 5.2's innodb_mysql_lock.test
#
create table t1 (i int not null primary key);
insert into t1 values (1),(2),(3),(4),(5);
create table t2 (j int not null primary key);
insert into t2 values (1),(2),(3),(4),(5);
create table t3 (k int not null primary key);
insert into t3 values (1),(2),(3);
create view v2 as select t2.j as j from t2 where t2.j in (select t1.i from t1);
select * from t3 where k in (select j from v2);
k
1
2
3
drop table t1,t2,t3;
drop view v2;
set optimizer_switch=default; set optimizer_switch=default;
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
# Initialise # Initialise
--disable_warnings --disable_warnings
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t11,t12;
drop view if exists v2;
--enable_warnings --enable_warnings
set @save_optimizer_switch=@@optimizer_switch; set @save_optimizer_switch=@@optimizer_switch;
...@@ -4206,3 +4207,23 @@ DROP TABLE t1,t2; ...@@ -4206,3 +4207,23 @@ DROP TABLE t1,t2;
--enable_result_log --enable_result_log
--echo End of 5.1 tests --echo End of 5.1 tests
--echo #
--echo # No BUG#, a case brought from 5.2's innodb_mysql_lock.test
--echo #
create table t1 (i int not null primary key);
insert into t1 values (1),(2),(3),(4),(5);
create table t2 (j int not null primary key);
insert into t2 values (1),(2),(3),(4),(5);
create table t3 (k int not null primary key);
insert into t3 values (1),(2),(3);
create view v2 as select t2.j as j from t2 where t2.j in (select t1.i from t1);
select * from t3 where k in (select j from v2);
drop table t1,t2,t3;
drop view v2;
...@@ -803,7 +803,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred) ...@@ -803,7 +803,7 @@ static bool convert_subq_to_sj(JOIN *parent_join, Item_in_subselect *subq_pred)
sj_nest->nested_join->sj_corr_tables= subq_pred->used_tables(); sj_nest->nested_join->sj_corr_tables= subq_pred->used_tables();
sj_nest->nested_join->sj_depends_on= subq_pred->used_tables() | sj_nest->nested_join->sj_depends_on= subq_pred->used_tables() |
subq_pred->left_expr->used_tables(); subq_pred->left_expr->used_tables();
sj_nest->sj_on_expr= subq_lex->where; sj_nest->sj_on_expr= subq_lex->join->conds;
/* /*
Create the IN-equalities and inject them into semi-join's ON expression. Create the IN-equalities and inject them into semi-join's ON expression.
......
...@@ -553,7 +553,6 @@ JOIN::prepare(Item ***rref_pointer_array, ...@@ -553,7 +553,6 @@ JOIN::prepare(Item ***rref_pointer_array,
} }
int res= check_and_do_in_subquery_rewrites(this); int res= check_and_do_in_subquery_rewrites(this);
//psergey-merge: if (!thd->lex->view_prepare_mode && !(select_options & SELECT_DESCRIBE))
select_lex->fix_prepare_information(thd, &conds, &having); select_lex->fix_prepare_information(thd, &conds, &having);
......
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