List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:March 12 2008 10:03pm
Subject:bk commit into 5.0 tree (cmiller:1.2572) BUG#34192
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of cmiller.  When cmiller 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@stripped, 2008-03-12 17:03:50-04:00, cmiller@stripped +1 -0
  Bug#34192: mysqldump from mysql 5.0.51 silently fails on dumping \
  	databases from 4.0 server
  
  mysqldump treated a failure to set the results charset as a severe
  error.  
  
  Now, don't try to set the charset for the SHOW CREATE TABLE statement,
  if remote server's version is earlier than 4.1, which means it 
  doesn't support changing charsets.

  client/mysqldump.c@stripped, 2008-03-12 17:03:49-04:00, cmiller@stripped +24 -3
    Don't set the charset for receiving results if the server doesn't 
    support it.

diff -Nrup a/client/mysqldump.c b/client/mysqldump.c
--- a/client/mysqldump.c	2007-12-04 22:07:00 -05:00
+++ b/client/mysqldump.c	2008-03-12 17:03:49 -04:00
@@ -109,6 +109,8 @@ static char  *opt_password=0,*current_us
              *log_error_file= NULL;
 static char **defaults_argv= 0;
 static char compatible_mode_normal_str[255];
+/* Server supports character_set_results session variable? */
+static my_bool server_supports_switching_charsets= TRUE;
 static ulong opt_compatible_mode= 0;
 #define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
 #define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
@@ -1011,11 +1013,27 @@ static int mysql_query_with_error_report
 }
 
 
+/**
+  Switch charset for results to some specified charset.  If the server does not
+  support character_set_results variable, nothing can be done here.  As for
+  whether something should be done here, future new callers of this function
+  should be aware that the server lacking the facility of switching charsets is
+  treated as success.
+
+  @note  If the server lacks support, then nothing is changed and no error
+         condition is returned.
+
+  @returns  whether there was an error or not
+*/
 static int switch_character_set_results(MYSQL *mysql, const char *cs_name)
 {
   char query_buffer[QUERY_LENGTH];
   size_t query_length;
 
+  /* Server lacks facility.  This is not an error, by arbitrary decision . */
+  if (!server_supports_switching_charsets)
+    return FALSE;
+
   query_length= my_snprintf(query_buffer,
                             sizeof (query_buffer),
                             "SET SESSION character_set_results = '%s'",
@@ -1111,11 +1129,14 @@ static int connect_to_db(char *host, cha
     DB_error(&mysql_connection, "when trying to connect");
     DBUG_RETURN(1);
   }
-  /*
-    Don't dump SET NAMES with a pre-4.1 server (bug#7997).
-  */
   if (mysql_get_server_version(&mysql_connection) < 40100)
+  {
+    /* Don't dump SET NAMES with a pre-4.1 server (bug#7997).  */
     opt_set_charset= 0;
+
+    /* Don't switch charsets for 4.1 and earlier.  (bug#34192). */
+    server_supports_switching_charsets= FALSE;
+  } 
   /*
     As we're going to set SQL_MODE, it would be lost on reconnect, so we
     cannot reconnect.
Thread
bk commit into 5.0 tree (cmiller:1.2572) BUG#34192Chad MILLER12 Mar