Loading mysql-test/r/sp.result +18 −0 Original line number Diff line number Diff line Loading @@ -6820,6 +6820,24 @@ ttt 2 drop function func30787; drop table t1; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1),(2),(3),(4); CREATE PROCEDURE test_sp() SELECT t1.* FROM t1 RIGHT JOIN t1 t2 ON t1.id=t2.id; CALL test_sp(); id 1 2 3 4 CALL test_sp(); id 1 2 3 4 DROP PROCEDURE test_sp; DROP TABLE t1; create table t1(c1 INT); create function f1(p1 int) returns varchar(32) return 'aaa'; Loading mysql-test/t/sp.test +17 −1 Original line number Diff line number Diff line Loading @@ -7997,8 +7997,24 @@ select (select func30787(f1)) as ttt from t1; drop function func30787; drop table t1; ########################################################################### # # Bug #33811: Call to stored procedure with SELECT * / RIGHT JOIN fails # after the first time # CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1),(2),(3),(4); CREATE PROCEDURE test_sp() SELECT t1.* FROM t1 RIGHT JOIN t1 t2 ON t1.id=t2.id; CALL test_sp(); CALL test_sp(); DROP PROCEDURE test_sp; DROP TABLE t1; ########################################################################### # # Bug#38291 memory corruption and server crash with view/sp/function # Loading sql/sql_base.cc +4 −0 Original line number Diff line number Diff line Loading @@ -7768,6 +7768,10 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, if (!(item= field_iterator.create_item(thd))) DBUG_RETURN(TRUE); DBUG_ASSERT(item->fixed); /* cache the table for the Item_fields inserted by expanding stars */ if (item->type() == Item::FIELD_ITEM && tables->cacheable_table) ((Item_field *)item)->cached_table= tables; if (!found) { Loading sql/sql_select.cc +12 −2 Original line number Diff line number Diff line Loading @@ -8586,6 +8586,8 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top) } /* Flatten nested joins that can be flattened. */ TABLE_LIST *right_neighbor= NULL; bool fix_name_res= FALSE; li.rewind(); while ((table= li++)) { Loading @@ -8600,7 +8602,15 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top) tbl->join_list= table->join_list; } li.replace(nested_join->join_list); } /* Need to update the name resolution table chain when flattening joins */ fix_name_res= TRUE; table= *li.ref(); } if (fix_name_res) table->next_name_resolution_table= right_neighbor ? right_neighbor->first_leaf_for_name_resolution() : NULL; right_neighbor= table; } DBUG_RETURN(conds); } Loading Loading
mysql-test/r/sp.result +18 −0 Original line number Diff line number Diff line Loading @@ -6820,6 +6820,24 @@ ttt 2 drop function func30787; drop table t1; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1),(2),(3),(4); CREATE PROCEDURE test_sp() SELECT t1.* FROM t1 RIGHT JOIN t1 t2 ON t1.id=t2.id; CALL test_sp(); id 1 2 3 4 CALL test_sp(); id 1 2 3 4 DROP PROCEDURE test_sp; DROP TABLE t1; create table t1(c1 INT); create function f1(p1 int) returns varchar(32) return 'aaa'; Loading
mysql-test/t/sp.test +17 −1 Original line number Diff line number Diff line Loading @@ -7997,8 +7997,24 @@ select (select func30787(f1)) as ttt from t1; drop function func30787; drop table t1; ########################################################################### # # Bug #33811: Call to stored procedure with SELECT * / RIGHT JOIN fails # after the first time # CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1),(2),(3),(4); CREATE PROCEDURE test_sp() SELECT t1.* FROM t1 RIGHT JOIN t1 t2 ON t1.id=t2.id; CALL test_sp(); CALL test_sp(); DROP PROCEDURE test_sp; DROP TABLE t1; ########################################################################### # # Bug#38291 memory corruption and server crash with view/sp/function # Loading
sql/sql_base.cc +4 −0 Original line number Diff line number Diff line Loading @@ -7768,6 +7768,10 @@ insert_fields(THD *thd, Name_resolution_context *context, const char *db_name, if (!(item= field_iterator.create_item(thd))) DBUG_RETURN(TRUE); DBUG_ASSERT(item->fixed); /* cache the table for the Item_fields inserted by expanding stars */ if (item->type() == Item::FIELD_ITEM && tables->cacheable_table) ((Item_field *)item)->cached_table= tables; if (!found) { Loading
sql/sql_select.cc +12 −2 Original line number Diff line number Diff line Loading @@ -8586,6 +8586,8 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top) } /* Flatten nested joins that can be flattened. */ TABLE_LIST *right_neighbor= NULL; bool fix_name_res= FALSE; li.rewind(); while ((table= li++)) { Loading @@ -8600,7 +8602,15 @@ simplify_joins(JOIN *join, List<TABLE_LIST> *join_list, COND *conds, bool top) tbl->join_list= table->join_list; } li.replace(nested_join->join_list); } /* Need to update the name resolution table chain when flattening joins */ fix_name_res= TRUE; table= *li.ref(); } if (fix_name_res) table->next_name_resolution_table= right_neighbor ? right_neighbor->first_leaf_for_name_resolution() : NULL; right_neighbor= table; } DBUG_RETURN(conds); } Loading