#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#41569 | lars-erik.bjork | 13 Nov |