List:Commits« Previous MessageNext Message »
From:kroki Date:June 25 2006 11:57am
Subject:bk commit into 5.1 tree (kroki:1.2208) BUG#20230
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of tomash. When tomash 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.2208 06/06/25 13:57:48 kroki@stripped +4 -0
  Bug#20230: routine_definition is not null
  
  SHOW CREATE PROCEDURE and SHOW CREATE FUNCTION are fixed as well as
  INFORMATION_SCHEMA.ROUTINES.ROUTINE_NAME.

  sql/sql_show.cc
    1.354 06/06/24 19:48:34 kroki@stripped +2 -1
    Make INFORMATION_SCHEMA.ROUTINES.ROUTINE_NAME NULL-able.  Return NULL if
    the user doesn't have enough privilege to see routine definition.

  sql/sp_head.cc
    1.224 06/06/24 19:48:33 kroki@stripped +14 -4
    Return NULL for routine definition if the user doesn't have enough privilege
    to see it.

  mysql-test/t/information_schema.test
    1.83 06/06/24 19:48:33 kroki@stripped +35 -0
    Add test case for bug#20230.

  mysql-test/r/information_schema.result
    1.125 06/06/24 19:48:32 kroki@stripped +44 -8
    Add result for bug#20230.

# 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:	kroki
# Host:	moonlight.intranet
# Root:	/home/tomash/src/mysql_ab/mysql-5.1-bug20230

--- 1.353/sql/sql_show.cc	2006-06-22 18:59:52 +04:00
+++ 1.354/sql/sql_show.cc	2006-06-24 19:48:34 +04:00
@@ -3279,6 +3279,7 @@
       {
         get_field(thd->mem_root, proc_table->field[10], &tmp_string);
         table->field[7]->store(tmp_string.ptr(), tmp_string.length(), cs);
+        table->field[7]->set_notnull();
       }
       table->field[6]->store(STRING_WITH_LEN("SQL"), cs);
       table->field[10]->store(STRING_WITH_LEN("SQL"), cs);
