MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:lars-erik.bjork Date:November 13 2009 9:55am
Subject:bzr commit into mysql-5.1-bugteam branch (lars-erik.bjork:3200) Bug#41569
View as plain text  
#At file:///home/lb200670/mysql/41569-mysql-5.1-bugteam/ based on revid:alexey.kopytov@stripped

 3200 lars-erik.bjork@stripped	2009-11-13
      This is a patch for bug#41569.
      "mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table but does
      not set values".
      
      mysql_upgrade (ver 5.1) adds 3 fields (character_set_client, 
      collation_connection and db_collation) to the mysql.proc table, but 
      does not set any values. When we run stored procedures, which were 
      created with mysql 5.0, a warning is logged into the error log.
      
      The solution to this is for mysql_upgrade to set default best guess values
      for these fields. A warning is also written during upgrade, to make the
      user aware that default values are set.
      
      This patch still lacks a test, so this is not a complete commit.
     @ client/mysql_upgrade.c
        Result lines which start with "WARNING" are passed through to the output. This way we have a way of triggering WARNING-messages during upgrade directly from the .sql-script.
     @ scripts/mysql_system_tables_fix.sql
        The new fields are populated, and warnings is written.

    modified:
      client/mysql_upgrade.c
      scripts/mysql_system_tables_fix.sql
=== modified file 'client/mysql_upgrade.c'
--- a/client/mysql_upgrade.c	2009-09-28 06:24:19 +0000
+++ b/client/mysql_upgrade.c	2009-11-13 09:55:37 +0000
@@ -720,6 +720,15 @@ static my_bool is_expected_error(const c
 }
 
 
+static my_bool is_warning(const char* line)
+{
+  if (strncmp(line, "WARNING", 7) == 0) 
+    return 1;
+  else 
+    return 0;
+}
+
+
 static char* get_line(char* line)
 {
   while (*line && *line != '\n')
@@ -778,6 +787,10 @@ static int run_sql_fix_privilege_tables(
         found_real_errors++;
         print_line(line);
       }
+      else if (is_warning(line))
+      {
+	print_line(line);
+      }
     } while ((line= get_line(line)) && *line);
   }
 

=== modified file 'scripts/mysql_system_tables_fix.sql'
--- a/scripts/mysql_system_tables_fix.sql	2009-10-27 10:09:36 +0000
+++ b/scripts/mysql_system_tables_fix.sql	2009-11-13 09:55:37 +0000
@@ -415,18 +415,48 @@ ALTER TABLE proc ADD character_set_clien
 ALTER TABLE proc MODIFY character_set_client
                         char(32) collate utf8_bin DEFAULT NULL;
 
+SELECT CASE WHEN COUNT(*) > 0 THEN 
+'WARNING: Defaults set for mysql.proc.character_set_client fields with a value of null' 
+ELSE null 
+END 
+AS value FROM proc where character_set_client is null;
+
+UPDATE proc SET character_set_client = @@character_set_client 
+       	                WHERE character_set_client is NULL;
+
 ALTER TABLE proc ADD collation_connection
                      char(32) collate utf8_bin DEFAULT NULL
                      AFTER character_set_client;
 ALTER TABLE proc MODIFY collation_connection
                         char(32) collate utf8_bin DEFAULT NULL;
 
+SELECT CASE WHEN COUNT(*) > 0 THEN 
+'WARNING: Defaults set for mysql.proc.collation_connection fields with a value of null' 
+ELSE null 
+END 
+AS value FROM proc where collation_connection is null;
+
+UPDATE proc SET collation_connection = @@collation_connection
+       	                WHERE collation_connection is NULL;
+
 ALTER TABLE proc ADD db_collation
                      char(32) collate utf8_bin DEFAULT NULL
                      AFTER collation_connection;
 ALTER TABLE proc MODIFY db_collation
                         char(32) collate utf8_bin DEFAULT NULL;
 
+SELECT CASE WHEN COUNT(*) > 0 THEN 
+'WARNING: Defaults set for mysql.proc.db_collation fields with a value of null' 
+ELSE null 
+END 
+AS value FROM proc where db_collation is null;
+
+UPDATE proc AS t1 SET db_collation  = 
+                        ( SELECT DEFAULT_COLLATION_NAME 
+                          FROM INFORMATION_SCHEMA.SCHEMATA 
+                          WHERE SCHEMA_NAME = t1.db)
+                        WHERE db_collation is NULL;
+
 ALTER TABLE proc ADD body_utf8 longblob DEFAULT NULL
                      AFTER db_collation;
 ALTER TABLE proc MODIFY body_utf8 longblob DEFAULT NULL;


Attachment: [text/bzr-bundle] bzr/lars-erik.bjork@sun.com-20091113095537-83j1x1r3nx93r4ni.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (lars-erik.bjork:3200) Bug#41569lars-erik.bjork13 Nov