Commit d90a8262 authored by gshchepa/uchum@gleb.loc's avatar gshchepa/uchum@gleb.loc
Browse files

Merge gshchepa@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  gleb.loc:/home/uchum/work/bk/5.0-opt
parents 72311008 a077dd8f
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
use test;
drop table if exists t1,t2,t3,t4;
drop view if exists v1;
drop procedure if exists p1;
drop procedure if exists p2;
drop function if exists f1;
drop function if exists f2;
create table t1 (
@@ -6178,6 +6181,73 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VI
DROP VIEW v1;
DROP FUNCTION metered;
DROP TABLE t1;
SET @p1_p2_cnt= 2;
CREATE TABLE t1 (c1 INT);
CREATE VIEW v1 AS SELECT * FROM t1;
PREPARE s1 FROM 'SELECT c1 FROM v1';
EXECUTE s1;
c1
EXECUTE s1;
c1
CREATE PROCEDURE p1(IN loops BIGINT(19) UNSIGNED)
BEGIN
WHILE loops > 0 DO
SELECT c1 FROM v1;
SET loops = loops - 1;
END WHILE;
END|
CREATE PROCEDURE p2(IN loops BIGINT(19) UNSIGNED)
BEGIN
WHILE loops > 0 DO
SELECT c1 FROM v1;
CALL p1(@p1_p2_cnt);
SET loops = loops - 1;
END WHILE;
END|
CREATE FUNCTION f1(loops INT UNSIGNED)
RETURNS INT
BEGIN
DECLARE tmp INT;
WHILE loops > 0 DO
SELECT c1 INTO tmp FROM v1;
SET loops = loops - 1;
END WHILE;
RETURN loops;
END|
CALL p1(2);
c1
c1
CALL p2(2);
c1
c1
c1
c1
c1
c1
SELECT f1(2);
f1(2)
0
Warnings:
Warning	1329	No data - zero rows fetched, selected, or processed
Warning	1329	No data - zero rows fetched, selected, or processed
PREPARE s1 FROM 'SELECT f1(2)';
EXECUTE s1;
f1(2)
0
Warnings:
Warning	1329	No data - zero rows fetched, selected, or processed
Warning	1329	No data - zero rows fetched, selected, or processed
EXECUTE s1;
f1(2)
0
Warnings:
Warning	1329	No data - zero rows fetched, selected, or processed
Warning	1329	No data - zero rows fetched, selected, or processed
DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP FUNCTION f1;
DROP VIEW v1;
DROP TABLE t1;
drop database if exists mysqltest_db1;
create database mysqltest_db1;
create procedure mysqltest_db1.sp_bug28551() begin end;
+74 −0
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@ use test;
#
--disable_warnings
drop table if exists t1,t2,t3,t4;
drop view if exists v1;
drop procedure if exists p1;
drop procedure if exists p2;
drop function if exists f1;
drop function if exists f2;
--enable_warnings
@@ -7136,6 +7139,77 @@ DROP VIEW v1;
DROP FUNCTION metered;
DROP TABLE t1;

#
# Bug#29834: Accessing a view column by name in SP/PS causes a memory leak.
#
# This is leak test. Run with large number assigned to $execute_cnt,
# $p1_cnt, $p2_cnt, @p1_p2_cnt, $f1_normal_cnt or $f1_prep_cnt variables.
#

let $execute_cnt= 2;
let $p1_cnt= 2;
let $p2_cnt= 2;
SET @p1_p2_cnt= 2;
let $f1_normal_cnt= 2;
let $f1_prep_cnt= 2;

CREATE TABLE t1 (c1 INT);
CREATE VIEW v1 AS SELECT * FROM t1;

PREPARE s1 FROM 'SELECT c1 FROM v1';
while ($execute_cnt)
{
  EXECUTE s1;
  dec $execute_cnt;
}

DELIMITER |;

CREATE PROCEDURE p1(IN loops BIGINT(19) UNSIGNED)
BEGIN
  WHILE loops > 0 DO
    SELECT c1 FROM v1;
    SET loops = loops - 1;
  END WHILE;
END|

CREATE PROCEDURE p2(IN loops BIGINT(19) UNSIGNED)
BEGIN
  WHILE loops > 0 DO
    SELECT c1 FROM v1;
    CALL p1(@p1_p2_cnt);
    SET loops = loops - 1;
  END WHILE;
END|

CREATE FUNCTION f1(loops INT UNSIGNED)
  RETURNS INT
BEGIN
  DECLARE tmp INT;
  WHILE loops > 0 DO
    SELECT c1 INTO tmp FROM v1;
    SET loops = loops - 1;
  END WHILE;
  RETURN loops;
END|

DELIMITER ;|

eval CALL p1($p1_cnt);
eval CALL p2($p2_cnt);

eval SELECT f1($f1_normal_cnt);

eval PREPARE s1 FROM 'SELECT f1($f1_prep_cnt)';
EXECUTE s1;
EXECUTE s1;

DROP PROCEDURE p1;
DROP PROCEDURE p2;
DROP FUNCTION f1;
DROP VIEW v1;
DROP TABLE t1;

#
# Bug#28551 "The warning 'No database selected' is reported when calling
# stored procedures"
+3 −3
Original line number Diff line number Diff line
@@ -3428,7 +3428,7 @@ find_field_in_view(THD *thd, TABLE_LIST *table_list,
              table_list->alias, name, item_name, (ulong) ref));
  Field_iterator_view field_it;
  field_it.set(table_list);
  Query_arena *arena, backup;  
  Query_arena *arena= 0, backup;  
  
  DBUG_ASSERT(table_list->schema_table_reformed ||
              (ref != 0 && table_list->view != 0));
@@ -3437,14 +3437,14 @@ find_field_in_view(THD *thd, TABLE_LIST *table_list,
    if (!my_strcasecmp(system_charset_info, field_it.name(), name))
    {
      // in PS use own arena or data will be freed after prepare
      if (register_tree_change)
      if (register_tree_change && thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
        arena= thd->activate_stmt_arena_if_needed(&backup);
      /*
        create_item() may, or may not create a new Item, depending on
        the column reference. See create_view_field() for details.
      */
      Item *item= field_it.create_item(thd);
      if (register_tree_change && arena)
      if (arena)
        thd->restore_active_arena(arena, &backup);
      
      if (!item)