List:Commits« Previous MessageNext Message »
From:pem Date:April 21 2006 12:03pm
Subject:bk commit into 5.0 tree (pem:1.2075) BUG#17843
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of pem. When pem does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2075 06/04/21 14:03:49 pem@stripped +7 -0
  Addition to patch: BUG#17843: Certain stored procedures fail to run at startup
    Added test cases to init_file.test and init_connect.test, for
    stored routines, cursors, views, and triggers.
    Note that what can be done in init_file is very limited - only "one liners"
    and no multiple statement procedures.
    A minor fix was required in mysql-test-run.sh to prevent inteference betweeen
    init_file.test and ndb tests.
    Also fixed a missing init. of Security_context::priv_host.

  sql/sql_class.cc
    1.229 06/04/21 14:03:45 pem@stripped +1 -0
    Initialize Security_context::priv_host to empty string;
    when executing an init-file, sql_parse.cc:get_default_definer()
    will use this when it's not set otherwise.

  mysql-test/t/init_file.test
    1.8 06/04/21 14:03:45 pem@stripped +18 -0
    Added tests of stored routines, views and triggers.
    The actual tests are in std_data/init_file.dat, here we just
    check the results, and clean up.

  mysql-test/t/init_connect.test
    1.6 06/04/21 14:03:45 pem@stripped +194 -0
    Added tests of stored routines, views, and triggers.

  mysql-test/std_data/init_file.dat
    1.6 06/04/21 14:03:45 pem@stripped +26 -0
    Added tests of stored routines, views and triggers.
    We check the results in init_file.test.
    
    Note that the allowed syntax here is very restricted: only one-lines,
    no multiple statements (i.e. no "delimiter"), no comments.
    Also, this is executed with a dummy user "boot@", which calls for the
    use of "definer=...". In the trigger case, "definer=..." should be
    used too, but it works without it, and leaving it out triggered(!)
    a bug.

  mysql-test/r/init_file.result
    1.2 06/04/21 14:03:45 pem@stripped +17 -0
    Updated results for tests of stored routines, views and triggers.

  mysql-test/r/init_connect.result
    1.5 06/04/21 14:03:45 pem@stripped +114 -0
    Updated results for tests of stored routines, views, and triggers.

  mysql-test/mysql-test-run.sh
    1.299 06/04/21 14:03:45 pem@stripped +10 -0
    Don't use --init-file option for master 1, to avoid interference
    between init_file.test and ndb tests.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	pem
# Host:	pem.mysql.com
# Root:	/extern/mysql/5.0/bug17843/mysql-5.0-runtime

--- 1.298/mysql-test/mysql-test-run.sh	2006-03-06 23:43:19 +01:00
+++ 1.299/mysql-test/mysql-test-run.sh	2006-04-21 14:03:45 +02:00
@@ -1746,6 +1746,16 @@
      report_current_test $tname
      start_master
      if [ -n "$USE_NDBCLUSTER" -a -z "$DO_BENCH" -a -z "$DO_STRESS" ] ; then
+       # Don't use init-file for master 1
+       # This is necessary since since master 1 is started for other tests
+       # in the same run, not just the ndb tests, which causes problems
+       # when init_file.test is one of them.
+       case "$EXTRA_MASTER_OPT" in
+         --init-file=*)
+	   # Note that this must be set to space, not "" for test-reset to work
+	   EXTRA_MASTER_OPT=" "
+           ;;
+       esac
        start_master 1
      fi
      TZ=$MY_TZ; export TZ

