Commit 34d993ac authored by Georgi Kodinov's avatar Georgi Kodinov
Browse files

merged 5.0 bug 33811 -> 5.1 bug 33811 working tree

parents 54eaadf0 ccef156a
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -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';
+17 −1
Original line number Diff line number Diff line
@@ -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
#
+4 −0
Original line number Diff line number Diff line
@@ -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)
      {
+12 −2
Original line number Diff line number Diff line
@@ -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++))
  {
@@ -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); 
}