@@ -5204,7 +5205,7 @@
   {"ROUTINE_TYPE", 9, MYSQL_TYPE_STRING, 0, 0, "Type"},
   {"DTD_IDENTIFIER", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
   {"ROUTINE_BODY", 8, MYSQL_TYPE_STRING, 0, 0, 0},
-  {"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 0, 0},
+  {"ROUTINE_DEFINITION", 65535, MYSQL_TYPE_STRING, 0, 1, 0},
   {"EXTERNAL_NAME", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
   {"EXTERNAL_LANGUAGE", NAME_LEN, MYSQL_TYPE_STRING, 0, 1, 0},
   {"PARAMETER_STYLE", 8, MYSQL_TYPE_STRING, 0, 0, 0},

--- 1.124/mysql-test/r/information_schema.result	2006-06-14 12:50:14 +04:00
+++ 1.125/mysql-test/r/information_schema.result	2006-06-24 19:48:32 +04:00
@@ -308,26 +308,26 @@
 ERROR 42000: FUNCTION sub1 does not exist
 select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
 ROUTINE_NAME	ROUTINE_DEFINITION
-sel2	
-sub1	
+sel2	NULL
+sub1	NULL
 grant all privileges on test.* to mysqltest_1@localhost;
 select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
 ROUTINE_NAME	ROUTINE_DEFINITION
-sel2	
-sub1	
+sel2	NULL
+sub1	NULL
 create function sub2(i int) returns int
 return i+1;
 select ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES;
 ROUTINE_NAME	ROUTINE_DEFINITION
-sel2	
-sub1	
+sel2	NULL
+sub1	NULL
 sub2	return i+1
 show create procedure sel2;
 Procedure	sql_mode	Create Procedure
-sel2		
+sel2		NULL
 show create function sub1;
 Function	sql_mode	Create Function
-sub1		
+sub1		NULL
 show create function sub2;
 Function	sql_mode	Create Function
 sub2		CREATE DEFINER=`mysqltest_1`@`localhost` FUNCTION `sub2`(i int) RETURNS int(11)
@@ -1188,3 +1188,39 @@
 user	db
 user3148	test
 drop user user3148@localhost;
+DROP PROCEDURE IF EXISTS p1;
+DROP FUNCTION IF EXISTS f1;
+CREATE PROCEDURE p1() SET @a= 1;
+CREATE FUNCTION f1() RETURNS INT RETURN @a + 1;
+CREATE USER mysql_bug20230@localhost;
+GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
+GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
+ROUTINE_NAME	ROUTINE_DEFINITION
+f1	RETURN @a + 1
+p1	SET @a= 1
+SHOW CREATE PROCEDURE p1;
+Procedure	sql_mode	Create Procedure
+p1		CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
+SET @a= 1
+SHOW CREATE FUNCTION f1;
+Function	sql_mode	Create Function
+f1		CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
+RETURN @a + 1
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
+ROUTINE_NAME	ROUTINE_DEFINITION
+f1	NULL
+p1	NULL
+SHOW CREATE PROCEDURE p1;
+Procedure	sql_mode	Create Procedure
+p1		NULL
+SHOW CREATE FUNCTION f1;
+Function	sql_mode	Create Function
+f1		NULL
+CALL p1();
+SELECT f1();
+f1()
+2
+DROP FUNCTION f1;
+DROP PROCEDURE p1;
+DROP USER mysql_bug20230@localhost;

--- 1.82/mysql-test/t/information_schema.test	2006-06-14 09:54:50 +04:00
+++ 1.83/mysql-test/t/information_schema.test	2006-06-24 19:48:33 +04:00
@@ -875,3 +875,38 @@
 connection default;
 drop user user3148@localhost;
 
+
+#
+# Bug#20230: routine_definition is not null
+#
+--disable_warnings
+DROP PROCEDURE IF EXISTS p1;
+DROP FUNCTION IF EXISTS f1;
+--enable_warnings
+
+CREATE PROCEDURE p1() SET @a= 1;
+CREATE FUNCTION f1() RETURNS INT RETURN @a + 1;
+CREATE USER mysql_bug20230@localhost;
+GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
+GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
+
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
+SHOW CREATE PROCEDURE p1;
+SHOW CREATE FUNCTION f1;
+
+connect (conn1, localhost, mysql_bug20230,,);
+
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
+SHOW CREATE PROCEDURE p1;
+SHOW CREATE FUNCTION f1;
+CALL p1();
+SELECT f1();
+
+disconnect conn1;
+connection default;
+
+DROP FUNCTION f1;
+DROP PROCEDURE p1;
+DROP USER mysql_bug20230@localhost;
+
+# End of 5.1 tests.

--- 1.223/sql/sp_head.cc	2006-06-04 20:23:41 +04:00
+++ 1.224/sql/sp_head.cc	2006-06-24 19:48:33 +04:00
@@ -1942,8 +1942,11 @@
   field_list.push_back(new Item_empty_string("Procedure", NAME_LEN));
   field_list.push_back(new Item_empty_string("sql_mode", sql_mode_len));
   // 1024 is for not to confuse old clients
-  field_list.push_back(new Item_empty_string("Create Procedure",
-					     max(buffer.length(), 1024)));
+  Item_empty_string *definition=
+    new Item_empty_string("Create Procedure", max(buffer.length(),1024));
+  definition->maybe_null= TRUE;
+  field_list.push_back(definition);
+
   if (protocol->send_fields(&field_list, Protocol::SEND_NUM_ROWS |
                                          Protocol::SEND_EOF))
     DBUG_RETURN(1);
@@ -1952,6 +1955,8 @@
   protocol->store((char*) sql_mode_str, sql_mode_len, system_charset_info);
   if (full_access)
     protocol->store(m_defstr.str, m_defstr.length, system_charset_info);
+  else
+    protocol->store_null();
   res= protocol->write();
   send_eof(thd);
 
@@ -2007,8 +2012,11 @@
                                                        &sql_mode_len);
   field_list.push_back(new Item_empty_string("Function",NAME_LEN));
   field_list.push_back(new Item_empty_string("sql_mode", sql_mode_len));
-  field_list.push_back(new Item_empty_string("Create Function",
-					     max(buffer.length(),1024)));
+  Item_empty_string *definition=
+    new Item_empty_string("Create Function", max(buffer.length(),1024));
+  definition->maybe_null= TRUE;
+  field_list.push_back(definition);
+
   if (protocol->send_fields(&field_list,
                             Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
     DBUG_RETURN(1);
@@ -2017,6 +2025,8 @@
   protocol->store((char*) sql_mode_str, sql_mode_len, system_charset_info);
   if (full_access)
     protocol->store(m_defstr.str, m_defstr.length, system_charset_info);
+  else
+    protocol->store_null();
   res= protocol->write();
   send_eof(thd);
 
Thread
bk commit into 5.1 tree (kroki:1.2208) BUG#20230kroki25 Jun