--- 1.228/sql/sql_class.cc	2006-02-24 17:34:09 +01:00
+++ 1.229/sql/sql_class.cc	2006-04-21 14:03:45 +02:00
@@ -1862,6 +1862,7 @@
 void Security_context::init()
 {
   host= user= priv_user= ip= 0;
+  priv_host[0]= '\0';
   host_or_ip= "connecting host";
 #ifndef NO_EMBEDDED_ACCESS_CHECKS
   db_access= NO_ACCESS;

--- 1.4/mysql-test/r/init_connect.result	2004-12-16 11:41:47 +01:00
+++ 1.5/mysql-test/r/init_connect.result	2006-04-21 14:03:45 +02:00
@@ -22,3 +22,117 @@
 select @a;
 Got one of the listed errors
 drop table t1;
+create table t1 ( x int );
+insert into t1 values (3), (5), (7);
+create table t2 ( y int );
+create user user1@localhost;
+grant all privileges on test.* to user1@localhost;
+set global init_connect="create procedure p1() select * from t1";
+call p1();
+x
+3
+5
+7
+drop procedure p1;
+set global init_connect="create procedure p1(x int)\
+begin\
+  select count(*) from t1;\
+  select * from t1;\
+  set @x = x;
+end";
+call p1(42);
+count(*)
+3
+x
+3
+5
+7
+select @x;
+@x
+42
+set global init_connect="call p1(4711)";
+select @x;
+@x
+4711
+drop procedure p1;
+set global init_connect="drop procedure if exists p1";
+call p1();
+ERROR 42000: PROCEDURE test.p1 does not exist
+create procedure p1(out sum int)
+begin
+declare n int default 0;
+declare c cursor for select * from t1;
+declare exit handler for not found
+begin
+close c;
+set sum = n;
+end;
+open c;
+loop
+begin
+declare x int;
+fetch c into x;
+if x > 3 then
+set n = n + x;
+end if;
+end;
+end loop;
+end//
+set global init_connect="call p1(@sum)";
+select @sum;
+@sum
+12
+drop procedure p1;
+create procedure p1(tbl char(10), v int)
+begin
+set @s = concat('insert into ', tbl, ' values (?)');
+set @v = v;
+prepare stmt1 from @s;
+execute stmt1 using @v;
+deallocate prepare stmt1;
+end//
+set global init_connect="call p1('t1', 11)";
+select * from t1;
+x
+3
+5
+7
+11
+drop procedure p1;
+create function f1() returns int
+begin
+declare n int;
+select count(*) into n from t1;
+return n;
+end//
+set global init_connect="set @x = f1()";
+select @x;
+@x
+4
+set global init_connect="create view v1 as select f1()";
+select * from v1;
+f1()
+4
+set global init_connect="drop view v1";
+select * from v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+drop function f1;
+create trigger trg1
+after insert on t2
+for each row
+insert into t1 values (new.y);
+set global init_connect="insert into t2 values (13), (17), (19)";
+select * from t1;
+x
+3
+5
+7
+11
+13
+17
+19
+drop trigger trg1;
+set global init_connect=default;
+revoke all privileges, grant option from user1@localhost;
+drop user user1@localhost;
+drop table t1, t2;

--- 1.5/mysql-test/t/init_connect.test	2005-07-28 15:12:34 +02:00
+++ 1.6/mysql-test/t/init_connect.test	2006-04-21 14:03:45 +02:00
@@ -33,4 +33,198 @@
 connection con0;
 drop table t1;
 
+disconnect con1;
+disconnect con2;
+disconnect con3;
+disconnect con4;
+disconnect con5;
+
 # End of 4.1 tests
+
+#
+# Test 5.* features
+#
+
+create table t1 ( x int );
+insert into t1 values (3), (5), (7);
+create table t2 ( y int );
+
+create user user1@localhost;
+grant all privileges on test.* to user1@localhost;
+
+# Create simple procedure
+set global init_connect="create procedure p1() select * from t1";
+connect (con1,localhost,user1,,test);
+connection con1;
+call p1();
+drop procedure p1;
+
+connection con0;
+disconnect con1;
+
+# Create multi-result set procedure
+set global init_connect="create procedure p1(x int)\
+begin\
+  select count(*) from t1;\
+  select * from t1;\
+  set @x = x;
+end";
+connect (con1,localhost,user1,,test);
+connection con1;
+call p1(42);
+select @x;
+
+connection con0;
+disconnect con1;
+
+# Just call it - this will not generate any output
+set global init_connect="call p1(4711)";
+connect (con1,localhost,user1,,test);
+connection con1;
+select @x;
+drop procedure p1;
+
+connection con0;
+disconnect con1;
+
+# Drop procedure
+set global init_connect="drop procedure if exists p1";
+connect (con1,localhost,user1,,test);
+connection con1;
+--error ER_SP_DOES_NOT_EXIST
+call p1();
+
+connection con0;
+disconnect con1;
+
+delimiter //;
+create procedure p1(out sum int)
+begin
+  declare n int default 0;
+  declare c cursor for select * from t1;
+  declare exit handler for not found
+    begin
+      close c;
+      set sum = n;
+    end;
+
+  open c;
+  loop
+    begin
+      declare x int;
+
+      fetch c into x;
+      if x > 3 then
+        set n = n + x;
+      end if;
+    end;
+  end loop;
+end//
+delimiter ;//
+
+# Call procedure with cursor
+set global init_connect="call p1(@sum)";
+connect (con1,localhost,user1,,test);
+connection con1;
+select @sum;
+
+connection con0;
+disconnect con1;
+drop procedure p1;
+
+delimiter //;
+create procedure p1(tbl char(10), v int)
+begin
+  set @s = concat('insert into ', tbl, ' values (?)');
+  set @v = v;
+  prepare stmt1 from @s;
+  execute stmt1 using @v;
+  deallocate prepare stmt1;
+end//
+delimiter ;//
+
+# Call procedure with prepared statements
+set global init_connect="call p1('t1', 11)";
+connect (con1,localhost,user1,,test);
+connection con1;
+select * from t1;
+
+connection con0;
+disconnect con1;
+drop procedure p1;
+
+delimiter //;
+create function f1() returns int
+begin
+  declare n int;
+
+  select count(*) into n from t1;
+  return n;
+end//
+delimiter ;//
+
+# Invoke function
+set global init_connect="set @x = f1()";
+connect (con1,localhost,user1,,test);
+connection con1;
+select @x;
+
+connection con0;
+disconnect con1;
+
+# Create view
+set global init_connect="create view v1 as select f1()";
+connect (con1,localhost,user1,,test);
+connection con1;
+select * from v1;
+
+connection con0;
+disconnect con1;
+
+# Drop view
+set global init_connect="drop view v1";
+connect (con1,localhost,user1,,test);
+connection con1;
+--error ER_NO_SUCH_TABLE
+select * from v1;
+
+connection con0;
+disconnect con1;
+drop function f1;
+
+# We can't test "create trigger", since this requires super privileges
+# in 5.0, but with super privileges, init_connect is not executed.
+# (However, this can be tested in 5.1)
+#
+#set global init_connect="create trigger trg1\
+#  after insert on t2\
+#  for each row\
+#  insert into t1 values (new.y)";
+#connect (con1,localhost,user1,,test);
+#connection con1;
+#insert into t2 values (2), (4);
+#select * from t1;
+#
+#connection con0;
+#disconnect con1;
+
+create trigger trg1
+  after insert on t2
+  for each row
+  insert into t1 values (new.y);
+
+# Invoke trigger
+set global init_connect="insert into t2 values (13), (17), (19)";
+connect (con1,localhost,user1,,test);
+connection con1;
+select * from t1;
+
+connection con0;
+disconnect con1;
+
+drop trigger trg1;
+set global init_connect=default;
+
+revoke all privileges, grant option from user1@localhost;
+drop user user1@localhost;
+drop table t1, t2;

--- 1.1/mysql-test/r/init_file.result	2005-12-06 21:28:07 +01:00
+++ 1.2/mysql-test/r/init_file.result	2006-04-21 14:03:45 +02:00
@@ -1 +1,18 @@
 ok
+select * from t1;
+x
+3
+5
+7
+11
+13
+select * from t2;
+y
+30
+3
+11
+13
+drop procedure p1;
+drop function f1;
+drop view v1;
+drop table t1, t2;

--- 1.5/mysql-test/std_data/init_file.dat	2005-10-17 17:08:52 +02:00
+++ 1.6/mysql-test/std_data/init_file.dat	2006-04-21 14:03:45 +02:00
@@ -1 +1,27 @@
 select * from mysql.user as t1, mysql.user as t2, mysql.user as t3;
+
+use test;
+
+drop table if exists t1;
+create table t1 (x int);
+drop table if exists t2;
+create table t2 (y int);
+
+drop procedure if exists p1;
+create definer=root@localhost procedure p1() select * from t1;
+call p1();
+drop procedure p1;
+
+create definer=root@localhost procedure p1() insert into t1 values (3),(5),(7);
+call p1();
+
+drop function if exists f1;
+create definer=root@localhost function f1() returns int return (select count(*) from t1);
+insert into t2 set y = f1()*10;
+
+drop view if exists v1;
+create definer=root@localhost view v1 as select f1();
+insert into t2 (y) select * from v1;
+
+create trigger trg1 after insert on t2 for each row insert into t1 values (new.y);
+insert into t2 values (11), (13);

--- 1.7/mysql-test/t/init_file.test	2005-12-06 21:28:06 +01:00
+++ 1.8/mysql-test/t/init_file.test	2006-04-21 14:03:45 +02:00
@@ -8,3 +8,21 @@
 
 # End of 4.1 tests
 echo ok;
+
+# Check 5.x features done in init_file.dat
+
+# Expect:
+#   3,5,7 (insert in p1)
+#   11,13 (trigger in t2)
+select * from t1;
+
+# Expect:
+#   30    (from insert with f1()*10)
+#    3    (insert from v1)
+#   11,13 (insert into t2)
+select * from t2;
+
+drop procedure p1;
+drop function f1;
+drop view v1;
+drop table t1, t2;
Thread
bk commit into 5.0 tree (pem:1.2075) BUG#17843pem21 Apr