Loading mysql-test/r/join.result +20 −0 Original line number Diff line number Diff line Loading @@ -744,3 +744,23 @@ select a2 from ((t1 natural join t2) join t3 on b=c1) natural join t4; a2 1 drop table t1,t2,t3,t4; create table t1 (c int, b int); create table t2 (a int, b int); create table t3 (b int, c int); create table t4 (y int, c int); create table t5 (y int, z int); insert into t1 values (3,2); insert into t2 values (1,2); insert into t3 values (2,3); insert into t4 values (1,3); insert into t5 values (1,4); prepare stmt1 from "select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5"; execute stmt1; y c b a z 1 3 2 1 4 select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5; y c b a z 1 3 2 1 4 drop table t1, t2, t3, t4, t5; mysql-test/t/join.test +25 −0 Original line number Diff line number Diff line Loading @@ -563,4 +563,29 @@ select a2 from ((t1 natural join t2) join t3 on b=c1) natural join t4; drop table t1,t2,t3,t4; # # BUG#15355: Common natural join column not resolved in prepared statement nested query # create table t1 (c int, b int); create table t2 (a int, b int); create table t3 (b int, c int); create table t4 (y int, c int); create table t5 (y int, z int); insert into t1 values (3,2); insert into t2 values (1,2); insert into t3 values (2,3); insert into t4 values (1,3); insert into t5 values (1,4); -- this fails prepare stmt1 from "select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5"; execute stmt1; -- this works select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5; drop table t1, t2, t3, t4, t5; # End of tests for WL#2486 - natural/using join sql/sql_base.cc +11 −11 Original line number Diff line number Diff line Loading @@ -4184,10 +4184,6 @@ static bool setup_natural_join_row_types(THD *thd, if (from_clause->elements == 0) return FALSE; /* We come here in the case of UNIONs. */ /* For stored procedures do not redo work if already done. */ if (!context->select_lex->first_execution) return FALSE; List_iterator_fast<TABLE_LIST> table_ref_it(*from_clause); TABLE_LIST *table_ref; /* Current table reference. */ /* Table reference to the left of the current. */ Loading @@ -4200,6 +4196,9 @@ static bool setup_natural_join_row_types(THD *thd, { table_ref= left_neighbor; left_neighbor= table_ref_it++; /* For stored procedures do not redo work if already done. */ if (context->select_lex->first_execution) { if (store_top_level_join_columns(thd, table_ref, left_neighbor, right_neighbor)) return TRUE; Loading @@ -4209,6 +4208,7 @@ static bool setup_natural_join_row_types(THD *thd, first_leaf_on_the_right= table_ref->first_leaf_for_name_resolution(); left_neighbor->next_name_resolution_table= first_leaf_on_the_right; } } right_neighbor= table_ref; } Loading Loading
mysql-test/r/join.result +20 −0 Original line number Diff line number Diff line Loading @@ -744,3 +744,23 @@ select a2 from ((t1 natural join t2) join t3 on b=c1) natural join t4; a2 1 drop table t1,t2,t3,t4; create table t1 (c int, b int); create table t2 (a int, b int); create table t3 (b int, c int); create table t4 (y int, c int); create table t5 (y int, z int); insert into t1 values (3,2); insert into t2 values (1,2); insert into t3 values (2,3); insert into t4 values (1,3); insert into t5 values (1,4); prepare stmt1 from "select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5"; execute stmt1; y c b a z 1 3 2 1 4 select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5; y c b a z 1 3 2 1 4 drop table t1, t2, t3, t4, t5;
mysql-test/t/join.test +25 −0 Original line number Diff line number Diff line Loading @@ -563,4 +563,29 @@ select a2 from ((t1 natural join t2) join t3 on b=c1) natural join t4; drop table t1,t2,t3,t4; # # BUG#15355: Common natural join column not resolved in prepared statement nested query # create table t1 (c int, b int); create table t2 (a int, b int); create table t3 (b int, c int); create table t4 (y int, c int); create table t5 (y int, z int); insert into t1 values (3,2); insert into t2 values (1,2); insert into t3 values (2,3); insert into t4 values (1,3); insert into t5 values (1,4); -- this fails prepare stmt1 from "select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5"; execute stmt1; -- this works select * from ((t3 natural join (t1 natural join t2)) natural join t4) natural join t5; drop table t1, t2, t3, t4, t5; # End of tests for WL#2486 - natural/using join
sql/sql_base.cc +11 −11 Original line number Diff line number Diff line Loading @@ -4184,10 +4184,6 @@ static bool setup_natural_join_row_types(THD *thd, if (from_clause->elements == 0) return FALSE; /* We come here in the case of UNIONs. */ /* For stored procedures do not redo work if already done. */ if (!context->select_lex->first_execution) return FALSE; List_iterator_fast<TABLE_LIST> table_ref_it(*from_clause); TABLE_LIST *table_ref; /* Current table reference. */ /* Table reference to the left of the current. */ Loading @@ -4200,6 +4196,9 @@ static bool setup_natural_join_row_types(THD *thd, { table_ref= left_neighbor; left_neighbor= table_ref_it++; /* For stored procedures do not redo work if already done. */ if (context->select_lex->first_execution) { if (store_top_level_join_columns(thd, table_ref, left_neighbor, right_neighbor)) return TRUE; Loading @@ -4209,6 +4208,7 @@ static bool setup_natural_join_row_types(THD *thd, first_leaf_on_the_right= table_ref->first_leaf_for_name_resolution(); left_neighbor->next_name_resolution_table= first_leaf_on_the_right; } } right_neighbor= table_ref; } Loading